![]() |
Problem bei StringGrid drucken
Wenn ich meine StringGrid mit dem Text, den ich hier im Forum gefunden habe über den Button ausdrucken möchte, sendet er es zwar an den Drucker, der mir aber nach ca. 10 min ein leeres Blatt ausdruckt.
Ein Word-Doc. auszudrucken geht aber --> Drucker funktioniert. Meine Frage ist nun warum die Tabelle nicht zu drucken geht. Ich hoffe mir kann jmd. helfen.
Delphi-Quellcode:
uses
printers; procedure TForm1.Drucken1Click(Sender: TObject); begin if PrintDialog1.Execute then begin Printer.BeginDoc; end; end; //StringGrid-Inhalt ausdrucken procedure PrintStringGrid(tab: TStringGrid; Title: String; Orientation:TPrinterOrientation); var P, I, J, YPos, XPos, HorzSize, VertSize: Integer; AnzSeiten, Seite, Zeilen, HeaderSize, FooterSize, ZeilenSize, FontHeight: Integer; mmx, mmy: Extended; Footer: String; begin //Kopfzeile, Fußzeile, Zeilenabstand, Schriftgröße festlegen HeaderSize := 100; FooterSize := 200; ZeilenSize := 36; FontHeight := 36; //Printer initializieren Printer.Orientation := Orientation; Printer.Title := Title; Printer.BeginDoc; //Druck auf mm einstellen mmx := GetDeviceCaps(Printer.Canvas.Handle, PHYSICALWIDTH) / GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSX) * 25.4; mmy := GetDeviceCaps(Printer.Canvas.Handle, PHYSICALHEIGHT) / GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSY) * 25.4; VertSize := Trunc(mmy)*10; HorzSize := Trunc(mmx)*10; SetMapMode(Printer.Canvas.Handle, MM_LOMETRIC); //Zeilenanzahl festlegen Zeilen := (VertSize - HeaderSize - FooterSize) div ZeilenSize; //Seitenanzahl ermitteln if tab.RowCount mod Zeilen <> 0 then AnzSeiten := tab.RowCount div Zeilen + 1 else AnzSeiten := tab.RowCount div Zeilen; Seite := 1; //Grid drucken for P := 1 to AnzSeiten do begin //Kopfzeile Printer.Canvas.Font.Height := 48; Printer.Canvas.TextOut((HorzSize div 2 - (Printer.Canvas.TextWidth(Title) div 2)), -20, Title); Printer.Canvas.Pen.Width := 5; Printer.Canvas.MoveTo(0, -HeaderSize); Printer.Canvas.LineTo(HorzSize, -HeaderSize); //Fußzeile Printer.Canvas.MoveTo(0, -VertSize+FooterSize); Printer.Canvas.LineTo(HorzSize, -VertSize+FooterSize); Printer.Canvas.Font.Height := 36; Footer := 'Seite: ' + IntToStr(Seite) + ' von ' + IntToStr(AnzSeiten); Printer.Canvas.TextOut((HorzSize div 2 - (Printer.Canvas.TextWidth(Footer) div 2)), -VertSize+150, Footer); //Zeilen drucken Printer.Canvas.Font.Height := FontHeight; YPos := HeaderSize + 10; for I := 1 to Zeilen do begin if tab.RowCount >= I + (Seite - 1) * Zeilen then begin XPos := 0; for J := 0 to tab.ColCount - 1 do begin Printer.Canvas.MoveTo(Xpos, -YPos); Printer.Canvas.LineTo(Xpos+ tab.ColWidths[J] * 3, -YPos); Printer.Canvas.MoveTo(Xpos, -YPos); Printer.Canvas.LineTo(Xpos, -(YPos+ ZeilenSize)); Printer.Canvas.TextOut(XPos, - YPos,tab.Cells[J, I + (Seite - 1) * Zeilen - 1]); XPos := XPos + tab.ColWidths[J] * 3; end; YPos := YPos + ZeilenSize; Printer.Canvas.MoveTo(0, -YPos); Printer.Canvas.LineTo(Xpos, -YPos); end; end; //Seite hinzufügen Inc(Seite); if Seite <= AnzSeiten then Printer.NewPage; end; Printer.EndDoc; end; |
Re: Problem bei StringGrid drucken
Hi,
versuch es mal so.
Delphi-Quellcode:
uses
printers; procedure TForm1.Drucken1Click(Sender: TObject); begin if PrintDialog1.Execute then begin PrintStringGrid(<StringGrid>, <Title>, <Orientation>); end; end; //StringGrid-Inhalt ausdrucken procedure PrintStringGrid(tab: TStringGrid; Title: String; Orientation:TPrinterOrientation); var P, I, J, YPos, XPos, HorzSize, VertSize: Integer; AnzSeiten, Seite, Zeilen, HeaderSize, FooterSize, ZeilenSize, FontHeight: Integer; mmx, mmy: Extended; Footer: String; begin Printer.BeginDoc; //Kopfzeile, Fußzeile, Zeilenabstand, Schriftgröße festlegen HeaderSize := 100; FooterSize := 200; ZeilenSize := 36; FontHeight := 36; //Printer initializieren Printer.Orientation := Orientation; Printer.Title := Title; Printer.BeginDoc; //Druck auf mm einstellen mmx := GetDeviceCaps(Printer.Canvas.Handle, PHYSICALWIDTH) / GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSX) * 25.4; mmy := GetDeviceCaps(Printer.Canvas.Handle, PHYSICALHEIGHT) / GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSY) * 25.4; VertSize := Trunc(mmy)*10; HorzSize := Trunc(mmx)*10; SetMapMode(Printer.Canvas.Handle, MM_LOMETRIC); //Zeilenanzahl festlegen Zeilen := (VertSize - HeaderSize - FooterSize) div ZeilenSize; //Seitenanzahl ermitteln if tab.RowCount mod Zeilen <> 0 then AnzSeiten := tab.RowCount div Zeilen + 1 else AnzSeiten := tab.RowCount div Zeilen; Seite := 1; //Grid drucken for P := 1 to AnzSeiten do begin //Kopfzeile Printer.Canvas.Font.Height := 48; Printer.Canvas.TextOut((HorzSize div 2 - (Printer.Canvas.TextWidth(Title) div 2)), -20, Title); Printer.Canvas.Pen.Width := 5; Printer.Canvas.MoveTo(0, -HeaderSize); Printer.Canvas.LineTo(HorzSize, -HeaderSize); //Fußzeile Printer.Canvas.MoveTo(0, -VertSize+FooterSize); Printer.Canvas.LineTo(HorzSize, -VertSize+FooterSize); Printer.Canvas.Font.Height := 36; Footer := 'Seite: ' + IntToStr(Seite) + ' von ' + IntToStr(AnzSeiten); Printer.Canvas.TextOut((HorzSize div 2 - (Printer.Canvas.TextWidth(Footer) div 2)), -VertSize+150, Footer); //Zeilen drucken Printer.Canvas.Font.Height := FontHeight; YPos := HeaderSize + 10; for I := 1 to Zeilen do begin if tab.RowCount >= I + (Seite - 1) * Zeilen then begin XPos := 0; for J := 0 to tab.ColCount - 1 do begin Printer.Canvas.MoveTo(Xpos, -YPos); Printer.Canvas.LineTo(Xpos+ tab.ColWidths[J] * 3, -YPos); Printer.Canvas.MoveTo(Xpos, -YPos); Printer.Canvas.LineTo(Xpos, -(YPos+ ZeilenSize)); Printer.Canvas.TextOut(XPos, - YPos,tab.Cells[J, I + (Seite - 1) * Zeilen - 1]); XPos := XPos + tab.ColWidths[J] * 3; end; YPos := YPos + ZeilenSize; Printer.Canvas.MoveTo(0, -YPos); Printer.Canvas.LineTo(Xpos, -YPos); end; end; //Seite hinzufügen Inc(Seite); if Seite <= AnzSeiten then Printer.NewPage; end; Printer.EndDoc; end; |
Re: Problem bei StringGrid drucken
Danke erstmal.
Sollte die Zeile so lauten, denn < und > will er nicht? Außerdem ist Title undefiniert, als was soll ich das def. ?
Delphi-Quellcode:
PrintStringGrid(tab, Title, Orientation);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz