![]() |
Delphi-Version: 10.4 Sydney
Drucken, Stringgrid, Bitmap einfügen
Hallo an das Forum,
Delphi-Quellcode:
ich benutze diesen Code um ein Stringgrid mehrseitig, falls erforderlich auszudrucken.
//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 := 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 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.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 Grid.RowCount >= I + (Seite - 1) * Zeilen then begin XPos := 0; for J := 0 to Grid.ColCount - 1 do begin Printer.Canvas.TextOut(XPos, - YPos, Grid.Cells[J, I + (Seite - 1) * Zeilen - 1]); XPos := XPos + Grid.ColWidths[J] * 3; end; YPos := YPos + ZeilenSize; end; end; //Seite hinzufügen Inc(Seite); if Seite <= AnzSeiten then Printer.NewPage; end; Printer.EndDoc; end; //Example procedure TForm1.Button1Click(Sender: TObject); begin //Drucken im Querformat PrintStringGrid(Grid, 'StringGrid Print Landscape', poLandscape); //Drucken im Hochformat PrintStringGrid(Grid, 'StringGrid Print Portrait', poPortrait); end; Dies funktioniert soweit ganz gut. Ich möchte nun aber in dem Header ein Logo einfügen und komme hier nicht weiter. Das Logo liegt als BMP vor, sodass ich es eigentlich mit
Delphi-Quellcode:
drucken kann.
with Printer do
begin BeginDoc; Canvas.Draw(125,125,BitMap); EndDoc; Leider wird es als PDF Datei nicht angezeigt. Der Rest des Codes wird übernommen. Meine Frage ist daher, wie ich dies nun einfüge. Würde mich über einen Lösungsvoschlag sehr freuen. Gruss S4SH |
AW: Drucken, Stringgrid, Bitmap einfügen
Hallo,
Zitat:
PS: Nach dem Code hier sollte es eigentlich klappen ![]() |
AW: Drucken, Stringgrid, Bitmap einfügen
Hallo Hoika,
zu Testzwecken drucke ich über den Windows 10 PDF Drucker. Hier sehe ich aber keine Probleme. Den von Dir verlinkten Code nutze ich bereits. Über eine normalen Button druckt er mir auch das Bitmap. Meine Frage ist allerdings, wo ich diesen in die PrintStringgrid Prozedur einfügen muss, dass es auch gedruckt wird. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:14 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