Hallo zusammen,
ich bin dabei ein kleines Programm zu schreiben, das Scheck Formulare bedruckt. Das Papierformat ist nicht standard (also C6 oder so).
Was ich bereits kenne ist bekannte Formate einzustellen:
Printer.PaperSize.PaperName:='A4';
Aber in meinem Fall muesste ich Breite und Hoehe in Millimeter eingeben koennen.
Wie mache ich das? Oder sollte ich lieber Lazreport zum Drucken benutzen, stat TPrinter?
Gruss
Holger
TPrinter Papierformat einstell
-
- Beiträge: 36
- Registriert: Fr 17. Okt 2008, 19:24
- OS, Lazarus, FPC: Debian X64, Lazarus 1.1, FPC 2.7.1
- CPU-Target: x86, ARM
Re: TPrinter Papierformat einstell
Was willst du mit welchem Compiler-Release, mit welcher Lazarus-Release unter welchem Betriebssystem drucken? Vielleicht lässt sich dir dann ein Tip geben?
Luggi
Luggi
-
- Beiträge: 41
- Registriert: Do 11. Okt 2012, 18:50
- OS, Lazarus, FPC: Win7 (L 1.0.0.2 FPC 2.6.0)
- CPU-Target: 32Bit
- Wohnort: Rügen
- Kontaktdaten:
Re: TPrinter Papierformat einstell
hi!
zuerst berechnest du DPI in milimeter um und dann kannst du in milimeter dein druckbereich definieren:
du bestimmst also dein druckbereich und definierst die grenzen laut C6 Format. welches Papier dann im Drucker liegt ist egal, es wird aus der oberen linken ecke aus berechnet..
lg RugiaArt
zuerst berechnest du DPI in milimeter um und dann kannst du in milimeter dein druckbereich definieren:
Code: Alles auswählen
function getPixel_X(_mm:integer):longint;//gibt die pixel aus mm abhaengig vom drucker X
begin
result := Round(_mm * (round(Printer.XDPI / 25.4)));
end;
function getPixel_Y(_mm:integer):longint;//gibt die pixel aus mm abhaengig vom drucker Y
begin
result := Round(_mm * (round(Printer.YDPI / 25.4)));
end;
procedure Druck();
var XMM, YMM, breite_c6, hoehe_c6:integer;
begin
// 25.4 mm = 1 inch
XMM := round(Printer.XDPI / 25.4);
YMM := round(Printer.YDPI / 25.4);
breite_c6 := 114; //mm
hoehe_c6 := 162; //mm
grenze_links_px := Round(0 * XMM);
grenze_rechts_px := Round(breite_c6_mm * XMM);
grenze_oben_px := Round(0 * YMM);
grenze_unten_px := Round(hoehe_c6 * YMM);
printer.begindoc;
Printer.Canvas.Line(0,0,grenze_rechts_px,0); // zeichnet eine linie zwischen oben links und oben rechts ecke
//usw...
printer.enddoc;
end;
lg RugiaArt
Re: TPrinter Papierformat einstell
Vielen Dank RugiaArt!
Das habe ich direkt mal ausprobiert. So kann ich wunderbar den bedruckbaren Bereich definieren und habe mir ein Rechteck mit den exakten Massen aufs Papier bringen koennen.
Koennte in der Tat die Loesung sein. Nachteil ist, wenn ich ein Formular in den Drucker einlege (z.B. C6 ~ Briefumschlag), dann zentriere ich es am Einzeleinzug des Druckers. Drucke ich jetzt in A4, landed nur ein Bruchteil des Rechtecks auf dem Formular. Wuerde ich das Papierformat wirklich aendern, vermute ich wuerde das klappen.
Die Loesung waere halt, das Rechteck entsprechend zur Mitte zu verschieben (X Zentrierung). Hast du Erfahrungen ob das immer klappen wuerde? Unabhaengig von Drucker und Betriebssystem?
Und zum ersten Reply: Ich arbeite/entwickle unter OpenSuSe 12.2 x86_64 - spaeter soll das aber unter Windows laufen. Lazarus Version 1.1 und FPC 2.6.
In meiner Wahlheimat Malaysia (Kuala Lumpur) wird noch viel mit Schecks gearbeitet. Und es nervt total die Dinger mit der Hand auszufuellen. Ausserdem den Betrag in Worten hinschreiben, gelingt manchmal nicht fehlerfrei. Die Bank weist dann solche Schecks ab und es gibt Aerger. Also das ist mein kleines Projekt - Eine Scheck-Writer Software. Den Betrag in Worten umzuwandeln habe ich schon geloest, ich brauch nur noch Drucken
Das habe ich direkt mal ausprobiert. So kann ich wunderbar den bedruckbaren Bereich definieren und habe mir ein Rechteck mit den exakten Massen aufs Papier bringen koennen.
Koennte in der Tat die Loesung sein. Nachteil ist, wenn ich ein Formular in den Drucker einlege (z.B. C6 ~ Briefumschlag), dann zentriere ich es am Einzeleinzug des Druckers. Drucke ich jetzt in A4, landed nur ein Bruchteil des Rechtecks auf dem Formular. Wuerde ich das Papierformat wirklich aendern, vermute ich wuerde das klappen.
Die Loesung waere halt, das Rechteck entsprechend zur Mitte zu verschieben (X Zentrierung). Hast du Erfahrungen ob das immer klappen wuerde? Unabhaengig von Drucker und Betriebssystem?
Und zum ersten Reply: Ich arbeite/entwickle unter OpenSuSe 12.2 x86_64 - spaeter soll das aber unter Windows laufen. Lazarus Version 1.1 und FPC 2.6.
In meiner Wahlheimat Malaysia (Kuala Lumpur) wird noch viel mit Schecks gearbeitet. Und es nervt total die Dinger mit der Hand auszufuellen. Ausserdem den Betrag in Worten hinschreiben, gelingt manchmal nicht fehlerfrei. Die Bank weist dann solche Schecks ab und es gibt Aerger. Also das ist mein kleines Projekt - Eine Scheck-Writer Software. Den Betrag in Worten umzuwandeln habe ich schon geloest, ich brauch nur noch Drucken

-
- Beiträge: 41
- Registriert: Do 11. Okt 2012, 18:50
- OS, Lazarus, FPC: Win7 (L 1.0.0.2 FPC 2.6.0)
- CPU-Target: 32Bit
- Wohnort: Rügen
- Kontaktdaten:
Re: TPrinter Papierformat einstell
-> also das mit dem TPrinter ist eigentlich bereits Platform und Druckerunabhängighbanko hat geschrieben: Die Loesung waere halt, das Rechteck entsprechend zur Mitte zu verschieben (X Zentrierung). Hast du Erfahrungen ob das immer klappen wuerde? Unabhaengig von Drucker und Betriebssystem?

Die Lösung für die Sache mit dem Zentrieren ist eigentlich einfach.
Es gibt Printer.PageWidth und das gibt immer abhängig vom Drucker die Seitenbreite in Pixel aus,
du rechnest die
(DruckerSeitenBreite / 2 - breite_C6_px) ... so kriegst du dein blatt zentriert, .. weisst wie ich mein?