AGB  ·  Datenschutz  ·  Impressum  







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

Stringgrid drucken

Ein Thema von s4sh81 · begonnen am 22. Mai 2019 · letzter Beitrag vom 22. Jun 2019
Antwort Antwort
hoika

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

AW: Stringgrid drucken

  Alt 22. Mai 2019, 20:27
Hallo,
mein Compiler sagt
PrintStringGrid not found

Wenn ich das richtig erkenne, erfolgt der Ausdruck in PrintStringGrid, oder irre ich mich?

Warum versteckst du dann genau diesen Code vor uns ...
Heiko

Geändert von hoika (22. Mai 2019 um 20:30 Uhr)
  Mit Zitat antworten Zitat
s4sh81

Registriert seit: 11. Sep 2008
11 Beiträge
 
#2

AW: Stringgrid drucken

  Alt 24. Mai 2019, 20:30
Hallo,
mein Compiler sagt
PrintStringGrid not found

Wenn ich das richtig erkenne, erfolgt der Ausdruck in PrintStringGrid, oder irre ich mich?

Warum versteckst du dann genau diesen Code vor uns ...
So, hier der Code aus dem PrintStringgrid.

Delphi-Quellcode:
  //vertikale linien zeichnen

   Printer.Canvas.Pen.Width := 1;
   printer.Canvas.MoveTo(380, -headersize);
   printer.Canvas.LineTo(380, - VertSize + FooterSize);

   Printer.Canvas.Pen.Width := 1;
   printer.Canvas.MoveTo(1750, -headersize);
   printer.Canvas.LineTo(1750, - VertSize + FooterSize);

   Printer.Canvas.Pen.Width := 1;
   printer.Canvas.MoveTo(1890, -headersize);
   printer.Canvas.LineTo(1890, - VertSize + FooterSize);

    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+200, - 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;
  Mit Zitat antworten Zitat
hoika

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

AW: Stringgrid drucken

  Alt 24. Mai 2019, 23:11
Hallo,
TextOut kennt keine Umbrüche, da müsste man schon DrawText bemühen.

Das ganze ist aber überhaupt nicht trivial.
Besser eine fertige Bibliothek benutzen (z.B., QuickPDF, ist aber Löhnware).
Heiko
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
3.034 Beiträge
 
Delphi 12 Athens
 
#4

AW: Stringgrid drucken

  Alt 26. Mai 2019, 08:44
Delphi kommt doch mit einer Lite Version fon FastReports. Die hab' ich vor einer Weile mal
in 2 Projekten benutzt und die Einarbeitung ist eigentlich nicht so schwer.

Es gibt ein PDF Handbuch dazu, das einen vernünftigen Eindruck macht um mal die
Grundlagen zu erklären, und mann muss die Daten auch nicht zwingend aus einem Dataset
bereit stelle. Außerdem kann man so einen report dann auch gleich als PDF, RTF oder TIFF
Datei ausgeben wenn man mag und in der neuesten Version auch noch als JPG.
  Mit Zitat antworten Zitat
s4sh81

Registriert seit: 11. Sep 2008
11 Beiträge
 
#5

AW: Stringgrid drucken

  Alt 21. Jun 2019, 19:16
Delphi-Quellcode:
uses
  printers;

//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 Hochformat
  PrintStringGrid(Grid, 'StringGrid Print Portrait', poPortrait);
end;
Dies ist der Quelltext von den Schweizern.

Ich versuche nun in der Prozedur PrintStringGrid
Inhalte aus einer Ini Datei ebenfalls per Printer.Canvas.TextOut zu drucken.
Das laden aus der Ini funktioniert.

Delphi-Quellcode:
  
var
ini: TIniFile;
ABC : string;
begin
  ini:= TIniFile.Create('C:\......\Projekte\.....ini');
  try

    ABC := Ini.ReadString('Projekt', 'Wert', 'Wert');

    Printer.Canvas.TextOut(180, - 60,ABC);
Nur der letzte Befehl scheitert.

Wie kann ich also den String aus der Ini mit dem Stringgrid drucken.
  Mit Zitat antworten Zitat
mlc42

Registriert seit: 9. Feb 2013
135 Beiträge
 
#6

AW: Stringgrid drucken

  Alt 21. Jun 2019, 20:21
-60 ?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

AW: Stringgrid drucken

  Alt 21. Jun 2019, 22:55
Wenn du die gepostete Procedure zum StringGrid nutzen willst, dann muss der Text natürlich in dem StringGrid stehen, denn es wird ja das StringGrid übergeben und keine einzelner Text.

Und willst du einfach nur den Text drucken, ist schon etwas mehr nötig, als dein Einfaches Canvas.TextOut. Sieht man doch in dem Quelltext, was man machen muss, um das Printer Objekt zu initialisieren.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.431 Beiträge
 
Delphi 12 Athens
 
#8

AW: Stringgrid drucken

  Alt 22. Jun 2019, 08:15
Moin...

Dein Vorhaben, bzw. die Ausführung, ist schlecht gewählt.

Meine Meinung:
1. Niemals visuelle Komponenten als Datenspeicher mißbrauchen (StringGrid)
2. Die Daten sollen unabgängig von der Oberfläche gespeichert werden. (StringList, TDataSet etc.)
3. Wie schon genannt. Ein Reportgenerator (FastReport bei Delphi kostenlos dabei) hilft dir bei der Ausgabe. Im Designer plazierst du einfach
deine Daten. Vorraussetzung: Daten nicht in Visuellen Komponenten.
  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 16: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