| Autor |
Beitrag |
J.Borchert
      
Beiträge: 150
WIN10
XE2 Professional
|
Verfasst: Di 26.06.07 17:44
Benötige einen Ansatz, um eine exakte Bildschirm- (und später Drucker-) Ausgabe in Millimetern zu realisieren.
Meine ersten Tests führen immer auf etwas größere Darstellung am Bildschirm:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| procedure TForm1.BitBtn9Click(Sender: TObject); var i:integer; d:double; p1,p2:TPoint; procedure Linie(P1,P2:TPoint); begin sg2.Canvas.Pen.Style := psSolid; sg2.Canvas.MoveTo(P1.X, P1.Y); sg2.Canvas.LineTo(P2.X, P2.Y); end; begin d:=screen.PixelsPerInch/25.4*10; form1.Width := Round(d * 26) +16; sg2.Width:= Round(d * 26); sg2.Canvas.Brush.Color := clyellow; sg2.Canvas.Pen.Color := clGrayText; sg2.Canvas.Pen.Width := 1; sg2.Canvas.FillRect(sg2.ClientRect); SetMapMode(sg2.Canvas.Handle, MM_LOMETRIC); for i:=1 to 100 do begin p1.X:=round(i*20); p1.Y:=-100; p2.X:=round(i*20); p2.Y:=0; Linie(p1,p2); end; sg2.Update; end; |
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Do 28.06.07 09:32
Wichtig ist hier weniger, was in PixelsPerInch angegeben ist, sondern, wie die Physikalische Größe des Monitors aussieht...
Der PPI-Wert kann unter Anzeige "Kleine Schriftarten" auf eigentlich alles Mögliche gesetz werden und hat daher keinerlei bedeutung ...
Nutze lieber die LOWMETRIC-Einstellungen von SetMapMode (oder wie die Funktion hieß).
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
J.Borchert 
      
Beiträge: 150
WIN10
XE2 Professional
|
Verfasst: Do 28.06.07 18:24
Die LowMetric-Einstellungen benutze ich ja. (Siehe Quelltext ab da wo die Schleife kommt)
Das was oben passiert sollte die Form auf eine entsprechende Größe bringen.
Aber auch nach dem Setzen LowMetric macht das Programm keine Millimeter laut Anweisung sondern immer ca. 15% mehr.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Fr 29.06.07 09:24
LowMetric setzt ja auch nicht die Größe des Forms in Millimeter, sondern das Koordinatensystem innerhalb der Form ... Hatte da mit C mal ein wenig rumgespielt und da konnte ich Problemlos ein Form 10000x10000 Pixel auf 640*480 Auflösung auf den Bildschirm bringen (auch wenn's durch das Zooming *mist*e aussah) ...
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
iKilledKenny
      
Beiträge: 394
Erhaltene Danke: 8
Win XP
D5 Prof, C# Express 2005
|
Verfasst: Fr 29.06.07 10:55
Hatte selbes Problem bei der Erstellung eines WYSIWYG-PrintPreviews. Schau dir einfach mal das Seitenlayout bei Word mit 100% an, das ist halt immer ein bischen größer. Hauptsache ist damals gewesen, dass das Ergebnis auf dem Drucker den richtigen Abmessungen entsprach, denn das auf dem Bildschirm ist ein Preview.
|
|
J.Borchert 
      
Beiträge: 150
WIN10
XE2 Professional
|
Verfasst: Sa 30.06.07 06:10
Danke für Eure Antworten.
Ich habe auf meinem Bildschirm innerhalb der Form versucht 260mm Breite möglichst exakt darzustellen, aber es wurden daraus etwas mehr als 280mm. Ich dachte schon, daß es genauer gehen sollte.
Ich werde das Problem versuchen ganz anders anzugehen. Auf dem Bildschirm kommt es auch nur auf die Proportionalität an, das der User aus meinem "Diagramm" die richtigen Schlüsse ziehen kann, genaue Millimeter sind da nicht zwingend erforderlich.
Mal sehen, was der Ausdruck macht. Ich hoffe, da gibt es dann wirklich Millimeter.
Wenn sich LowMetric nur auf Canvas innerhalb der Form beschränkt, wie kann man dann eine Form auf möglichst genaue z.B. 200mm Breite setzen ? Wahrscheinlich garnicht ?
Kann ich kaum glauben....
Welches Maß hat ein Pixel ? Auf jedem Monitor ein anderes, nehme ich an. Wie werden dann Bilder auf verschiedenen Monitoren gleich abgebildet ?
mfG Jürgen
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Sa 30.06.07 09:49
Ein Monitor ist definiert durch seine physikalische Größe (also wie groß das dargestellte Bild ist) und die Anzahl angezeigter Pixel ... Der dpi-Wert von Windows hat damit also nix zu tun; der spielt nur bei der Darstellung von Schriften eine (untergeordnete) Rolle ...
Man kann zwar diephysikalische Größe des Monitors auslesen (EDIC IIRC), da Windows dies aber standardmäßig nicht korrekt tut UND das sowohl von der Grafikkarte als auch dem Monitor unterstützt werden muss, sollte man sich auf diese Werte nicht verlassen (Für meinen Monitor stimmen die Werte z.B. NICHT) ...
Außerdem hat man häufig denFall (z.B. bei meinem Monitor), dass man für die Horizontale und die Vertikale Anzeige unterschiedliche DPI-Werte verwenden muss. Diese sind zudem noch von der verwendeten Auflösung abhängig: Meine TFTs können sowohl 4:3 als auch 5:4 darstellen (Bildschirmfüllend) und strecken dabei das 4:3-Bild vertikal.
Auf dem Drucker ist die Millimeter-Genaue Ausgabe meist kein Problem, da hier LoMetric keine Logischen einheiten zugrundeliegen, die für jedes SubCanvas umgerechnet werden müssen, sondern physikalische Einheiten (pt vs. px). Allerdings ergeben sich hier je nach Drucker ggf. weitere Korrekturen, die man ausführen muss, da 100 px nicht wirklich 10mm sind (Zumindest ist mir dieser Effekt einmal aufgefallen, wo ich mit LoMetric gearbeitet hab).
HTH.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
|