Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Параметры бумаги в принтере [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


Наверх

Титульная страница Поиск, карта сайта Написать письмо