Autor Beitrag
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Fr 14.04.17 18:01 
Hallo,
nach einem Programmstart ist dem TPrinter der Standarddrucker zugewiesen.
Mit dem einfachen Aufruf des TPrinterSetupDialogs mit
ausblenden 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

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 14.04.17 18:38 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: Mathematiker
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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.

Für diesen Beitrag haben gedankt: Mathematiker
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 14.04.17 19:12 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Fr 14.04.17 19:36 
Hallo,
ich habe jetzt mit
ausblenden 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
ausblenden 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

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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. ;-)
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 14.04.17 20:19 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: Mathematiker