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)