Re: Print trouble
- From
- niro ()
- To
- niro ()
- Date
- 2001-08-30T18:29:15Z
- Area
- SU.WINDOWS.NT.PROG
From: "niro" <niro@krista.ru>
ПРИВОЖУ КОД:
procedure SetPageSizes( APageLength, APageWidth : Integer);
var
hDeviceMode, ADeviceMode : THandle;
StubDevMode : TDeviceMode;
NewDevMode : ^TDeviceMode;
ADevice, ADriver, APort : array[0..255] of Char;
hPrinter : THandle;
begin
Printer.GetPrinter( ADevice, ADriver, APort, ADeviceMode);
if not OpenPrinter( ADevice, hPrinter, nil ) then
raise EPrinter.Create( SysErrorMessage( GetLastError ));
try
hDeviceMode := GlobalAlloc( GHND, DocumentProperties(0, hPrinter,
ADevice, StubDevMode, StubDevMode, 0) );
NewDevMode := GlobalLock(hDeviceMode);
DocumentProperties( 0, hPrinter, ADevice, NewDevMode^,
NewDevMode^,DM_OUT_BUFFER);
try
// Формируем флаг об изменении параметра числа копий
NewDevMode.dmFields := NewDevMode.dmFields or DM_COPIES;
NewDevMode.dmCopies := 2;
DocumentProperties( 0, hPrinter, ADevice, NewDevMode^,
NewDevMode^,DM_IN_BUFFER or DM_OUT_BUFFER);
finally
GlobalUnlock(hDeviceMode);
end;
// Получим снова параметры принтера, чтобы проверить изменения
DocumentProperties( 0, hPrinter, ADevice, NewDevMode^,
NewDevMode^,DM_OUT_BUFFER);
// Эта строчка вообще не знаю зачем???
Printer.SetPrinter( ADevice, ADriver, APort, hDeviceMode );
finally
ClosePrinter( hPrinter );
end;
end;
"niro" <niro@krista.ru> wrote in message
news:9mle9v$tkv$1@linux.krista.ru...
>
> Народ как поменять настройки принтера по умолчанию? Точнее как ЭФФЕКТИВНО
> поменять
.. :-) Если следовать рекомендациям MSDN то не получается. Алгоритм
> был испытан следующий:
>
> 1. OpenPrinter() - получаем хэндл нужного принтера. Хэндл у меня
> берeтся -верный.
>
> 2. DocumentProperties(0,hPrinter,DeviceName,DEVMODE, DEVMODE, 0) -
> берeмнеобходимый размер структуры DEVMODE,
>
> 3. Распределяем память под саму структуру,
>
> 4. DocumentProperties(0,hPrinter,DeviceName,DEVMODE, DEVMODE,
> DM_OUT_BUFFER) - записываем настройки принтера в структуру DEVMODE,
>
> 5. Меням структуру DEVMODE... например DEVMODE->dmCopies=2 (то бишь по
> умолчанию печатать 2 копии),
>
> 6. DocumentProperties(0,hPrinter,DeviceName, DEVMODE, DEVMODE,
DM_OUT_BUFFER
> | DM_IN_BUFFER) - теперь записываем вс? это назад... и после этого ничего
не
> меняется. Т.е. если получить настройки снова, то видим те же значения. Вот
в
> чeм фигня..???
>
> Подозрение: я передаю функции DocumentProperties нулевой хэндл окна
Printer
>
> Property Sheet... я думаю это верно ибо окно то нам нафиг не нужно. Народ
>
> где грабли????
>
>
>
>
>
> --
>
> BEST REGARDS FROM dr.NIRO mailto:niro@rambler.ru
>
>
>
>
>
>
--- ifmail v.2.15dev5
* Origin: Krista NPO (2:5020/400)