![]() |
Probleme mit dem Drucken und den Koordinaten
Um mir die Arbeit beim Drucken etwas zu erleichtern, habe ich den MapMode auf MM_LOMETRIC gestellt. Damit hat eine logische Einheit 0,1 mm ubnd der Ursprung liegt laut PSDK unten links.
Meine Druckroutine sieht nun so aus:
Delphi-Quellcode:
FVerSize und FHorzSize ermittele ich mit
SetMapMode(hDC, MM_LOMETRIC); // E = 0,1 mm
rec.Top := (FVerSize - TOPBORDER) * SCALE; rec.Left := LEFTBORDER * SCALE; rec.Bottom := ((FVerSize - TOPBORDER) * SCALE) - (LineHeight div SCALE); rec.right := (FHorzSize - RIGHTBORDER) * SCALE; DrawText(hDC, PChar(s), length(s), rec, DT_CENTER); ![]()
Delphi-Quellcode:
Die Werte der Konstanten sind in Millimetern angegeben. TOPBORDER hat den Wert 20 zum Beispiel. SCALE hat den Wert 10 damit ich wieder auf 0,1 mm komme. Für ein Din-A4 Blatt sind die Werte für rec jetzt:
SetMapMode(Canvas.Handle, MM_LOMETRIC);
GetTextMetrics(Canvas.Handle, tm); LineHeight := (tm.tmHeight + tm.tmExternalLeading); FHorzSize := GetDeviceCaps(Canvas.Handle, HORZSIZE); FVerSize := GetDeviceCaps(Canvas.Handle, VERTSIZE); rec.Top = 2660 rec.Left = 250 rec.Bottom = 2656 rec.Right = 1830 Aber er druckt mir nichts aus. Ich muss irgendwo noch einen Denkfehler haben. Ich finde ihn nur nicht. :roll: Was mache ich also falsch? |
Re: Probleme mit dem Drucken und den Koordinaten
Hallo,
wie Du bereits bemerkt hast, ist der Nullpunkt der Y-Achse unten. Dies bedeutet in Deinem Fall, dass alle Y-Koordinaten negativ angegeben werden müssen. |
Re: Probleme mit dem Drucken und den Koordinaten
Mist das hatte ich nicht bedacht. Funktioniert aber immer noch nicht:
Delphi-Quellcode:
rec.Top = -2707 -> 1/10 mm -> -270,7 mm -> 27,07 cm
rec.Top := -(FVerSize - TOPBORDER) * SCALE - (LineHeight);
rec.Left := LEFTBORDER * SCALE; rec.Bottom := -((FVerSize - TOPBORDER) * SCALE); rec.Right := (FHorzSize - RIGHTBORDER) * SCALE; rec.Left = 250 -> 1/10 mm -> 25 mm -> 2,5 cm rec.Bottom = -2660 -> 1/10 mm -> 266,0 mm -> 26,60 cm rec.Right = 1830 Die Werte sollten also eigentlich ein Rechteck definieren was im sichtbaren Bereich eines Din-A4 Blattes liegt. Un dmit 4,7 mm sollte es auch hochgenug für die Schrift sein. :? |
Re: Probleme mit dem Drucken und den Koordinaten
Hallo,
wahrscheinlich liegt es daran, dass bei Dir rec.Top kleiner wie re.Bottom ist. Im Prizip wird der zu druckende Bereich genau so berechnet wie auf dem Bildschirm (Nullpunkt links/oben). Bei der Ausgabe auf den Drucker musst Du dann alle Y-Koordinaten negieren. |
Re: Probleme mit dem Drucken und den Koordinaten
Muss ja auch kleiner sein. Wenn der Nullpunkt unten links liegt, negative y-Wert nach oben gehen, dann muss rec.Top ja kleiner sein als rec.Bottom damit ich ein Rechteck für den Text habe. Oder steht das etwa auch auf dem Kopf. :evil: Da wird man ja ganz irre.
Verdammt, das Ding scheint auch auf dem Kopf zu stehen. Ich habe mal ein test-Projekt gemacht:
Delphi-Quellcode:
Da sehe ich was auf dem Drucker. :shock:
rect.Top := -550;
rect.Left := 0; rect.Bottom := -800; rect.Right := 1700; DrawText(Printer.Canvas.Handle, PChar(MYTEXT), length(MYTEXT), rect, DT_LEFT); |
Re: Probleme mit dem Drucken und den Koordinaten
Hallo,
Zitat:
|
Re: Probleme mit dem Drucken und den Koordinaten
Moin auch :hi:
Ist es nicht einfacher den Drucker einmal zu kalibrieren? Der unter WinAPI ermittelte Rand stimmt nicht, zumindest nich bei allen Druckern. Also vier Linien am Rand Drucken und ausmessen. Dann nur noch von der Grundgröße Din-A4 ausgehen und berechnen. Drei Funktionen schreiben: PointCmToPix, WidthCmToPix und HeightCmToPix und dann raus damit. Dabei läßt sich wenigstens alles nachvollziehen, was passiert. Stefan |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz