Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi DBGrid Drucken ?! (https://www.delphipraxis.net/171389-dbgrid-drucken.html)

Davidlocke13 5. Nov 2012 09:39

DBGrid Drucken ?!
 
Hallo

Ein DBGrid kann ich nicht so ohne weiteres druckten, so weit ich weis!
Also würde ich gerne wissen wie man den Inhalt der Tabelle, die hinter dem dbGrid steckt druckt ?

Gruß David

Sir Rufo 5. Nov 2012 09:46

AW: DBGrid Drucken ?!
 
Streng genommen kann man ein DBGrid schon eher drucken als die zugrunde liegende Tabelle,
denn beim DBGrid ist die Interpretation der Daten aus der Tabelle für die Anzeige schon erfolgt.

Somit kann man jetzt das DBGrid Reihe für Reihe, Spalte für Spalte nehmen und auf einen PrinterCanvas übertragen.

mkinzler 5. Nov 2012 09:57

AW: DBGrid Drucken ?!
 
Noch besser geht es über ein Reporting-Tool ( FastReport, RAVE, usw. bei Delphi)

Sir Rufo 5. Nov 2012 10:21

AW: DBGrid Drucken ?!
 
Zitat:

Zitat von mkinzler (Beitrag 1189773)
Noch besser geht es über ein Reporting-Tool ( FastReport, RAVE, usw. bei Delphi)

Das würde ich nicht unbedingt so sehen, denn hier wird ja danach gefragt ein DBGrid zu drucken (eine Interpretation der Daten).
Ein Report ist eine eigene und unabhängige Interpretation der Daten (die völlig anders sein kann).

Es hängt einfach davon ab, ob dem Anwender nun genau der Inhalt vom Grid (quasi wie ein Screenshot) ausgegeben werden soll oder eben ein entsprechender Report auf Basis der angezeigten Datensätze im DBGrid.

himitsu 5. Nov 2012 10:33

AW: DBGrid Drucken ?!
 
z.B. DevExpress hat eine Printing-Engine, der man auch VCL-Controls (vorwiegend Grids) direkt zum Drucken geben kann.
Man kann das Ganze theoretisch auch wie ein normales Reporting-Tool nutzen.
Das Control wird dabei auch soweit vergrößert, daß alle Daten sichtbar sind und das Ding paßt bei Seitenwechseln auf, daß keine Spalten zerteilt werden usw.

Hat eigentlich den Vorteil, daß dann die ausgedruckte Tabelle genauso aufgebaut ist, wie das Grid, also Spaltenbreiten, Gruppierungen, Sortierungen, Header, Footer ... alles eigentlich

Davidlocke13 5. Nov 2012 10:48

AW: DBGrid Drucken ?!
 
Ein Report auf Basis der angezeigten Datensätze im DBGrid würde es auch schon tun ! :wink:

Sir Rufo 5. Nov 2012 11:08

AW: DBGrid Drucken ?!
 
Zitat:

Zitat von Davidlocke13 (Beitrag 1189785)
Ein Report auf Basis der angezeigten Datensätze im DBGrid würde es auch schon tun ! :wink:

Ist ja auch mehr Aufwand, daher tut das auch "schon"

Über die SuFu findest du eine Menge zum Thema Bei Google suchendelphi grid drucken

Davidlocke13 5. Nov 2012 11:13

AW: DBGrid Drucken ?!
 
Schon gesehen aber da wir überall nur TStringGrid beschreiben und ich haben ein DBGrid

Sir Rufo 5. Nov 2012 11:23

AW: DBGrid Drucken ?!
 
Zitat:

Zitat von Davidlocke13 (Beitrag 1189788)
Schon gesehen aber da wir überall nur TStringGrid beschreiben und ich haben ein DBGrid

Ja die sind ja auch sooo unterschiedlich :roll:

Davidlocke13 5. Nov 2012 11:35

AW: DBGrid Drucken ?!
 
Ich habe das ding mal auf DBGrid geändert
Code:
procedure PrintGrid(sGrid: TDBGrid; sTitle: string);
var
  X1, X2: Integer;
  Y1, Y2: Integer;
  TmpI: Integer;
  F: Integer;
  TR: TRect;
begin
  Printer.Title := sTitle;
  Printer.BeginDoc;
  Printer.Canvas.Pen.Color := 0;
  Printer.Canvas.Font.Name := 'Times New Roman';
  Printer.Canvas.Font.Size := 12;
  Printer.Canvas.Font.Style := [fsBold, fsUnderline];
  Printer.Canvas.TextOut(0, 100, Printer.Title);
  for F := 1 to sGrid.ColCount - 1 do
  begin
    X1 := 0;
    for TmpI := 1 to (F - 1) do
      X1 := X1 + 5 * (sGrid.ColWidths[TmpI]);
    Y1 := 300;
    X2 := 0;
    for TmpI := 1 to F do
      X2 := X2 + 5 * (sGrid.ColWidths[TmpI]);
    Y2 := 450;
    TR := Rect(X1, Y1, X2 - 30, Y2);
    Printer.Canvas.Font.Style := [fsBold];
    Printer.Canvas.Font.Size := 7;
    Printer.Canvas.TextRect(TR, X1 + 50, 350, sGrid.Cells[F, 0]);
    Printer.Canvas.Font.Style := [];
    for TmpI := 1 to sGrid.RowCount - 1 do
    begin
      Y1 := 150 * TmpI + 300;
      Y2 := 150 * (TmpI + 1) + 300;
      TR := Rect(X1, Y1, X2 - 30, Y2);
      Printer.Canvas.TextRect(TR, X1 + 50, Y1 + 50, sGrid.Cells[F, TmpI]);
    end;
  end;
  Printer.EndDoc;
end;

procedure TForm1.BtnDruckenClick(Sender: TObject);
begin
PrintGrid(DBGrid1, 'Print Stringgrid');
end;
und folgende Sachen macht er dann nicht mehr :

ColCount
ColWidths
Cells
RowCount


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:55 Uhr.
Seite 1 von 3  1 23      

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