![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Параметры бумаги в принтере [D7]
vidiv © (2005-05-20 13:33:00)Я использую класс TPrinter (из Printers) для печати, т.к. он очень простой. Вопрос такой, как установить для принтера размер бумаги A4 ?
vidiv (2005-05-26 12:58:00) [1]
PHandle(PChar(oPrinter)+oPrinter.InstanceSize-4)^;
как это объяснить?
Marser (2005-05-24 14:44:00) [2]
> Alex Konshin © (24.05.05 13:05) [11] [Новое
>сообщение][Ответить]
> http://home.earthlink.net/~akonshin/files/PrintLib.pas
> Я там хакаю Printer.pas
Видел когда-то :-) Даже просматривал по поводу сабжа :-)
Alex Konshin (2005-05-24 13:05:00) [3]http://home.earthlink.net/~akonshin/files/PrintLib.pas
Я там хакаю Printer.pas
Marser (2005-05-23 14:49:00) [4]Ну, я ведь не готовый код дал, сам заинтересовался. Немного почитал хелп, немного Кулибу(там ошибок вообще-то выше крышы).
> -=XP=- © (23.05.05 11:14) [8] [Новое
>сообщение][Ответить]
> globalfree(hpr); - удаляет структуру из памяти; на
> самом деле лишняя строка.
Тоже не совсем понял, зачем.
vidiv (2005-05-23 12:21:00) [5]
> -=XP=- © (23.05.05 11:14) [8]
Понято, спасибо!
:)
Спасибо всем! Особенно, товарищу по оружию Marser'у.
Прошу не удалять это сообщение, т.к. считаю что благодарность - неотъемлемая часть "вопроса"!
-=XP=- (2005-05-23 11:14:00) [6]globalfree(hpr); - удаляет структуру из памяти; на самом деле лишняя строка.
vidiv (2005-05-23 09:17:00) [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);
То все начинает работать. С чем это может быть связано? Чтобы ответить на этот вопрос хелпа и моих знаний английского не хватило
vidiv (2005-05-23 04:02:00) [8]
> Marser © (22.05.05 20:44) [4]
Пардон, забыл... Огромное тебе спасибо!!! Дружище, очень выручил!
vidiv (2005-05-23 02:57:00) [9]
> Marser © (22.05.05 20:44) [4]
О! драгоценный код!
Вопрос: А если принтер не поддерживает А4, что будет ?
Marser (2005-05-22 20:44:00) [10]Значит, нужно менять режим устройства(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-21 22:10:00) [11]Marser © (20.05.05 13:52) [1]
> PageHeight
> PageWidth
Эти параметры задаются в пикселях, к томуже readonly
default (2005-05-20 13:54:00) [12]Вот так люди меняют ориентацию:)
Marser (2005-05-20 13:52:00) [13]Orientation
PageHeight
PageWidth