Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.49 MB
Время: 0.072 c
4-1116593693
Rius
2005-05-20 16:54
2005.07.18
Панели групп как в Windows Explorer через MS Visual Styles API ?


14-1119521707
BiN
2005-06-23 14:15
2005.07.18
Опрос. Статьи на какие темы вы хотели бы видеть на delphimaster?


1-1120031019
WasHer
2005-06-29 11:43
2005.07.18
TMaskEdit.EditMask - пропадает текст


14-1119870378
zunder
2005-06-27 15:06
2005.07.18
Установка D2005 на WinXPSP2


14-1119482785
kaif
2005-06-23 03:26
2005.07.18
Зацените сайт