![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Пользовательский формат бумаги [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]А в ответ - тишина...