| Autor |
Beitrag |
th_ellebracht
Hält's aus hier
Beiträge: 3
|
Verfasst: Mo 30.08.04 21:44
Moin zusammen!
Ich will Daten die in einem Array[31][5] stehen in QR im Detail-Band darstellen, als wenn die Daten aus einer DB-Tabelle kommen. Ich hab da schon rumexperimentiert bis zum Abwinken, so mit DataSet, TTabel, ...
Hab wenig Erfahrung.
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Di 31.08.04 10:22
Hallo!
Die QuickReport Komponente benötigt nicht zwingend eine Datenbank um Berichte zu erzeugen. Wenn du also keine DB im Hintergrund hast bietet die QR Komponente dir die Möglichkeit über ein Ereignis die benötigten Daten zu liefern. Das heißt, wenn die QR Komponente Daten benötigt um den Bericht zu erzeugen ruft diese das Ereignis auf und du kannst dann in diesem Ereignis die Daten übergeben. Leider weiß ich im Moment nicht wie das Ereignis heißt (OnGetData oder so). Schau einfach mal in den Ereignissen nach. Und lass dir auch mal die Hilfeseiten zu den Events anzeigen.
Gruß
Tino
|
|
grayfox
      
Beiträge: 800
win98, winXP
D4 Standard; D6 Personal
|
Verfasst: Di 31.08.04 12:54
hallo th_ellebracht!
zunächst mal willkommen im forum!
ohne dataset verwendest du am einfachsten 'OnNeedData' und 'BeforePrint'
ich poste dir ein beispiel, wie ich ein stringgrid mit hilfe von QuickReport zuu papier bringe...
der aufruf aus dem programm:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.BitBtn1Click(Sender: TObject); var oldWindowState: TWindowState; begin oldWindowState:= WindowState; WindowState:= wsMinimized; try PrintFrm:= TPrintFrm.Create(self); PrintFrm.Init(Grid1); PrintFrm.QuickRep1.Preview; finally if PrintFrm <> nil then PrintFrm.Free; WindowState:= oldWindowState; end; end; |
und der zugehörige report:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84:
| unit PrintDlgFrm;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, QuickRpt, Qrctrls, Grids;
type TPrintFrm = class(TForm) QuickRep1: TQuickRep; PageHeaderBand1: TQRBand; PageFooterBand1: TQRBand; ColumnHeaderBand1: TQRBand; DetailBand1: TQRBand; QRLabel1: TQRLabel; QRLabel2: TQRLabel; QRLabel3: TQRLabel; QRLabel4: TQRLabel; QRLabel5: TQRLabel; QRLabel6: TQRLabel; QRLabel7: TQRLabel; QRLabel8: TQRLabel; QRLabel9: TQRLabel; QRLabel10: TQRLabel; QRSysData1: TQRSysData; procedure QuickRep1BeforePrint(Sender: TCustomQuickRep; var PrintReport: Boolean); procedure QuickRep1NeedData(Sender: TObject; var MoreData: Boolean); procedure FormClose(Sender: TObject; var Action: TCloseAction); private ZeileNr: integer; maxZeilen: integer; maxSeiten: integer; aGrid: TStringGrid; public 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. |
viel spass damit!
mfg, stefan
|
|
th_ellebracht 
Hält's aus hier
Beiträge: 3
|
Verfasst: Di 31.08.04 15:34
Titel: Danke, aber es soll ein Brief sein...
 Hallo Stefan,
Danke für den Tipp,
aber da es ein Brief werden soll, in dem auch andere Daten enthalten sind,
und ich auch noch ein Seitenansicht realisieren will, war ich mit den Funktionen von OR schoon sehr glücklich. Schade war nur, dass aus meinem Lexmark-Drucker nichts raus kommt, hatte zum Glück noch nen alten HP, der geht.
Also, ich müsste die Daten schon so wie aus einer DB-Tabelle, oder so in ein DataSet, TTable, oder wie auch immer haben... glaube ich
 Hallo Timo,
weiß noch nicht so ganz wie QR mit dem Array so klar kommt, denn ich muss die Label(eigentlich Spalten des Table) ja irgentwie aufs Blatt bringen. Ich werden testen und berichten.
Das Event, was Du meinst ist vermutlich das onNeedData-Event.
mfg,
Thomas
|
|
grayfox
      
Beiträge: 800
win98, winXP
D4 Standard; D6 Personal
|
Verfasst: Di 31.08.04 17:20
hallo thomas!
| Zitat: | | Ich will Daten die in einem Array[31][5] stehen in QR im Detail-Band darstellen, als wenn die Daten aus einer DB-Tabelle kommen |
| Zitat: | | Also, ich müsste die Daten schon so wie aus einer DB-Tabelle, oder so in ein DataSet, TTable, oder wie auch immer haben... glaube ich |
| Zitat: | | aber da es ein Brief werden soll, in dem auch andere Daten enthalten sind, |
überleg zuerst mal in ruhe, was du haben willst und in welcher form die daten vorhanden sind, sonst wird das nur ein herumraten und schlussendlich bekommst du ganz etwas anderes, als du dir anfangs vorgestellt hattest.
mfg, stefan
|
|
th_ellebracht 
Hält's aus hier
Beiträge: 3
|
Verfasst: Di 31.08.04 17:25
Titel: Dank danke danke :-)))))
Hallo Stefan,
erst habe ich gar nicht gecheckt, was du von mir willt, aber nach einigem probieren hat super geklappt.
hast du ne ahnung warum mein lexmark-drucken nicht will. hab das was gelesen in nem tutorial über QR, hab aber keine ahnung wie man dieses problem beseitigt.
auf jeden fall herzlichen dank,
thomas
|
|
grayfox
      
Beiträge: 800
win98, winXP
D4 Standard; D6 Personal
|
Verfasst: Di 31.08.04 19:32
hallo tom!
| Zitat: | | erst habe ich gar nicht gecheckt, was du von mir willt |
ich dachte, du wolltest etwas wissen?
auszug aus den frequently asked questions auf der QReport-seite:
| Zitat: |
Q. We have an application, that prints a form developed in QR 2.0i. During development we used a LEXMARK printer an everything worked fine. But our customer have another printer a Kyocera, on that printer the print doesn't work.
A. One thing to look at is how complicated your form is and how much memory is in each printer. QuickReport renders each page to the printer canvas supplied by the printer driver. If the printer resolution is set too high and it doesn't have enough ram to render the entire page, you will get garbled or missing output, depending on the printer and/or driver. One way to verify that this is the problem would be to lower the printer's resolution through it's driver and then try to print the report.
|
vielleicht liegt das problem bei dir auch an auslösung/speicher?
mfg, stefan
|
|
|