Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - TPrinter bei Programmstart zuweisen


Mathematiker - Fr 14.04.17 18:01
Titel: TPrinter bei Programmstart zuweisen
Hallo,
nach einem Programmstart ist dem TPrinter der Standarddrucker zugewiesen.
Mit dem einfachen Aufruf des TPrinterSetupDialogs mit

Delphi-Quelltext
1:
printerdialog1.execute                    

kann man einen anderen Drucker auswählen, der während der Laufzeit des Programms voreingestellt bleibt. Das klappt problemlos.
Nun möchte ich aber, dass beim Programmstart dieser andere Drucker automatisch ausgewählt wird.

Dazu möchte ich diesen Drucker in die ini-Datei schreiben und bei Programmstart lesen und einstellen. Und das ist mein Problem.
TPrinterSetupDialogs gibt ein Handle auf den Drucker zurück. Aber wie speichere ich das Format HDC? In der Hilfe finde ich nichts in der Form WriteHDC oder so ähnlich ...
Und vor allem, wie kann man es lesen und dann zuweisen?

Danke für Hilfe
Steffen


Delete - Fr 14.04.17 18:38

- Nachträglich durch die Entwickler-Ecke gelöscht -


jaenicke - Fr 14.04.17 18:44

Ein Handle zu speichern bringt dir rein gar nichts. Wenn das nach dem Neustart der Anwendung das gleiche ist, ist das reiner Zufall.

Stell dir das vor wie die Nummer das Schranks im Schwimmbad. Beim nächsten Besuch kann der schon besetzt sein. Oder wie eine Speicheradresse bei einem Pointer.

Speichern solltest du schlicht den Druckernamen.


Delete - Fr 14.04.17 19:12

- Nachträglich durch die Entwickler-Ecke gelöscht -


Mathematiker - Fr 14.04.17 19:36

Hallo,
ich habe jetzt mit

Delphi-Quelltext
1:
2:
if printer.printers<>nil then 
  ini.writestring(aktuellnameini,'Drucker',printer.printers[printer.printerindex]);
den eingestellten Drucker gespeichert und den aus der Ini gelesenen Drucker mit

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
if druckername<>'' then begin
  //Kontrolle das der Drucker noch da ist
  if printer.printers.indexof(druckername)<0 then druckername:=''
    if druckername<>'' then begin printer.printerindex:=printer.printers.indexof(druckername);
  end;
end;
beim Start wieder zugewiesen. Im Moment sieht es gut aus.
Blöd ist nur, dass ich im Moment die Drucker nicht testen kann. Ob es funktioniert, werde ich melden.

Danke für die Hinweise
Steffen


jaenicke - Fr 14.04.17 19:52

user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
Nach 3 Systemstarts hintereinander und dem Gegenprüfuen des Drucker-Handle, kam ich (zufällig?) an ein und den selben Wert. Nach 100x werde ich mich den Euro Millionen widmen !
Naja, die Vergabe des Handles wird nicht wirklich zufällig sein, so dass es durchaus sein kann, dass es immer das gleiche ist. Aber eben nicht per Definition, sondern weil es immer wieder neu so vergeben wird. Aber spätestens sobald Drucker hinzukommen oder entfernt werden, wird das wohl kaum so bleiben.

Deshalb ist der Weg über den Druckernamen der beste und zudem kann man den Wert dann auch manuell in der Konfigurationsdatei verstehen. Das machen wir übrigens auch bei allen unseren Kunden darüber. ;-)


Delete - Fr 14.04.17 20:19

- Nachträglich durch die Entwickler-Ecke gelöscht -