Текущий архив: 2005.07.18;
Скачать: CL | DM;
Вниз
Параметры бумаги в принтере Найти похожие ветки
← →
vidiv © (2005-05-20 13:33) [0]Я использую класс TPrinter (из Printers) для печати, т.к. он очень простой. Вопрос такой, как установить для принтера размер бумаги A4 ?
← →
Marser © (2005-05-20 13:52) [1]Orientation
PageHeight
PageWidth
← →
default © (2005-05-20 13:54) [2]Вот так люди меняют ориентацию:)
← →
vidiv © (2005-05-21 22:10) [3]Marser © (20.05.05 13:52) [1]
> PageHeight
> PageWidth
Эти параметры задаются в пикселях, к томуже readonly
← →
Marser © (2005-05-22 20:44) [4]Значит, нужно менять режим устройства(device mode). TPrinter такое сделать не позволяет, потому обратимся к API:
var td:pDevMode;
hpr:Thandle;
pdevname,pdrv,pport:pchar;
begin
pdevname:=stralloc(100);
pdrv:=stralloc(100);
pport:=stralloc(25);
printer.GetPrinter(pdevname,pdrv,pport,hpr);
if hpr<>0 then
try
td:=globallock(hpr);
if td<>nil then
td^.dmSize:=DMPAPER_A4;
finally
globalunlock(hpr);
globalfree(hpr);
strdispose(pdevname);
strdispose(pdrv);
strdispose(pport)
end;
← →
vidiv © (2005-05-23 02:57) [5]
> Marser © (22.05.05 20:44) [4]
О! драгоценный код!
Вопрос: А если принтер не поддерживает А4, что будет ?
← →
vidiv © (2005-05-23 04:02) [6]
> Marser © (22.05.05 20:44) [4]
Пардон, забыл... Огромное тебе спасибо!!! Дружище, очень выручил!
← →
vidiv © (2005-05-23 09:17) [7]
> Marser © (22.05.05 20:44) [4]
Кстати код, почемуто не работает.
Я покапался в хелпе, и сделал следующие изменения:
Вместо:if td<>nil then
td^.dmSize:=DMPAPER_A4;
Написал:if td<>nil then begin
td^.dmSize := sizeof(_devicemode);
td^.dmFields := DM_PAPERSIZE;
td^.dmPaperSize := DMPAPER_A4;
end;
Но код по прежнему не работал, причем повторный его запуск выдавал ошибку. Методом перебора я понял, что если закоментировать строкуglobalfree(hpr);
То все начинает работать. С чем это может быть связано? Чтобы ответить на этот вопрос хелпа и моих знаний английского не хватило
← →
-=XP=- © (2005-05-23 11:14) [8]globalfree(hpr); - удаляет структуру из памяти; на самом деле лишняя строка.
← →
vidiv © (2005-05-23 12:21) [9]
> -=XP=- © (23.05.05 11:14) [8]
Понято, спасибо!
:)
Спасибо всем! Особенно, товарищу по оружию Marser"у.
Прошу не удалять это сообщение, т.к. считаю что благодарность - неотъемлемая часть "вопроса"!
← →
Marser © (2005-05-23 14:49) [10]Ну, я ведь не готовый код дал, сам заинтересовался. Немного почитал хелп, немного Кулибу(там ошибок вообще-то выше крышы).
> -=XP=- © (23.05.05 11:14) [8] [Новое
>сообщение][Ответить]
> globalfree(hpr); - удаляет структуру из памяти; на
> самом деле лишняя строка.
Тоже не совсем понял, зачем.
← →
Alex Konshin © (2005-05-24 13:05) [11]http://home.earthlink.net/~akonshin/files/PrintLib.pas
Я там хакаю Printer.pas
← →
Marser © (2005-05-24 14:44) [12]
> Alex Konshin © (24.05.05 13:05) [11] [Новое
>сообщение][Ответить]
>http://home.earthlink.net/~akonshin/files/PrintLib.pas
> Я там хакаю Printer.pas
Видел когда-то :-) Даже просматривал по поводу сабжа :-)
← →
vidiv © (2005-05-26 12:58) [13]
PHandle(PChar(oPrinter)+oPrinter.InstanceSize-4)^;
как это объяснить?
Страницы: 1 вся ветка
Текущий архив: 2005.07.18;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.035 c