Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Drucker: Optionen Ausgabefach / Heften setzen (https://www.delphipraxis.net/63527-drucker-optionen-ausgabefach-heften-setzen.html)

dingdoi 20. Feb 2006 11:37


Drucker: Optionen Ausgabefach / Heften setzen
 
Moin,

ich möchte die genannten Einstellungen beim Druck mitgeben. Über SetPrinter und DEVMODE ist das meiner Meinung nach nicht möglich. Das Problem scheint zu sein, dass es sich bei diesen Optionen um Geräte spezifische Einstellungen handelt.

Irgendwelche Ideen?

Grüße,
Jan

Frank Borland 22. Feb 2006 10:16

Re: Drucker: Optionen Ausgabefach / Heften setzen
 
vor dieser Frage stand ich auch schon mal :-D

Gruß

Malte

mquadrat 13. Mär 2006 15:52

Re: Drucker: Optionen Ausgabefach / Heften setzen
 
Jep das Problem hab ich auch, nur muss ich nicht heften, sondern in Mailboxen einsortieren ;)

Der Link im Post obendrüber hat irgendwie ein total anderes Thema (Wechsel des Schachtes während des Druckens)

dingdoi 14. Mär 2006 23:34

Re: Drucker: Optionen Ausgabefach / Heften setzen
 
Moin,

ich hatte ganz vergessen, meine inzwischen gefundene Lösung hier zu posten.

Im Registry-Pfad "HKEY_CURRENT_USER\Printers\DevModePerUser\*DRUCKE RNAME*" werden die Druckeinstellungen des jeweiligen Druckers gespeichert. Um die Einstellungen zu verändern, sind diese Schritte sinnvoll:

1. Auslesen des Wertes
2. Ändern >einer< Einstellung über den Dialog "Druckeinstellungen"
3. Erneutes Auslesen des Wertes und Ermittlung der veränderten Bytes

Hinweis: Es gibt im angegebenen Registry-Pfad nur einen Eintrag, wenn der Dialog "Druckeinstellungen" für den jeweiligen Drucker mindestens 1mal aufgerufen und mit OK bestätigt wurde.


Die folgenden Prozeduren setzen ein vorhandenes StringGrid mit dem Namen "sg1" voraus.

Delphi-Quellcode:

// Einstellungen auslesen
procedure TForm1.Button3Click(Sender: TObject);
var
  r: TRegistry;
  i, iDataSize: Integer;
  tDM: TByteArray;
  PrinterName: string;
begin
  PrinterName := 'TESTDRUCKER'; // ANPASSEN !!!

  r := TRegistry.Create;
  r.rootkey:=HKEY_CURRENT_USER;
  r.OpenKey('Printers\DevModePerUser', false);
  iDataSize := r.GetDataSize(PrinterName);
  r.ReadBinaryData(PrinterName, tDM, iDataSize);
  r.CloseKey;
  r.Free;

  for i := 0 to iDataSize - 1 do
  begin
    sg1.Row := i;
    sg1.Rows[i].Strings[0] := IntToStr(i);
    sg1.Rows[i].Strings[1] := IntToSTr(tDM[i]);
  end;
end;

// Einstellung setzen
procedure TForm1.Button4Click(Sender: TObject);
var
  r: TRegistry;
  i, j, iDataSize: Integer;
  tDM: TByteArray;
  change: boolean;
  PrinterName: string;
begin

  PrinterName := 'TESTDRUCKER'; // ANPASSEN !!!

  r := TRegistry.Create;
  r.rootkey:=HKEY_CURRENT_USER;
  r.OpenKey('Printers\DevModePerUser', false);
  iDataSize := r.GetDataSize(PrinterName);
  r.ReadBinaryData(PrinterName, tDM, iDataSize);


  tDM[1234] := 56; // ANPASSEN !!!


  r.WriteBinaryData(PrinterName, tDM, iDataSize);
  r.CloseKey;
  r.Free;
end;

Grüße,
Jan

runger 15. Mär 2006 06:25

Re: Drucker: Optionen Ausgabefach / Heften setzen
 
Hallo,

woher hast du denn die Information wo und wie welcher Parameter zu setzen ist?
Hast du das mit try and error rausgefunden?
Ist das Druckerspezifisch verschieden?
Ich würde mich nicht trauen einfach solche Änderungen in die registry zu schreiben.

Rainer

mquadrat 15. Mär 2006 09:58

Re: Drucker: Optionen Ausgabefach / Heften setzen
 
Der Schlüssel DevModePerUser wird wohl nur bei lokalen Druckern verwendet. Bei Netzwerkdruckern scheint der Schlüssel Connections Verwendung zu finden. Man muss also erstmal den gewünschten Drucker suchen gehen.

Theoretisch müsste das doch der gleiche Bytestrom sein, den man auch über die API bekommt?!

EDIT:
So, getestet und für gut befunden ;) Allerdings muss man ein bisschen Aufpassen, wir man das ganze in der GUI macht, da die Byteänderungen ja nur bei diesem spezifischen Druckertreiber funktionieren. Andere Treiber könnte man damit ins Nirvana befördern.

dingdoi 15. Mär 2006 20:16

Re: Drucker: Optionen Ausgabefach / Heften setzen
 
Keine Frage, Vorsicht ist geboten. Aber man könnte z.B. vorher die Größe der DevMode prüfen. Ich halte es für sehr unwahrscheinlich, dass zwei Treiber dieselbe Datengröße produzieren.

Grüße,
Jan


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:34 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