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 Bestimmte Druckerdaten nicht in DevMode? Wo sonst? (https://www.delphipraxis.net/126273-bestimmte-druckerdaten-nicht-devmode-wo-sonst.html)

r29d43 22. Dez 2008 00:30


Bestimmte Druckerdaten nicht in DevMode? Wo sonst?
 
Hallo,

in meinem Prog. gibt es zwei unterschiedliche Druckarbeiten, die jeweils über einen eigenen Druckerdialog gemanagt werden. Um nun deren Einstellungen gegenüber dem jeweils anderen Dialog konstant zu halten, speichere ich diese Einstellungen nach einem jeweiligen Drucken einfach ab und setze sie dann vor jedem nächsten gleichen Druckjob wieder neu. Gelesen und geschriebenen werden dabei (mittels Printer.GetPrinter und Printer.SetPrinter) immer die 3 Strings "Device", "Driver", "Port" und über die "DevMode"-Handle auch diese im Topic schon erwähnten "DevMode"-Daten. So weit - so gut.


Jetzt ist es aber leider so, dass nicht alle Einstellungs-Daten des Print-Dialoges auch in diesem DevMode-Rekord drin zu sein scheinen. Speziell vermisse ich da das "Seitenformat" (zum Drucken mehrer Seiten auf einem Blatt), welches auf dem PrintDialog über die "Eigenschaften"-Button und dann über den "Layout"-Reiter erreichbar ist. Diese Einstellung lässt sich einfach nicht über ein vorheriges Sichern und ein dann anschließendes wieder Zurückschreiben des DevMode-Rekords wiederherstellen. (Andere plus minus vergleichbare Daten sind ansonsten aber in diesem DevMode-Rekord drin, wie z.B. die "Ausrichtung" (Hochformat/Querformat) oder die auf dem "Papier/Qualität"-Reiter angesiedelte "Papierquelle" (Automatisch auswählen, Kassette1, Kassette2...) oder auch die dort nochmals über die "Erweitert..."-Button erreichbare "Papiergröße" (A4,A5,A6,B6...))

Aber leider eben nicht die Daten über dieses besagte "Seitenformat".

Per WinSpool.DeviceCapabilities und fwCapability=DC_NUP kann man zwar eine DWord-Array mit all den möglichen Seiten pro Blatt abfragen, aber, wie gesagt, leider fehlt in DevMode dann eine dazu äquivalente Größe, die sagt, welches Element dieser DWord-Array das auch gerade ausgewählte ist.

Eventuell hat ja jemand eine Ahnung, wo diese spezielle Einstellungs-Data sonst noch zu finden sein könnte?

?

Thx schonmal im Voraus.

Gruß,
rXdY

Flocke 22. Dez 2008 01:09

Re: Bestimmte Druckerdaten nicht in DevMode? Wo sonst?
 
Wie viele Bytes der DEVMODE-Struktur sicherst du bzw. stellst du wieder her?

Es sollten (DEVMODE.dmSize + DEVMODE.dmDriverExtra) Bytes sein. Insbesondere im druckerspezifischen zusätzlichen Bereich (dmDriverExtra) müssten die von dir gewünschten Informationen liegen.

r29d43 22. Dez 2008 08:38

Re: Bestimmte Druckerdaten nicht in DevMode? Wo sonst?
 
Zitat:

Zitat von Flocke
Wie viele Bytes der DEVMODE-Struktur sicherst du bzw. stellst du wieder her?

Der Einfachheit halber habe ich bisher immer mit einem Rekord vom Typ TDevMode gearbeitet. Aber da wird jetzt wohl ein von GetMem gelieferter Pointer draus werden.

Ok, thx, probier ich mal.

r29d43 22. Dez 2008 11:07

Re: Bestimmte Druckerdaten nicht in DevMode? Wo sonst?
 
yo, hat geklappt.

Habe es allerdings nicht mit GetMem gemacht, sondern diese Driver-ExtraDaten nach dem Laden der TDevMode-Variable einfach schnell noch in einen TMemoryStream hinterhergeladen ...bzw. dann beim Zurückschreiben von da auch wieder herausgeholt. War bezüglich meines bis dato schon existierenden Codes der dann einfach etwas geringere Arbeitsaufwand. :)


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