Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Пользовательский формат бумаги [D7, WinXP]


Programmix ©   (2004-12-28 15:36:00) 

Необходимо задать пользовательский формат бумаги принтера. У данного принтера (HP deskjet 3550) через диалог можно задать до 3-х пользовательских размеров бумаги. Как же сделать это программно? Попытки использовать поля     dmPaperSize, dmPaperWidth, dmPaperLength структуры PDeviceMode^ успеха не приносят, с DocumentProperties тоже не получается. Если кто-то знает как задать пользовательский формат бумаги в Delphi, приведите пожалуйста код,  а то устал "топтаться на месте". Помогите кто может.


Programmix   (2004-12-28 19:10:00) [1]

Спасибо, всего доброго.


Семен Сорокин   (2004-12-28 19:09:00) [2]

вот еще нашел:

GetPrinter (ADevice, ADriver, APort, ADeviceMode);
SetPrinter (ADevice, ADriver, APort, 0); {force a Valid DevMode}
GetPrinter (ADevice, ADriver, APort, ADeviceMode); {Now
aDeviceMode is valid}


ЗЫ. Глянь сюда:
http://www.tamaracka.com/
я домой :)
С Уважением.


Programmix   (2004-12-28 19:06:00) [3]

dmOrientation меняется, размеры - нет


Семен Сорокин   (2004-12-28 19:00:00) [4]

попробуй так:

with DevMode^ do
try
  dmFields := dmFields or DM_PAPERSIZE or DM_PAPERWIDTH or DM_PAPERLENGTH or DM_ORIENTATION and not DM_FORMNAME;
  dmPaperSize := DMPAPER_USER;
  dmPaperWidth := NewPaperWidthMM; //1500
  dmPaperLength := NewPaperHeightMM; //1300
  dmOrientation := DMORIENT_PORTRAIT; //DMORIENT_LANDSCAPE;
finally
  GlobalUnlock(DeviceMode);
end;


Programmix   (2004-12-28 18:55:00) [5]

см [10]


Семен Сорокин   (2004-12-28 18:54:00) [6]

dmPaperSize := DMPAPER_USER;
?


Programmix   (2004-12-28 18:53:00) [7]

извиняюсь не DMPAPER_FIRST а DMPAPER_USER (просто опечатка, в программе  именно DMPAPER_USER)


Programmix   (2004-12-28 18:49:00) [8]

with DevMode^ do
 try
   dmFields :=dmFields + DM_PAPERSIZE + DM_PAPERWIDTH + DM_PAPERLENGTH;
   dmPaperSize := DMPAPER_FIRST;
   dmPaperWidth := NewPaperWidthMM; //1500
   dmPaperLength := NewPaperHeightMM; //1300
 finally
   GlobalUnlock(DeviceMode);
 end;


Семен Сорокин   (2004-12-28 18:45:00) [9]

dmFields := dmFields or DM_PAPERSIZE;
dmPaperSize := DMPAPER_USER;

???
приведи код заполнения св-в


Programmix   (2004-12-28 18:35:00) [10]

Да этот код работает, но только для стандартныхразмеров бумаги, при попытке установить нестандартные размеры ничего не происходит, к сожалению...


Семен Сорокин   (2004-12-28 16:59:00) [11]

var
 DeviceMode: THandle;
 DevMode: PDeviceMode;
 Device, Driver, Port: array[0..MAX_PATH] of Char;
 DriverInfo2: PDriverInfo2;
 DriverInfo2Size: DWORD;
 hPrinter: THandle;

Printer.GetPrinter(Device, Driver, Port, DeviceMode);
DevMode := PDevMode(GlobalLock(DeviceMode));
try
with DevMode^ do
 //устанавливаешь св-ва ...
finally
GlobalUnlock(DeviceMode);
end;
ResetDC(Printer.Handle, DevMode^);
OpenPrinter(Device, hPrinter, nil);
try
 GetPrinterDriver(hPrinter, nil, 2, nil, 0, DriverInfo2Size);
 GetMem(DriverInfo2, DriverInfo2Size);
 try
  GetPrinterDriver(hPrinter, nil, 2, DriverInfo2, DriverInfo2Size, DriverInfo2Size);
  StrPCopy(Driver, ExtractFileName(StrPas(DriverInfo2^.PDriverPath)));
 finally
  FreeMem(DriverInfo2, DriverInfo2Size);
 end;
finally
ClosePrinter(hPrinter)
end;
Printer.SetPrinter(Device, Driver, Port, DeviceMode);


Programmix   (2004-12-28 16:48:00) [12]

Ну что? Никаких идей?


Programmix   (2004-12-28 16:41:00) [13]

Может что-то в вопросе непонятно?


Programmix   (2004-12-28 16:40:00) [14]

Если надо подождать, я подожду...


Programmix   (2004-12-28 16:26:00) [15]

Да... Это вам не OnDblClick...


Programmix   (2004-12-28 16:07:00) [16]

А в ответ - тишина...


Наверх

Титульная страница Поиск, карта сайта Написать письмо