Hallo,
ich habe seit einer Woche Lazarus FPC 2.6.4 und tue mich schwer mit dem Ausdrucken von normalen Text mit Canvas.TextOut.
Ich möchte einfach nur die Werte einer Formularmaske punktgenau an einer Stelle auf ein Blatt Papier (DIN A4, DIA A5 o.a.,egal) bringen.
Unter Delphi 5 ging es sehr gut mit der Funktion SetMapMode, MM_lometric (1/10mm).
Welche Funktionen gibt es jetzt bei Lazarus und wie werden diese benutzt. Habe in den letzten Tagen viel Code-Beispiele im Forum gesehen,
ist eher verwirrend.
Mein Drucker druckt mit 600 dpi.
Eine Ausgabe mit Delphi wie etwa Canvas.TextOut(740,-180,Edit1.Text); wird korrekt vom linken Rand ab druckbaren Bereich bei 74mm
ausgedruckt.
Unter Lazarus beginnt der Ausdruck schon bei 31mm vom linken Rand mit der selben Anweisung (ohne Minus-Zeichen in der Parameterangabe).
Das gleiche natürlich auch in der Y-Achse (fängt höher an).
Was müsste ich jetzt anders machen?
Müssen jetzt besondere Berechungen für das Blatt angestellt werden?
Ein zweites Problem/Umstand ist es, das die erzeugte exe-Datei eine Größe von 15 MB aufweist. Bischen viel für 3 kleine Proceduren mit
knapp 10 Programmzeilen!
Wie kann ich diese Datei reduzieren, am Besten von vornherhein?
Wo muss da was eingestellt werden?
Dokumentationen in Deutsch sind auch rar und wären für mich sehr hilfreich.
Bin dankbar wenn Ihr mir helfen könntet.
Gruß
derWitte
Text ausrucken an absoluten Koordinaten
-
- Beiträge: 5
- Registriert: Di 15. Sep 2015, 13:23
- OS, Lazarus, FPC: W10, FPC 2.6.4
- CPU-Target: 64Bit
Re: Text ausrucken an absoluten Koordinaten
Danke für die schnelle Antwort.
Die Beispiele sagen mir nichts, komme nicht weiter.
Weitere Kommentare wären von Vorteil gewesen, warum was gemacht wird,
was welche Funktion erledigen.
Ein StringGrid ist mit Delphi mit 3, 4 Schleifen schnell ausgedruckt.
In meinem Falle möchte ich nur z.B. einen Text an die Position 180,150 (mm) ausgeben.
Pixel-Angaben sind nicht erwünscht, bräuchte für die Eingabemaske mm-Angaben.
Schein mit Lazarus wohl etwas beschwerlicher zu sein. Muss halt noch ein bischen lernen.
Danke für die Mühe.
Gruß.
Die Beispiele sagen mir nichts, komme nicht weiter.
Weitere Kommentare wären von Vorteil gewesen, warum was gemacht wird,
was welche Funktion erledigen.
Ein StringGrid ist mit Delphi mit 3, 4 Schleifen schnell ausgedruckt.
In meinem Falle möchte ich nur z.B. einen Text an die Position 180,150 (mm) ausgeben.
Pixel-Angaben sind nicht erwünscht, bräuchte für die Eingabemaske mm-Angaben.
Schein mit Lazarus wohl etwas beschwerlicher zu sein. Muss halt noch ein bischen lernen.
Danke für die Mühe.
Gruß.
Re: Text ausrucken an absoluten Koordinaten
Das steht doch in dem Link hier ganz übersichtlich: http://www.lazarusforum.de/viewtopic.php?p=55312#p55312derWitte hat geschrieben: In meinem Falle möchte ich nur z.B. einen Text an die Position 180,150 (mm) ausgeben.
Pixel-Angaben sind nicht erwünscht, bräuchte für die Eingabemaske mm-Angaben.
.
Printer.XDPI ist die horizontale Auflösung des Druckers (Dots per Inch). Du musst also Inch <> Zentimeter umrechnen, dann weisst du wie viele Pixel (Dots) einen Zentimeter ergeben.
Ist im Bsp. alles ersichtlich. Es erzeugt den angehängten Ausdruck..
S.a. Printer.PaperSize.PaperRect.WorkRect; etc.
- Dateianhänge
-
theo.pdf
- (2.66 KiB) 101-mal heruntergeladen
-
- Beiträge: 5
- Registriert: Di 15. Sep 2015, 13:23
- OS, Lazarus, FPC: W10, FPC 2.6.4
- CPU-Target: 64Bit
Re: Text ausrucken an absoluten Koordinaten
Danke theo!
Geht ja genau so schnell wie in Delphi, wenn man's weiß.
Nur die Code-Zeilen für Printer.Canvas.TextOut(x,y) sind länger geworden wie aus meiner Beispiel-Listing ersichtlich ist.
Mehr Schreibarbeit.
Es hat alles geklappt.
Danke
Gruß
derWitte
Geht ja genau so schnell wie in Delphi, wenn man's weiß.
Nur die Code-Zeilen für Printer.Canvas.TextOut(x,y) sind länger geworden wie aus meiner Beispiel-Listing ersichtlich ist.
Mehr Schreibarbeit.
Code: Alles auswählen
procedure TForm1.DruckenClick(Sender: TObject);
begin
if PrintDialog1.Execute then
begin
Printer.Title := Form1.Caption;
Printer.Orientation := TPrinterOrientation(poPortrait);
Printer.BeginDoc;
Printer.Canvas.MoveTo(1,1);
SetMapMode(Printer.Canvas.Handle,MM_lometric);
try
with Printer.Canvas do
begin
Font.Name := 'Arial';
Font.Height := 31;
TextOut(740,-180,Edit1.Text); // Name
TextOut(740,-250,Edit2.Text); // Vorname
TextOut(740,-310,Edit3.Text); // Wohnort
if DateTimePicker2.Checked = true then
TextOut(740,-380,(''))
else
TextOut(740,-380,DateToStr(DatetimePicker2.Date)); // Datum
Danke
Gruß
derWitte