Delphi-PRAXiS

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

Davidlocke13 5. Nov 2012 11:40

AW: DBGrid Drucken ?!
 
in ein StringGrid kann ich keine DataSource laden

Bummi 5. Nov 2012 12:17

AW: DBGrid Drucken ?!
 
Bis auf Cells wäre beim DBgrid alles zugreifbar (entsprechen veröffentlicht).
Trotzdem halte ich den Ansatz über das Gitter gehen zu wollen für weniger geeignet
Vielleicht kannst Du damit was anfangen .. http://stackoverflow.com/questions/7...498676#7498676

Davidlocke13 6. Nov 2012 16:28

AW: DBGrid Drucken ?!
 
Kann damit leider nichts anfangen !

Davidlocke13 7. Nov 2012 10:41

AW: DBGrid Drucken ?!
 
Code:
procedure TForm1.BtnDruckenClick(Sender: TObject);

var rect,rect1: TRect;
begin
   rect:=bounds(0,0,DBGrid1.clientwidth,DBgrid1.Clientheight);
   rect1:=bounds(10,10,Printer.PageHeight,Printer.PageWidth);


if printdialog1.Execute then
begin

printer.begindoc;
printer.canvas.CopyRect(rect1,dbgrid1.Canvas,rect);
printer.enddoc;

end;
end;
So habe das mal ausprobiert ! Druck zwar was aber nicht im richtigen Format

Sir Rufo 7. Nov 2012 10:59

AW: DBGrid Drucken ?!
 
Wenn du das etwas genauer spezifizieren könntest "nicht im richtigen Format"?

Davidlocke13 7. Nov 2012 11:14

AW: DBGrid Drucken ?!
 
Liste der Anhänge anzeigen (Anzahl: 1)
Anhang 38013

So macht der das !

Davidlocke13 7. Nov 2012 11:18

AW: DBGrid Drucken ?!
 
Liste der Anhänge anzeigen (Anzahl: 1)
und das sollte drauf !

Anhang 38014

Bummi 7. Nov 2012 11:22

AW: DBGrid Drucken ?!
 
Copyrect kopiert einfach unskaliert auf das Canvas, was Du suchst dürfte so ähnlich aussehen
Delphi-Quellcode:
procedure TForm1.BtnDruckenClick(Sender: TObject);
var
    rect,rect1: TRect;
    bmp:TBitMap;
begin
   bmp:=TBitMap.Create;
   bmp.Width := DBGrid1.clientwidth;
   bmp.Height := DBGrid1.Clientheight;
   try
   rect:=bounds(0,0,DBGrid1.clientwidth,DBgrid1.Clientheight);
   // >> wobei hier noch verhältnisanpassungen fehlen
   rect1:=bounds(10,10,Printer.PageHeight,Printer.PageWidth);
   bmp.canvas.CopyRect(rect,DBGrid1.Canvas,rect);
      if printdialog1.Execute then
      begin

      printer.begindoc;
      printer.canvas.Canvas.StretchDraw(rect1,bmp);
      printer.enddoc;

      end;
   finally
     bmp.Free;
   end;
end;

Sir Rufo 7. Nov 2012 11:30

AW: DBGrid Drucken ?!
 
@bummi genau, denn ansonsten müsste man um ein Bild vom Mount Everest auszudrucken ein Papier mit 8848m Höhe haben (von der Breite mal ganz zu schweigen) ;)

Davidlocke13 7. Nov 2012 11:31

AW: DBGrid Drucken ?!
 
" // >> wobei hier noch verhältnisanpassungen fehlen"
und wie mache ich die ?

Sir Rufo 7. Nov 2012 11:32

AW: DBGrid Drucken ?!
 
Zitat:

Zitat von Davidlocke13 (Beitrag 1190129)
und wie mache ich die ?

???

Davidlocke13 7. Nov 2012 11:39

AW: DBGrid Drucken ?!
 
Na die Verhältnisanpassung

Bummi 7. Nov 2012 11:42

AW: DBGrid Drucken ?!
 
auf Papier aufmalen und überlegen was man wie in Abhängigkeit von was durchmultiplizieren und runden muss...

Davidlocke13 7. Nov 2012 11:51

AW: DBGrid Drucken ?!
 
;-)

p80286 7. Nov 2012 12:03

AW: DBGrid Drucken ?!
 
[OT]
Hab ich etwas nicht mitbekommen, oder ist das jetzt ein Wettbewerb "wie klatsche ich wem was vor's Bein"?

Zumindestens zwei Dinge hab ich jetzt gelernt
a) Finger weg von TDB...supersonderxtracomponents
b) Wer der englischen Sprache mächtig ist weiß seit #12 wie man die vorhandenen Daten zu Papier bringt.

Jetzt gibt's noch eine Bildschirmkopie gratis dazu [/OT]

Gruß
K-H

Davidlocke13 15. Nov 2012 10:30

AW: DBGrid Drucken ?!
 
So habe das jetzt über Rave gemacht !

Man braucht: RvProject1; RvDataSetConnection1 und einen Button

im RvDataSetConnection1 gibt man das DataSet an !
öffnet dann das RvProject1 geht auf File -> New Data Object und setzt dort das RvDataSetConnection1 !
Dann geht man auf Tool -> Repot Wizards -> Simple Tabel dort wählt man das DataViwe und sagt was man davon haben will !
Dann speichert man das Rave Project ab und sagt dem Button noch das er drucken soll !
Code:
procedure TTest.BtnDruckenClick(Sender: TObject);
begin
RvProject1.Execute;
end;
:-D

DeddyH 15. Nov 2012 13:05

AW: DBGrid Drucken ?!
 
Und damit hätte man den Thread bereits nach #3 abschließen können :roll:


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:12 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