Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi [gelöst] Drucken: Device Units = Pixel? (https://www.delphipraxis.net/26959-%5Bgeloest%5D-drucken-device-units-%3D-pixel.html)

Dani 1. Aug 2004 23:48


[gelöst] Drucken: Device Units = Pixel?
 
Hallo :hi:

Eine kleine Frage: Sind die im MSDN genannten Device Units identisch mit der Größe 1 Pixel auf TPrinter.Canvas?
Zitat:

PHYSICALWIDTH For printing devices: the width of the physical page, in device units. For example, a printer set to print at 600 dpi on 8.5-x11-inch paper has a physical width value of 5100 device units. Note that the physical page is almost always greater than the printable area of the page, and never smaller.
Zum MSDN

Falls nicht: Wie kann ich Device Units in Pixel umrechnen?

Noch eine Frage: Liegt der Punkt ( 0 | 0 ) auf TPrinter.Canvas immer im bedruckbaren Bereich oder muss man sich selbst darum kümmern, indem man die X/Y Offsets addiert?

Grüße,
Dani

Luckie 1. Aug 2004 23:59

Re: Drucken: Device Units = Pixel?
 
Zur ersten Frage: Nein. Setze lieber den MapMode mit MSDN-Library durchsuchensetmapmode entsprechen auf Millimeter oder so, dann hast du es einfacher.

Und wo deine Koordinate 0/0 liegt hängt ganz von deinem Koordinatensytem ab und vom gestezten MapMode. Um den Ursprung des Koordinatensystem zu legen kannst du die Funktionen MSDN-Library durchsuchensetviewportorg und MSDN-Library durchsuchenSetwindoworgexe benutzen.

Dani 2. Aug 2004 00:24

Re: Drucken: Device Units = Pixel?
 
Zitat:

Setze lieber den MapMode mit SETMAPMODE entsprechen auf Millimeter oder so, dann hast du es einfacher.
Hmm, warum? Entspricht eine Device Unit denn einem Milimeter? :gruebel:
Wieso ist es einfacher, auf Millimeter umzusteigen, wenn man vorher die ganze Zeit in Pixel rechnet (mal angenommen, es soll ein TBitmap ausgedruckt werden).

Der MapMode ist standardmäßig MM_TEXT. Was halt interessant wäre ist, ob die Koordinate 0/0 auf TPrinter.Canvas physikalisch dem ersten druckbaren oberen linken Punkt entspricht.

Edit:Die Werte von Printer.PageWidth bzw. PageHeight und die Ergebnisse von GetDeviceCaps(Printer.Handle, PHYSICALWIDTH bzw. PHYSICALHEIGHT) ähneln sich halt verdächtig, daher die Annahme.

Bsp: Drucker mit 360 DPI, DIN A4 Hochformat:

---------------------------
Project1
---------------------------
Links die Ergebisse von GetDeviceCaps in "Device Units"
Rechts die Eigenschaftswerte von TPrinter in Pixel

Seitenbreite: 2976/2878
Seitenhöhe: 4209/4066

Druckränder: X: 49 Y: 43
---------------------------
OK
---------------------------

SirThornberry 2. Aug 2004 07:02

Re: Drucken: Device Units = Pixel?
 
Der Punkt 0,0 ist standardmäßig die linke obere ecke des Blattes und ist in der regel außerhalb des druckbaren bereiches. Ich würde beim drucken auch die Millimeter angabe bevorzugen da so gut wie kein Enduser weiß wie breit sein blatt in pixeln ist bzw. hängt dies ja beim bildschirm schon von der Auflösung ab und ist somit kein geeignettes maß für einen Endbenutzer. Da du über die property PageWidth und PageHeight die größe des Blattes bekommst kann es dir aber eigentlich egal sein ob du in pixeln oder Millimetern etc. rechnest da du vermutlich immer das gleiche verhältnis benutzt so das dein bild immer 3/4 des blattes oder so ausfüllt. Naja, ich rate dir einfach von der Benutzung von pixeln ab da die Größe sonstn je nach druckauflösung variiert wenn du nicht auf das Seitenverhältnis eingehst

Dani 2. Aug 2004 12:42

Re: Drucken: Device Units = Pixel?
 
Zitat:

Der Punkt 0,0 ist standardmäßig die linke obere ecke des Blattes und ist in der regel außerhalb des druckbaren bereiches.
Gut zu wissen, danke! :)

Zitat:

Ich würde beim drucken auch die Millimeter angabe bevorzugen da so gut wie kein Enduser weiß wie breit sein blatt in pixeln ist {...}
Naja der End User will in diesem Fall lediglich eine Grafik (TBitmap) auf Seitengröße gestretched haben. Hab vergessen das im ersten Post zu erwähnen. :oops:
Die TBitmaps haben A4-Format und sind immer 2454 x 3474 Pixel breit/hoch, das entspricht einem Scan auf 300 DPI. Der User muss sich also keine Gedanken machen, dass das Bild verzerrt ausgedruckt wird.

Das Hauptproblem sind halt diese "Device Units", ich kann mir leider keinen Reim darauf machen, wie viel so eine "Geräte-Einheit" nun darstellt. Verstanden hab ich, dass die Größe von der DPI-Zahl und dem eingelegten Papier (da werde ich einfach A4 voraussetzen) abhängt. Ob ich nun mit Millimeter oder mit Pixeln arbeite, die Größe der nicht bedruckbaren Ränder muss erstmal in was "Vernünftiges" umgerechnet werden...
:wiejetzt:

Grüße,
Dani

Dani 2. Aug 2004 14:39

Re: Drucken: Device Units = Pixel?
 
So. Hab mal nen Pixel auf 0/0 gesetzt, der wurde ausgedruckt. Daraus schließe ich mal, dass die Druckränder in Printer.Pagewidth und Pageheight bereits einberechnet sind. Bleibt noch das Problem mit den Device Units :gruebel:

Edit:
1 Device Unit = 1 / Auflösung des Druckers in DPI
*schäm*


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