Может ли мне кто-либо сказать, как с помощью TPrinter сделать следующее?:
Вот пример одного из моих компонентов, инкапсулирующий вышесказанную функциональность:
procedure TCrpePrinter.GetCurrentPrinter;
var
lpDevice: PChar;
lpDriver: PChar;
lpPort: PChar;
Handle: THandle;
begin lpDevice := StrAlloc(255); lpDriver := StrAlloc(255); lpPort := StrAlloc(255); try Printer.GetPrinter(lpDevice,lpDriver,lpPort,Handle); if Handle <> 0 then { если это не 0, то мы имеем указатель на структуру устройства} begin FDevMode := Ptr(Handle,0); {Получаем дескриптор структуры устройства} FDevice := StrPas(lpDevice); FDriver := StrPas(lpDriver); FPort := StrPas(lpPort); end else begin Printer.PrinterIndex := Printer.PrinterIndex; {Этим мы пытаемся осуществить инициализацию} Printer.GetPrinter(lpDevice,lpDriver,lpPort,Handle); if Handle <> 0 then begin FDevMode := Ptr(Handle,0); FDevice := StrPas(lpDevice); FDriver := StrPas(lpDriver); FPort := StrPas(lpPort); end else begin FDevMode := nil; raise ECrpe.Create('Ошибка загрузки драйвера принтера'); end; end; finally StrDispose(lpDevice); StrDispose(lpDriver); StrDispose(lpPort); end; end; |
Изменение лотка и количества копий:
dmCopies := 2; dmDefaultSource := 2; {Нижний лоток} |
Как только вы получите указатель на структуру devmode, вы вправе делать изменения любых полей. Говорят, могут быть проблемы при изменении лотков во время печати, но сам я не пробовал менять эти поля в структуре DevMode.
- Jeff Fisher [000822]