двухстороння печать в deplhi как ?!

  • Автор темы paralax
  • Дата начала
P

paralax

как перевести принтер в режим двухсторонней печати в delphi
 
A

ale111zzz

Если у тебя Delphi for .NET, см. книгу Петцольд "Программирование Windows Forms на C#". Там как раз и написано про классы .NET, которые можно вызывать без различно, на каком языке C# или Paskal

Эл. копия существует в интернете.
 

ploki

Местный
Регистрация
16 Май 2005
Сообщения
237
Реакции
180
Credits
0
Var
H: THandle;
DM: PDeviceMode;
begin
Printer.GetPrinter(DeviceName, DriverName, PortName, H);
//В принципе, может потребоваться работа с памятью под структуру DEVMODE.
//Смотри подробнее в MSDN в топике "HOWTO: Modify Printer Settings with the DocumentProperties() Function"
DM:=GlobalLock(H);
try
if (DM.dmFields and DM_DUPLEX) then //Если принтер поддерживает дуплекс
begin
DM.dmDuplex:=DMDUP_HORIZONTAL; //Режим дуплекса
end;
finally
GlobalUnlock(H);
end;
end;

А часто лучше просто дать пользователю возможность установить дуплекс в диалоге настройки принтера.
 
P

paralax

ploki написал(а):
Var
H: THandle;
DM: PDeviceMode;
begin
Printer.GetPrinter(DeviceName, DriverName, PortName, H);
//В принципе, может потребоваться работа с памятью под структуру DEVMODE.
//Смотри подробнее в MSDN в топике "HOWTO: Modify Printer Settings with the DocumentProperties() Function"
DM:=GlobalLock(H);
try
if (DM.dmFields and DM_DUPLEX) then //Если принтер поддерживает дуплекс
begin
DM.dmDuplex:=DMDUP_HORIZONTAL; //Режим дуплекса
end;
finally
GlobalUnlock(H);
end;
end;

А часто лучше просто дать пользователю возможность установить дуплекс в диалоге настройки принтера.

Чем иницилизить (DeviceName, DriverName, PortName) ?
 

ploki

Местный
Регистрация
16 Май 2005
Сообщения
237
Реакции
180
Credits
0
Инициализировать нужно при вызове SetPrinter :).
А при вызове GetPrinter эти параметры - выходные, то есть это ссылки на буфера, заполняемые системой.
DeviceName - название принтера (например - 'Epson EPL-5700'),
DriverName - обычно 'WINSPOOL',
APort - в WIN32 это nil.
 
P

paralax

на GetPrinter Delphi делает rise exception и падает :(
Printer.GetPrinter(<name>, 'WINSPOOL', nil, H);
 

ploki

Местный
Регистрация
16 Май 2005
Сообщения
237
Реакции
180
Credits
0
Повторяю (наверное плохо объяснил :( ), эти параметры - выходные, то есть это ссылки на буфера, заполняемые системой.
Например:

var
ADeviceName, ADriver, APort: array[0..100] of Char;
ADeviceMode: THandle;
...
begin
Printer.GetPrinter(ADeviceName, ADriver, APort, ADeviceMode);
...