| Гость 
 
 
 
 
 
 
 | 
			
				|  Добавлено: Чт Май 06 2004 01:21    Заголовок сообщения: Как из проги задать пользовательский формат бумаги принтера? |   |  
				| 
 |  
				| Пытаюсь задать пользовательский формат бумаги для принтера чарез структуру DEVMODE (WIN32 API) в среде Windows2000. Использую поля dmPaperLength, dmPaperWidth, dmOrientation и dmPaperSize. При этом размеры бумаги НЕ МЕНЯЮТСЯ т.е. поля dmPaperLength и dmPaperWidth не срабатывают, а поля dmOrientation и dmPaperSize работают нормально.
 
 В начале пробовал так:
 pDevMode->dmFields = DM_PAPERSIZE | DM_PAPERLENGTH | DM_PAPERWIDTH;
 pDevMode->dmPaperSize = DMPAPER_USER;
 pDevMode->dmPaperLength = 6000;
 pDevMode->dmPaperWidth = 5000;
 Размеры не меняются (остается формат по умолчанию).
 
 Затем нашёл такое описание:
 "Такой способ установки принтера работает только в среде Windows 9x. Под управлением Windows NT/2000 необходимо создать пользовательскую форму структуры типа FORM_INFO_1 и добавить ее в объект принтера, используя функцию AddForm(). Затем нужно выбрать эту форму, используя структуру PRINTER_INFO_2"
 
 Попробовал такой код:
 HANDLE prn;
 DWORD   dwNeeded;
 PRINTER_INFO_2 *pPrtInfo2;
 PRINTER_DEFAULTS pd;
 ZeroMemory(&pd, sizeof(pd));
 pd.DesiredAccess = PRINTER_ALL_ACCESS;
 if(OpenPrinter(lpInfo[1].pPrinterName, &prn, &pd))
 {
 Message("Принтер открыт");
 GetPrinter( prn, 2, NULL, 0, &dwNeeded );
 pPrtInfo2 = ( PRINTER_INFO_2*) malloc(dwNeeded);
 GetPrinter( prn, 2, (LPBYTE)pPrtInfo2, dwNeeded, &dwNeeded );
 if (!(pPrtInfo2->pDevMode->dmFields & DM_PAPERSIZE))
 {
 Message("Error_DM_PAPERSIZE");
 }
 if (!(pPrtInfo2->pDevMode->dmFields & DM_FORMNAME))
 {
 Message("Error_DM_FORMNAME");
 }
 
 Этот код выдал "Error_DM_FORMNAME" т.е. якобы драйвер принтера не поддерживает поле DM_FORMNAME??? Следовательно выбрать пользовательскую форму мне не удастся.
 
 Подскажите как в Win2000 задать пользовательский формат бумаги???
 |  |