Zum Inhalt springen

Die WinAPI-Funktion "GetDeviceCaps"


Pointerman

Empfohlene Beiträge

Hallo alle zusammen!

Ich arbeite an einem Programm, in dem der Anwender die Seitenränder des Ausdrucks frei einstellen kann. Dummerweise können die Benutzer auch 0 oder sehr kleine Werte eingeben, was sie natürlich auch machen um möglichst viele Zeilen auf eine Seite zu kriegen. Weil aber jeder Drucker einen Bereich hat, den er nicht bedrucken kann, kommt es vor, das Buchstaben (am unteren Rand sogar ganze Zeilen) verschluckt werden. Ich darf / kann / will mich nicht auf einen fest vorgegebenen Rand festlegen, weil der nichtdruckbare Bereich auf jedem Drucker unterschiedlich ist. Meine Idee ist jetzt den nichtbedruckbaren Bereich über die WinAPI-Funktion "GetDeviceCaps" abzufragen. Dummerweise habe ich das Ding noch nicht ganz verstanden (wie komm ich an das/den Drucker-Handle ran und was soll dieser Index angeben).

Mit freundlichen Grüßen, der immer für Hilfe dankbare Maart :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Falls Du MFC verwendest, kommst Du an den Drucker-DC (ich nehme an, den meinst Du mit Handle) am einfachsten, wenn Du OnBeginPrinting in Deiner von CView abgeleiteten Klasse implementierst.

Mit dem Index-Parameter von GetDeviceCaps gibst Du an, welche Information über das Device Du erfahren willst. Den linken und oberen nicht-bedruckbaren Bereich solltest Du über PHYSICALOFFSETX und PHYSICALOFFSETY bekommen können, den unteren und rechten vermutlich über Ausrechnen, genau weiß ich das nicht mehr, sorry.

Link zu diesem Kommentar
Auf anderen Seiten teilen

@Klotzkopp

:D THNX! Leider war ich inna zwischenzeit auch schon so weit.

Ich mache das ganze in (gleich nicht aufregen)Delphi:WD, dh bin ich dann anders zu meinem Drucker-Handle gekommen. Das ändert ja aber an der API nix und ich habe bewußt hierher gepostet, weil man sich hier (wie ja die Antwort bewiesen hat) mit der Win-API auskennt.

Ich habe mal versucht den druckbaren Bereich (hier stellt sich die Frage sollte man immer eindeutschen?;) ) von der Seitenhöhe abzuziehen. Als ergebnis bekomme ich dann ja, den vertikalen, nichtdruckbaren Bereich. <- Das ist mein Ergebnis A.

Jetzt hohle ich mir über GetDeviceCaps(HND, PHYSICALOFFSETY) den oberen nichtdruckbaren Bereich. Der wird ja in sog. "Deviceunits", also in Pixeln übergeben. Die hab ich dann einfach durch den Wert geteilt, den mir GetDeviceCaps(HND, LOGPIXELSY) zurückgibt (das sind die DPI). Als Ergebnis hab ich dann ja die Höhe des oberen, nichtdruckbaren Bereichs. Dieses jetzt nochmal schnell mit 25,4 malgenommen und ich hab den ganzen Schlonz in mm. <-Das ist mein Ergebnis B.

Jetzt rechne ich einfach: A - B = der untere, nichtdruckbare Bereich

Klingt logisch? -Ist es auch!

Funktioniert es? -NNEEIIINN!!!

Wenn jemand weiß warum, oder eine bessere Methode hat, bitte sofort schreiben!!!

Maart

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...