AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Drucken, Stringgrid, Bitmap einfügen

Ein Thema von S4SH1981 · begonnen am 17. Sep 2020 · letzter Beitrag vom 17. Sep 2020
Antwort Antwort
S4SH1981

Registriert seit: 13. Jul 2007
59 Beiträge
 
#1

Drucken, Stringgrid, Bitmap einfügen

  Alt 17. Sep 2020, 16:45
Delphi-Version: 10.4 Sydney
Hallo an das Forum,

Delphi-Quellcode:
//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;
ich benutze diesen Code um ein Stringgrid mehrseitig, falls erforderlich auszudrucken.
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:
  with Printer do
  begin
    BeginDoc;
    Canvas.Draw(125,125,BitMap);
    EndDoc;
drucken kann.

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
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Drucken, Stringgrid, Bitmap einfügen

  Alt 17. Sep 2020, 17:00
Hallo,
Zitat:
Leider wird es als PDF Datei nicht angezeigt.
Du druckst auf einen PDF-Drucker?

PS: Nach dem Code hier sollte es eigentlich klappen
http://delphiexamples.com/devices/printbitmap.html
Heiko

Geändert von hoika (17. Sep 2020 um 17:03 Uhr)
  Mit Zitat antworten Zitat
S4SH1981

Registriert seit: 13. Jul 2007
59 Beiträge
 
#3

AW: Drucken, Stringgrid, Bitmap einfügen

  Alt 17. Sep 2020, 17:36
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz