Home » Tipps & Tricks » Drucker » Druckereigenschaften » Druckereinstellungen ohne Dialog ändern

Druckereinstellungen ohne Dialog ändern

Wenn man nicht den Umweg über den TPrintDialog gehen will, um Druckereigenschaften zu ändern, kann man folgende Funktion verwenden:

Procedure SetPrinterSettings;
Var
   Device, Driver, Port: Array [0..255] Of Char;
   hDevMode:             THandle;
   pDevMode:             PDeviceMode;
Begin
     Printer.GetPrinter(Device, Driver, Port, hDevmode);
     Printer.SetPrinter(Device, Driver, Port, 0);
     Printer.GetPrinter(Device, Driver, Port, hDevmode);
     If hDevmode  0 Then Begin
        pDevmode := GlobalLock(hDevmode);
        If pDevmode  NIL Then
           Try
              // Ändern der Auflösung (hier 300 dpi):
              pDevMode^.dmPrintQuality := LoWord(300);
              pDevmode^.dmYResolution  := HiWord(300);
              pDevmode^.dmFields       := pDevmode^.dmFields Or
                                          DM_PRINTQUALITY Or
                                          DM_YRESOLUTION;
              // Ändern der Papiergröße (hier A5):
              pDevMode^.dmPaperSize    := DMPAPER_A5;
              pDevmode^.dmFields       := pDevmode^.dmFields Or
                                          DM_PAPERSIZE;
           Finally
              GlobalUnlock(hDevmode);
           End;
     End;
End;

Um weitere Druckereigenschaften zu ändern, müssen nur die Eigenschaften von pDevMode geändert werden und das geänderte in dmFields reingeschrieben werden. Alle möglichen Werte stehen im MSDN unter dem Stichwort DEVMODE.