AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Probleme mit dem Drucken und den Koordinaten
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit dem Drucken und den Koordinaten

Ein Thema von Luckie · begonnen am 27. Sep 2004 · letzter Beitrag vom 27. Sep 2004
Antwort Antwort
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

Probleme mit dem Drucken und den Koordinaten

  Alt 27. Sep 2004, 03:08
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:
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);
FVerSize und FHorzSize ermittele ich mit MSDN-Library durchsuchenGetDevicecaps und liegen in Millimetern vor. LineHeight hat den Wert 47.
Delphi-Quellcode:
SetMapMode(Canvas.Handle, MM_LOMETRIC);
GetTextMetrics(Canvas.Handle, tm);
LineHeight := (tm.tmHeight + tm.tmExternalLeading);
FHorzSize := GetDeviceCaps(Canvas.Handle, HORZSIZE);
FVerSize := GetDeviceCaps(Canvas.Handle, VERTSIZE);
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:
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. Was mache ich also falsch?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Gollum
Gollum

Registriert seit: 14. Jan 2003
Ort: Boxberg
456 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: Probleme mit dem Drucken und den Koordinaten

  Alt 27. Sep 2004, 08:05
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.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Probleme mit dem Drucken und den Koordinaten

  Alt 27. Sep 2004, 08:17
Mist das hatte ich nicht bedacht. Funktioniert aber immer noch nicht:
Delphi-Quellcode:
  rec.Top := -(FVerSize - TOPBORDER) * SCALE - (LineHeight);
  rec.Left := LEFTBORDER * SCALE;
  rec.Bottom := -((FVerSize - TOPBORDER) * SCALE);
  rec.Right := (FHorzSize - RIGHTBORDER) * SCALE;
rec.Top = -2707 -> 1/10 mm -> -270,7 mm -> 27,07 cm
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Gollum
Gollum

Registriert seit: 14. Jan 2003
Ort: Boxberg
456 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

Re: Probleme mit dem Drucken und den Koordinaten

  Alt 27. Sep 2004, 08:35
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.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Probleme mit dem Drucken und den Koordinaten

  Alt 27. Sep 2004, 08:38
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. 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:
    rect.Top := -550;
    rect.Left := 0;
    rect.Bottom := -800;
    rect.Right := 1700;
    DrawText(Printer.Canvas.Handle, PChar(MYTEXT), length(MYTEXT), rect, DT_LEFT);
Da sehe ich was auf dem Drucker.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Gollum
Gollum

Registriert seit: 14. Jan 2003
Ort: Boxberg
456 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

Re: Probleme mit dem Drucken und den Koordinaten

  Alt 27. Sep 2004, 09:12
Hallo,

Zitat von luckie:
Oder steht das etwa auch auf dem Kopf
Genau!!
  Mit Zitat antworten Zitat
Benutzerbild von MacGuyver
MacGuyver

Registriert seit: 9. Sep 2003
Ort: Wildeshausen
295 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Probleme mit dem Drucken und den Koordinaten

  Alt 27. Sep 2004, 11:29
Moin auch

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
Englisch eine Weltsprache? Zu kompliziert und der nahe Osten würde Englisch als Pflichtweltsprache nicht akzeptieren.
IDO wäre genau das Richtige: http://forum.idolinguo.de/index.php oder www.idolinguo.de
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:26 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