Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Druckertreiber läßt sich nicht ändern! (https://www.delphipraxis.net/150128-druckertreiber-laesst-sich-nicht-aendern.html)

Ruewue 8. Apr 2010 07:35


Druckertreiber läßt sich nicht ändern!
 
Hallo zusammen,

ich habe das Problem, dass ich meine Druckertreiber nicht auf andere Werte umstellen kann. Ich drucke aus Delphi mit List&Label ein Formular, welches doppelseitig bedruckt werden soll. Stelle ich nun den Druckertreiber direkt um, so ist alles klar, doch er druckt auch alles andere doppelseitig. Da ich im Hintergrund drucke, kann der User hier nicht eingreifen. Ich habe schon versucht die DUPLEX Einstellung direkt im L&L Formular zu machen, doch ignoriert dies der Drucker. Auch aus Delphi heraus kann ich den Drucker nicht dazu bewegen. Er läßt überhaupt keine Veränderung aus Delphi zu. Der Drucker selbst befindet sich im Netz, ist also nicht direkt angeschlossen. Die Abfrage auf DUPLEX oder nicht funktioniert hingen aus Delphi fehlerfrei.

Hier mein Abfragecode
Delphi-Quellcode:
function TfrmVorbereitung.PrinterSupportsDuplex:Boolean;
var
  Device,Driver,Port   : array[0..255]of Char;
  hDevMode                  :THandle
  ;
begin
  Printer.GetPrinter(Device, Driver, Port, hDevMode);
  Result:= WinSpool.DeviceCapabilities(Device, Port, DC_DUPLEX, nil, nil) <> 0;
end;
Mein Code für die Änderung
Delphi-Quellcode:
procedure TfrmVorbereitung.SetPrinterSettings;
var
  Device,Driver,Port   : array[0..80]of Char;
  DevMode                     : THandle;
  pDevmode                  : PDeviceMode;
 
begin
  //--- Get printer device mode handle -----------------------------------------------------------------------
  Printer.GetPrinter(Device, Driver, Port, DevMode);
  if DevMode <> 0 then begin
    //--- lock it to get pointer to DEVMODE record -----------------------------------------------------------
    pDevMode   := GlobalLock(DevMode);
    if pDevMode <> nil then
    try
      with pDevmode^ do begin
        dmDuplex         := DMDUP_VERTICAL;
        dmFields         := dmFields or DM_DUPLEX;
      end;
    finally
      //--- unlock devmode handle ----------------------------------------------------------------------------
      GlobalUnlock(DevMode);
    end;
  end;{ If } 
end;
und der Aufruf im Program
Delphi-Quellcode:
  if PrinterSupportsDuplex then
     SetPrinterSettings;
Hat einer vieleicht eine Lösung in der Schublade? Ich wäre für jeden Hinweis dankbar.

DelphiBandit 8. Apr 2010 08:36

Re: Druckertreiber läßt sich nicht ändern!
 
Hallo Ruewue,

wir hatten seinerzeit ein ähnliches Problem mit der Schachtanwahl verschiedener Druckertreiber. Verursacht wurde es durch einen Fehler in der printers.pas von Delphi selbst. Der Fehler war sowohl in D5, als auch in RadStudio 2007 vorhanden.

Weiß nicht, ob es Dein Problem lösen kann, aber einen Versuch ist es allemal wert. Musst Du nur die printers.pas aus den Delphi-Sourcen an eine andere Stelle kopieren, korrigieren (siehe embarcadero-Link im Thread unten) und dem Projekt explizit hinzufügen.

http://www.delphipraxis.net/internal...t=printers+pas

Gruß
DelphiBandit

Ruewue 9. Apr 2010 08:50

Re: Druckertreiber läßt sich nicht ändern!
 
DAnke,

hat aber leider nichts gebracht. Ich kann die Einstellungen des Druckertreibers abfragen, sie jedoch nicht verändern. Kann es daran liegen das der Treiber auf dem Spool-Server liegt? Ich kann ihn jedoch auf meinem PC unter Drucker Einstellungen verändern und auf DUPLEX umstellen. Halt nur nicht von meinem Programm aus. Was ich auch gesehen habe, wenn ich unter WORD auf DUPLEX umschalte, das ist im Treiber auch keine Änderung zu sehen, doch er druckt beidseitig. Sollte dann doch auch aus meinem Programm gehen.

Danke schon mal !!!

Ruewue 12. Apr 2010 09:11

Re: Druckertreiber läßt sich nicht ändern!
 
Ich habs gelöst. Bin auf List&Label 15 umgestiegen und da funktioniert auch die Einstellung im Formular, so das ich keine Treiber manipulieren muss.

Gruß und Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz