Pointerman Geschrieben 11. September 2002 Geschrieben 11. September 2002 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 Zitieren
Klotzkopp Geschrieben 11. September 2002 Geschrieben 11. September 2002 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. Zitieren
Pointerman Geschrieben 12. September 2002 Autor Geschrieben 12. September 2002 @Klotzkopp 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 Zitieren
Empfohlene Beiträge
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.