![]() |
Stringrid mit Gitternetzlineien drucken
Hallo,
möchte die Daten eines Stinggrids ausdrucken - soweit kein Problem, da gibts ja viele Hinweise! Zur verbesserten Darstellung möchte ich aber mindestens unter jeder Zeile ein Trenlinie, idealerweise aber komplette Gitternetzlinien (wie in Excel) mit ausdrucken. Der Code bisher mit "einprogrammierten" Trennlinien, aber auch mit Problemen beim Ausdruck von mehreren Seiten:
Delphi-Quellcode:
Vielen Dank und Gruß,
//StringGrid Inhalt ausdrucken
procedure PrintStringGrid(Grid: 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 := 200; FooterSize := 150; 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 Grid.RowCount mod Zeilen <> 0 then AnzSeiten := Grid.RowCount div Zeilen + 1 else AnzSeiten := Grid.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.Font.Height := FontHeight; Printer.Canvas.TextOut(0,-100, 'Abfahrtsdatum: '+datetostr(form1.datetimepicker3.date)+' - Zugnummer: '+form1.combobox1.Text+' - von Bhf: '+vonbhf+' - bis Bhf: '+bisbhf+' - Linie: '+linie+' - Produkt: '+produkt); // Spalten-Überschriften: Printer.Canvas.Font.Height := FontHeight-5; XPos := 0; for J := 0 to 20 do begin Printer.Canvas.TextOut(XPos, - 160, Grid.Cells[J, 0]); XPos := XPos + Grid.ColWidths[J] * 2 + 25; end; // Linie unter Überschriften Printer.Canvas.Pen.Width := 5; Printer.Canvas.MoveTo(0, - HeaderSize); Printer.Canvas.LineTo(HorzSize, - HeaderSize); //Fußzeile // Linie über 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 + 140,Footer); //Zeilen drucken Printer.Canvas.Font.Height := FontHeight-5; YPos := HeaderSize + 25; // for I := 1 to Zeilen do if Seite=1 then begin for I := 2 to Zeilen do // 2 und nicht 1 - wegen fester Kopfzeile in Bildschirm-Stringgrid begin if Grid.RowCount >= I + (Seite-1)*Zeilen then begin XPos := 0; for J := 0 to 20 do begin Printer.Canvas.TextOut(XPos, - YPos, Grid.Cells[J, I + (Seite - 1) * Zeilen - 1]); XPos := XPos + Grid.ColWidths[J] * 2 + 25; end; YPos := YPos + ZeilenSize; // Linie nach jedem Datensatz Printer.Canvas.Pen.Width := 2; Printer.Canvas.MoveTo(0, - YPos); Printer.Canvas.LineTo(HorzSize, - YPos); YPos := YPos + ZeilenSize; end; end; end else begin for I := 1 to Zeilen do begin if Grid.RowCount >= I + (Seite-1)*Zeilen then begin XPos := 0; for J := 0 to 20 do begin Printer.Canvas.TextOut(XPos, - YPos, Grid.Cells[J, I + (Seite - 1) * Zeilen - 1]); XPos := XPos + Grid.ColWidths[J] * 2 + 25; end; YPos := YPos + ZeilenSize; // Linie nach jedem Datensatz Printer.Canvas.Pen.Width := 2; Printer.Canvas.MoveTo(0, - YPos); Printer.Canvas.LineTo(HorzSize, - YPos); YPos := YPos + ZeilenSize; end; end; end; //Seite hinzufügen Inc(Seite); if Seite <= AnzSeiten then Printer.NewPage; end; Printer.EndDoc; end; Heinz |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 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