![]() |
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 |
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. |
AW: DBGrid Drucken ?!
Noch besser geht es über ein Reporting-Tool ( FastReport, RAVE, usw. bei Delphi)
|
AW: DBGrid Drucken ?!
Zitat:
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. |
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 |
AW: DBGrid Drucken ?!
Ein Report auf Basis der angezeigten Datensätze im DBGrid würde es auch schon tun ! :wink:
|
AW: DBGrid Drucken ?!
Zitat:
Über die SuFu findest du eine Menge zum Thema ![]() |
AW: DBGrid Drucken ?!
Schon gesehen aber da wir überall nur TStringGrid beschreiben und ich haben ein DBGrid
|
AW: DBGrid Drucken ?!
Zitat:
|
AW: DBGrid Drucken ?!
Ich habe das ding mal auf DBGrid geändert
Code:
und folgende Sachen macht er dann nicht mehr :
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; ColCount ColWidths Cells RowCount |
AW: DBGrid Drucken ?!
in ein StringGrid kann ich keine DataSource laden
|
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 .. ![]() |
AW: DBGrid Drucken ?!
Kann damit leider nichts anfangen !
|
AW: DBGrid Drucken ?!
Code:
So habe das mal ausprobiert ! Druck zwar was aber nicht im richtigen Format
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; |
AW: DBGrid Drucken ?!
Wenn du das etwas genauer spezifizieren könntest "nicht im richtigen Format"?
|
AW: DBGrid Drucken ?!
Liste der Anhänge anzeigen (Anzahl: 1)
|
AW: DBGrid Drucken ?!
Liste der Anhänge anzeigen (Anzahl: 1)
|
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; |
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) ;)
|
AW: DBGrid Drucken ?!
" // >> wobei hier noch verhältnisanpassungen fehlen"
und wie mache ich die ? |
AW: DBGrid Drucken ?!
Zitat:
|
AW: DBGrid Drucken ?!
Na die Verhältnisanpassung
|
AW: DBGrid Drucken ?!
auf Papier aufmalen und überlegen was man wie in Abhängigkeit von was durchmultiplizieren und runden muss...
|
AW: DBGrid Drucken ?!
;-)
|
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 |
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:
:-D
procedure TTest.BtnDruckenClick(Sender: TObject);
begin RvProject1.Execute; end; |
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 22:00 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 by Thomas Breitkreuz