ich habe ein seltsames Problem mit meinem kleinen Projekt. Ich entwickle unter Linux und moechte die Applikation natuerlich auch unter Windows laufen lassen. Konnte sie mit Lazarus auch problemlos unter Windows XP uebersetzen und alles schien perfekt.
Nur wenn ich drucken moechte, dann poppt ein "Print to File" Dialog auf, statt es auf dem gewaehltem Drucker auszugeben. Unter Linux laeuft alles wie zu erwarten, die Ausgabe wird auf dem gewaehlten Drucker ausgegeben. Woran koennte das liegen? Hier mal mein Code:
Code: Alles auswählen
procedure TForm1.Druck(amount,words,payee,cdate:string);
var XMM, YMM, breite_c6, hoehe_c6, wrap_pos, grenze_links_px, grenze_rechts_px, grenze_oben_px,grenze_unten_px,pWidth,offset,TopOffset:integer;
words2:string;
begin
// 25.4 mm = 1 inch
XMM := round(Printer.XDPI / 25.4);
YMM := round(Printer.YDPI / 25.4);
pWidth := Printer.PageWidth;
breite_c6 := 87; //mm
hoehe_c6 := 165; //mm (abzgl. nicht bedruckbarer bereich)
// Ausdruck wird zentriert, egal welches format eingestellt ist. (X)
grenze_links_px := Round(pWidth/2)-Round(breite_c6 * XMM/2);
grenze_rechts_px := Round(breite_c6 * XMM)+(Round(pWidth/2)-Round(breite_c6 * XMM/2));
// Dimensionen auf der anderen Achse (Y)
grenze_oben_px := Round(0 * YMM);
grenze_unten_px := Round(hoehe_c6 * YMM);
offset := grenze_links_px;
printer.begindoc;
Printer.Canvas.Pen.Width:=3;
Printer.Canvas.Font.Orientation:=2700; // Rotates text 270 degres
Printer.Canvas.Rectangle(grenze_links_px+5, grenze_oben_px+5,grenze_rechts_px,grenze_unten_px-5);
Printer.Canvas.Font.Size:=12;
Printer.Canvas.Font.Name := 'Arial';
Printer.Canvas.TextOut(GetPixel_X(51)+offset, GetPixel_Y(8),payee); // PAYEE
if Length(words) > 38 then
Begin
wrap_pos := LastDelimiter(' ', LeftStr(words,38));
words2 := Copy(words, wrap_pos, Length(words)-wrap_pos);
words := Copy(words, 1, wrap_pos);
Printer.Canvas.TextOut(GetPixel_X(41)+offset, GetPixel_Y(8),words); // Amount in Words Line #1 max 38 Char
Printer.Canvas.TextOut(GetPixel_X(31)+offset, GetPixel_Y(4),words2); // Amount in Words Line #2
End
else
Printer.Canvas.TextOut(GetPixel_X(41)+offset, GetPixel_Y(8),words); // Amount in Words Line #1 max 38 Char
Printer.Canvas.TextOut(GetPixel_X(41)+offset, GetPixel_Y(115),amount); // Amount in Digits
Printer.Canvas.Font.Size:=22;
Printer.Canvas.Font.Name := 'Courier New';
Printer.Canvas.TextOut(GetPixel_X(59)+offset, GetPixel_Y(120), cdate); // DATE
printer.enddoc;
end;
Code: Alles auswählen
If PrintDialog1.Execute then
Druck(Edit1.Text ,words,payee, FormatDateTime('DD MM YY',ThisMoment));
Gruss
Holger