![]() |
StringGrid im QuickReport
Moin,
und ein frohes neues ich beschäftige mich erst seit kurzem mit delphi und stehe da neben den 100 anderen fragen einer besonders gegenüber... kann ich einen stringgrid 1 zu 1 in einem quickreport anzeigen und ausdrucken lassen ? wenn ja....wie ? :gruebel: |
Re: StringGrid im QuickReport
wie es mit qquickreport geht kann ich dir nicht sagen, aber stringgrid drucken in google hat mit 187 vorschläge gebracht und manche sehr gute
|
Re: StringGrid im QuickReport
Hallo Moin34,
du kannst dir qrShape Komponenten nehmen und daraus aus Rechtecken eine Zeile des Stringgrids mit den entsprechenden qrDBText Komponenten aufbauen. Dann wird automatisch ein Grid draus, wenn du den Rahmen direkt an die Unter- und Oberkante des Detailbandes ausrichtest. |
Re: StringGrid im QuickReport
Moin,
mal wieder das ging ja fix.... ich bedank mich ersteinmal für die schnellen antworten... werde es mal ausprobieren. wenn ich dem gleich eine kurze frage hinterherschieben darf... wie sag ich dem "detail" das er für die nächste seite einen neuen detail-bereich machen soll ?? wie gesagt ich beschäftige mich erst seit kurzem mir delphi... danke mal wieder.. Gruss |
Re: StringGrid im QuickReport
Hallo Moin34,
zunächst einmal herzlich willkommen im Delphi-PRAXIS Forum (hatte ich beim vorigen Post vergessen zu erwähnen). Wenn du die Datasource Eigenschaft des Reports auf die darzustellende Datenmenge verweisen lässt, kümmert sich Quickreport selbst darum, dass für jeden datensatz ein Detaiband gedruckt wird. |
Re: StringGrid im QuickReport
Mh,... :gruebel:
ja, :stupid: , nicht das ich nun viel schlauer bin... aber probieren.... thanks for help |
Re: StringGrid im QuickReport
Hallo,
danke auch für deine Hilfe Mr.Spock. Dank des Forums und ein wenig Spielerei bin ich nun schon ein wenig weitergekommen. Was mir aber noch zu schaffen macht, ist das darstellen von mehreren zeilen des stringGrid´s im detailbereich des QuickReportes : Ich Versuche es auf diese Weise : q1.Caption := form1.KStringgrid1.Cells [1,z1]; q2.Caption := form1.KStringgrid1.Cells [2,z1]; q3.Caption := form1.KStringgrid1.Cells [3,z1]; q4.Caption := form1.KStringgrid1.Cells [4,z1]; q5.Caption := form1.KStringgrid1.Cells [5,z1]; q6.Caption := form1.KStringgrid1.Cells [6,z1]; q7.Caption := form1.KStringgrid1.Cells [7,z1]; q1 - q7 sind die Felder im Detailbereiches des Report, die nummern der spalten, z1 die zeile im form1 als variabe. Die 1.Zeile wir dim Report auch dargestellt, bin ich damit etwa auf dem Falschen weg... ? Was man hier im ![]() Vielleicht sollte ich dem noch hinzufügen das ich keine Datasource verwende... |
Re: StringGrid im QuickReport
Hallo Moin34,
kommen die Daten gar nicht aus einer Datenbank? In diesem Fall musst du die OnNeedData Methode schreiben, die immer aufgerufen wird, wenn die nächste Detailzeile gedruckt werden soll. |
Re: StringGrid im QuickReport
hallo moin!
versuch es mal so....
Code:
damit sollte dein stringgrid problemlos ausgedruckt werden
unit Mainprog;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Buttons, StdCtrls, Grids; type TForm1 = class(TForm) EndeBtn: TButton; BitBtn1: TBitBtn; Grid1: TStringGrid; procedure EndeBtnClick(Sender: TObject); procedure BitBtn1Click(Sender: TObject); procedure FormShow(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation uses PrintDlgFrm; {$R *.DFM} procedure TForm1.EndeBtnClick(Sender: TObject); begin close; end; procedure TForm1.BitBtn1Click(Sender: TObject); var aWindowState: TWindowState; begin aWindowState:= WindowState; try PrintFrm:= TPrintFrm.Create(self); PrintFrm.Init(Grid1); PrintFrm.QuickRep1.Preview; finally if PrintFrm <> nil then PrintFrm.Free; WindowState:= aWindowState; end; end; procedure TForm1.FormShow(Sender: TObject); var aRow: ShortInt; begin with Grid1 do begin Colwidths[0]:= 20; Colwidths[1]:= 80; Colwidths[2]:= 80; Colwidths[3]:= 80; Colwidths[4]:= 80; Cells[0,0]:= 'lfdNr'; Cells[1,0]:= 'Art_Sorte'; Cells[2,0]:= 'Art_Gruppe'; Cells[3,0]:= 'Inhalt'; Cells[4,0]:= 'Preis'; for aRow:= 1 to RowCount-1 do begin Cells[0,aRow]:= IntToStr(aRow); Cells[1,aRow]:= 'Artikel ' + IntToStr(10000 + aRow); if (aRow mod 2) = 0 then Cells[2,aRow]:= 'Wein' else Cells[2,aRow]:= 'Sekt'; Cells[3,aRow]:= '0,75 l'; Cells[4,aRow]:= FloatToStr(4.20 + aRow); end; end; end; end. ------------------------------------------------------------------------------------------------ unit PrintDlgFrm; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, QuickRpt, Qrctrls, Grids; type TPrintFrm = class(TForm) QuickRep1: TQuickRep; PageFooterBand1: TQRBand; DetailBand1: TQRBand; PageHeaderBand1: TQRBand; QRLabel1: TQRLabel; QRLabel2: TQRLabel; QRLabel3: TQRLabel; QRLabel4: TQRLabel; QRSysData1: TQRSysData; QRLabel5: TQRLabel; ColumnHeaderBand1: TQRBand; QRLabel6: TQRLabel; QRLabel7: TQRLabel; QRLabel8: TQRLabel; QRLabel9: TQRLabel; QRLabel10: TQRLabel; procedure QuickRep1BeforePrint(Sender: TCustomQuickRep; var PrintReport: Boolean); procedure QuickRep1NeedData(Sender: TObject; var MoreData: Boolean); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private-Deklarationen } ZeileNr: integer; maxZeilen: integer; maxSeiten: integer; aGrid: TStringGrid; public { Public-Deklarationen } procedure Init(DGrid: TStringGrid); end; var PrintFrm: TPrintFrm; implementation {$R *.DFM} procedure TPrintFrm.Init(DGrid: TStringGrid); begin aGrid:= TStringGrid.Create(self); aGrid:= dGrid; maxZeilen:= aGrid.RowCount; QuickRep1.Prepare; maxSeiten:= QuickRep1.PageNumber; qrLabel10.Caption:= ' von ' + IntToStr(maxSeiten) + ' Seiten' end; procedure TPrintFrm.QuickRep1BeforePrint(Sender: TCustomQuickRep; var PrintReport: Boolean); begin ZeileNr:= 0; end; procedure TPrintFrm.QuickRep1NeedData(Sender: TObject; var MoreData: Boolean); begin MoreData:= (ZeileNr < maxZeilen); if MoreData then begin QRLabel2.Caption:= aGrid.Cells[0,ZeileNr+1]; QRLabel3.Caption:= aGrid.Cells[1,ZeileNr+1]; QRLabel4.Caption:= aGrid.Cells[2,ZeileNr+1]; QRLabel5.Caption:= aGrid.Cells[3,ZeileNr+1] end; inc(ZeileNr) end; procedure TPrintFrm.FormClose(Sender: TObject; var Action: TCloseAction); begin if aGrid <> nil then aGrid.Free; end; end. mfg, stefan |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:42 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