Drucken unter Linux klappt aber nicht in Windows

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
hbanko
Beiträge: 13
Registriert: Do 2. Mai 2013, 09:06

Drucken unter Linux klappt aber nicht in Windows

Beitrag von hbanko »

Hi,

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;
Aufgerufen wird das Ganze dann so aus einer anderen Prozedur:

Code: Alles auswählen

 
      If PrintDialog1.Execute then
          Druck(Edit1.Text ,words,payee, FormatDateTime('DD MM YY',ThisMoment));   
 
Ueberstzen unter Windows tue ich es mit Lazarus 1.0.8. Unter Linux setze ich die neueste CVS Version ein.

Gruss
Holger

hbanko
Beiträge: 13
Registriert: Do 2. Mai 2013, 09:06

Re: Drucken unter Linux klappt aber nicht in Windows

Beitrag von hbanko »

Ich konnte den Fehler etwas eingrenzen. Wenn ich "PrintDialog1.Execute" nicht aufrufe sondern einfach drucke, dann wird auf den Standard Drucker gedruckt.

Muss ich vielleicht den via PrintDialog1.Execute ausgewaehlten Drucker an meine Prozedur irgendwie uebergeben?

Gruss
Holger

MmVisual
Beiträge: 1581
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: Drucken unter Linux klappt aber nicht in Windows

Beitrag von MmVisual »

Mein Code sieht ähnlich aus, der druckt unter Win mit PrinterDlg.Execute. Lazarus ist die aktuelle SVN Version.
EleLa - Elektronik Lagerverwaltung - www.elela.de

hbanko
Beiträge: 13
Registriert: Do 2. Mai 2013, 09:06

Re: Drucken unter Linux klappt aber nicht in Windows

Beitrag von hbanko »

Tja, das Raetsel ist geloest!

Ich Depp habe die Eigenschaft "PrintToFile" im PrintDialog1 auf "True" gesetzt. Unter Linux ist das offenbar egal, unter Windows wird tatsaechlich in eine Datei exportiert :lol:

Gruss
Holger

Antworten