Форум: "Основная";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];
ВнизПользовательский формат бумаги Найти похожие ветки
← →
Programmix © (2004-12-28 15:36) [0]Необходимо задать пользовательский формат бумаги принтера. У данного принтера (HP deskjet 3550) через диалог можно задать до 3-х пользовательских размеров бумаги. Как же сделать это программно? Попытки использовать поля dmPaperSize, dmPaperWidth, dmPaperLength структуры PDeviceMode^ успеха не приносят, с DocumentProperties тоже не получается. Если кто-то знает как задать пользовательский формат бумаги в Delphi, приведите пожалуйста код, а то устал "топтаться на месте". Помогите кто может.
← →
Programmix © (2004-12-28 16:07) [1]А в ответ - тишина...
← →
Programmix © (2004-12-28 16:26) [2]Да... Это вам не OnDblClick...
← →
Programmix © (2004-12-28 16:40) [3]Если надо подождать, я подожду...
← →
Programmix © (2004-12-28 16:41) [4]Может что-то в вопросе непонятно?
← →
Programmix © (2004-12-28 16:48) [5]Ну что? Никаких идей?
← →
Семен Сорокин © (2004-12-28 16:59) [6]
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 18:35) [7]Да этот код работает, но только для стандартных размеров бумаги, при попытке установить нестандартные размеры ничего не происходит, к сожалению...
← →
Семен Сорокин © (2004-12-28 18:45) [8]dmFields := dmFields or DM_PAPERSIZE;
dmPaperSize := DMPAPER_USER;
???
приведи код заполнения св-в
← →
Programmix © (2004-12-28 18:49) [9]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;
← →
Programmix © (2004-12-28 18:53) [10]извиняюсь не DMPAPER_FIRST а DMPAPER_USER (просто опечатка, в программе именно DMPAPER_USER)
← →
Семен Сорокин © (2004-12-28 18:54) [11]dmPaperSize := DMPAPER_USER;
?
← →
Programmix © (2004-12-28 18:55) [12]см [10]
← →
Семен Сорокин © (2004-12-28 19:00) [13]попробуй так:
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 19:06) [14]dmOrientation меняется, размеры - нет
← →
Семен Сорокин © (2004-12-28 19:09) [15]вот еще нашел:
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:10) [16]Спасибо, всего доброго.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.034 c