![]() |
Rave einzelne Seiten drucken
Hallo,
mein RaveReport hat 6 Seiten. Nun möchte ich mal die Seiten 1,2,5 ein anderes mal die Seiten 1,3,4 ausdrucken. Es werden für den Ausdruck also nicht immer alle Seiten gebraucht. Die Auswahl der Seiten die gedruckt werden sollen, wird über CheckBoxen gesteuert. Wie kann ich nun meinen Report zusammenstellen? Hilft mir da vielleicht die property PageList und wenn ja, wie kann ich sie ansteuern? Oliver |
Re: Rave einzelne Seiten drucken
hoi,
kannst du nicht die einzelnen Seiten in deinem RvSystem einstellen ? ich meine du müsstest jede einzelne Seite auch einzeln aufrufen.
Delphi-Quellcode:
Druckt Seite 1,3,5 - ich denke so gehts ...
RvSystem.SystemPrinter.FirstPage=1;
RvSystem.SystemPrinter.LastPage=1; RvProject.ExecuteReport(...); RvSystem.SystemPrinter.FirstPage=3; RvSystem.SystemPrinter.LastPage=3; RvProject.ExecuteReport(...); RvSystem.SystemPrinter.FirstPage=5; RvSystem.SystemPrinter.LastPage=5; RvProject.ExecuteReport(...); cya |
Re: Rave einzelne Seiten drucken
Hallo,
gibt es hier noch andere Vorschläge. Ich möchte den Execute nur einmal am Ende ausführen, da die Möglichkeit bestehen soll die Seiten in >einer< PDF auszugeben. So sieht mein Code bisher aus (3 Report-Seiten).
Delphi-Quellcode:
Oliver
constructor TfrmRisikoanalyse.Erzeugen(FDaten: TFormulardaten; Owner: TWinControl);
begin inherited Create(nil); Parent := Owner; FD := TFormulardaten.Erzeugen; FD := FDaten; FReport := TRvProject.Create(self); FNDRWriter := TRvNDRWriter.Create(self); FPreview := TRvRenderPreview.Create(self); FRenderPDF := TRvRenderPDF.Create(self); FReportStream := TMemoryStream.Create; Init; end; procedure TfrmRisikoanalyse.ProtokollErzeugen(Vorschau: boolean); var ProtokollArt: string; begin FReport.ProjectFile := TFormularwesenRes.Instance.PluginFilePath + 'Risikoanalyse.rav'; FReport.Open; ProtokollArt := FD.Produkt; (* Angeben auf welcher Seite die Componente liegt*) FPage := FReport.ProjMan.FindRaveComponent('Risikoanalyse.S1', nil) as TRavePage; (* Die Bild-Komponente ansprechen*) FLogo := FReport.ProjMan.FindRaveComponent('Logo', FPage) as TRaveBitmap; (* Der Componente einen Pfad zuweisen*) FLogo.FileLink := TFormularwesenRes.Instance.PluginFilePath + 'Logo_150.bmp'; FPage := FReport.ProjMan.FindRaveComponent('Risikoanalyse.S2', nil) as TRavePage; FLogo := FReport.ProjMan.FindRaveComponent('Logo2', FPage) as TRaveBitmap; FLogo.FileLink := TFormularwesenRes.Instance.PluginFilePath + 'Logo_150.bmp'; FPage := FReport.ProjMan.FindRaveComponent('Risikoanalyse.S3', nil) as TRavePage; FLogo := FReport.ProjMan.FindRaveComponent('Logo3', FPage) as TRaveBitmap; FLogo.FileLink := TFormularwesenRes.Instance.PluginFilePath + 'Logo_150.bmp'; FReport.SetParam('ProtokollArt', ProtokollArt); (* Hier jetzt die entsprechenden Seiten auswählen bzw. die nicht gewollten Seiten unten nicht erzeugen lassen. Die DataText-Elemente über SetParam-Anweisungen füllen. *) if Vorschau then begin (* zeigt in der Framekomponente eine Vorschau an *) FReport.Engine := FNDRWriter; FNDRWriter.StreamMode := smUser; FReportStream := TMemoryStream.Create; FNDRWriter.Stream := FReportStream; FPreview.NDRStream := FReportStream; FReport.Execute; FPreview.ScrollBox := ScrollBox1; FPreview.Render; FPreview.ZoomFactor := FPreview.ZoomPageWidthFactor; end else begin (* zeigt den Druckdialog direkt an mit der Möglchkeit die Datei als PDF ausgeben zu können*) FReport.Engine := nil; FReport.Execute; end; end; |
Re: Rave einzelne Seiten drucken
Oliver,
aus meinem Rave-Buch (dass evtl. noch im Juni, endlich :oops: , fertig wird)....
Delphi-Quellcode:
in dem Beispiel habe ich den Ausdruck dargestellt, analog geht es auch mit PDF-Rendern, of course <g>
procedure TFExport.DruckReportDetails;
var OldEngine: TRpComponent; ReportStream: TMemoryStream; RvNDRWriter1: TRvNDRWriter; RvRenderPrinter2: TRvRenderPrinter; begin ReportStream := TMemoryStream.Create; RvRenderPrinter1 := TRvRenderPrinter.Create(nil); RvNDRWriter1 := TRvNDRWriter.Create(nil); with RvNDRWriter1 do begin StreamMode := smUser; Stream := ReportStream; end; OldEngine := RM.RavePro.Engine; RvNdrWriter1.Title := 'TITEL_WINDOWS_DRUCKMANAGER'; RM.RavePro.Engine := RvNDRWriter1; RM.RavePro.ExecuteReport('RepVerschiedeneSeiten'); RvRenderPrinter1.NDRStream := ReportStream; RvRenderPrinter1.RenderPage(1); RvRenderPrinter1.RenderPage(4); RvRenderPrinter1.RenderPage(2); RvRenderPrinter1.RenderPage(2); RvRenderPrinter1.RenderPage(4); RvRenderPrinter1.RenderPage(3); RM.RavePro.Engine := OldEngine; RvRenderPrinter1.Free; RvNDRWriter1.Free; ReportStream.Free; OldEngine.Free; end; :-) thomas, TeamNevrona |
Re: Rave einzelne Seiten drucken
Hallo Thomas,
danke für Deine Antwort. Hab mal versucht mit RenderPage zu arbeiten, leider zeigt mein Preview trotzdem alle drei Seiten an, anstatt Seite 1 und Seite 3.
Delphi-Quellcode:
Oliver
if Vorschau then
begin (* zeigt in der Framekomponente eine Vorschau an *) FReport.Engine := FNDRWriter; FNDRWriter.StreamMode := smUser; FReportStream := TMemoryStream.Create; FNDRWriter.Stream := FReportStream; FPreview.NDRStream := FReportStream; FReport.ExecuteReport('Risikoanalyse'); FPreview.ScrollBox := ScrollBox1; // FPreview.Render; FPreview.RenderPage(1); FPreview.RenderPage(3); FPreview.ZoomFactor := FPreview.ZoomPageWidthFactor; end else begin FReport.Engine := nil; FReport.Execute; end; |
Re: Rave einzelne Seiten drucken
Hallo,
im RaveReport Designer kann ich die Property PageList setzten und angeben welche Seiten ausgegeben werden sollen. Der Eintrag "S1 S2" im PageListEditor generiert mir dann die Reportseiten 1 und 3. Welche Klasse muss ich denn einbinden damit ich auf die Property PageList zur Laufzeit zugreifen kann. Die Rave.chm sagt mir das die Property PageList in der Component/Class: Report enthalten ist. Wenn ich die in den Uses einbinde wird mir angezeigt das Delphi die Klasse nicht kennt. Mit anschliessendem Refactoring/Unit suchen werden mir mehrere hundert Ergebnisse angezeigt aus denen ich nicht schlau werde. Ich verwende RaveReport 6.5 BE. In meinem Delphi Bibliothekspfad und im Suchpfad ist "...\RAD Studio\5.0\RaveReports\Lib" eingetragen. Meine Toolpalette zeigt mir unter Rave: TRvProject TRvSystem TRvNDRWriter TRvCustomconnection TRvDataSetConnection TRvTableConnection TRvQueryConnection TRvRenterPreview TRvRenderPrinter TRvRenderPDF TRvRenderHTML TRvRenderRTF TRvRenderText Oliver |
Re: Rave einzelne Seiten drucken
RVProj muss eingebunden sein. Dann kanst du über eine Variable die vom Typ TRavereport ist auf die Property Pagelist zugreifen.
Delphi-Quellcode:
Ich hoffe das hilft dir weiter.
var Report : TRaveReport;
begin Report := RaveProjekt.ProjMan.findravecomponent('NameVomReportImProjektfile', nil) as TRaveReport; Report.pagelist...... end; |
Re: Rave einzelne Seiten drucken
Ich hab es inzwischen wie folgt gelöst:
Vielleicht hilft mein Ansatz ja hier weiter.
Delphi-Quellcode:
Im constructor :
uses
. . . RpSystem, RpRave, RpDefine, RpRender, RpRenderCanvas, RpRenderPreview, RpBase, RpFiler, RpRenderPDF, RvClass, RvCSStd;
Delphi-Quellcode:
Jede weitere Seite wird über Ja- Nein-RadioButtons aktiviert/deaktiviert.
FReport := TRvProject.Create(self);
FReport.ProjectFile := TFormularwesenRes.Instance.PluginFilePath + 'Risikoanalyse.rav'; FReport.Open; FReport.ProjMan.ActiveReport.PageList.Clear; (* Seiten hinzufügen die immer enthalten sein sollen *) RS1 := FReport.ProjMan.ActiveReport.LoadedPage[0]; RS2 := FReport.ProjMan.ActiveReport.LoadedPage[1]; FReport.ProjMan.ActiveReport.PageList.Add(RS1); FReport.ProjMan.ActiveReport.PageList.Add(RS2); Also das OnClick-Ereignis eines Radiobuttons mit einer Prozedur verbinden die der PageList eine weitere Seite hinzufügt oder löscht.
Delphi-Quellcode:
Via ButtonClick das Anzeigen des Protokolls auslösen und vorher Feldparameter übergeben.
procedure TfrmRisikoanalyse.rbxxxJAClick(Sender: TObject);
begin Aktivierexxx(true); end; procedure TfrmRisikoanalyse.rbxxxNEINClick(Sender: TObject); begin Aktivierexxx(false); end; procedure TfrmRisikoanalyse.Aktivierexxx(value: boolean); begin ... ReportSeiteAktivieren('S2',value); (* S2 ist der Name der Seite im RaveDesigner *) end; procedure TfrmRisikoanalyse.ReportSeiteAktivieren(Bez:string; const value: boolean); begin FRSeite := FReport.ProjMan.FindRaveComponent('Risikoanalyse.'+Bez, nil) as TRavePage; if value = true then begin FReport.ProjMan.ActiveReport.PageList.Add(FRSeite); end else begin FReport.ProjMan.ActiveReport.PageList.Remove(FRSeite); end; end;
Delphi-Quellcode:
Oliver
procedure TfrmRisikoanalyse.ProtokollErzeugen(Vorschau: boolean);
var ProtokollArt: string; begin (* Parameter zuweisen*) FReport.SetParam('ProtokollArt', ProtokollArt); FReport.SetParam('Teilnehmer', FD.Teilnehmer); . . . if Vorschau then begin (* zeigt in der Framekomponente eine Vorschau an *) FReport.Engine := FNDRWriter; FNDRWriter.StreamMode := smUser; FNDRWriter.Stream := FReportStream; FReport.ExecuteReport('Risikoanalyse'); FPreview.NDRStream := FReportStream; FPreview.ScrollBox := ScrollBox1; FPreview.Render; FPreview.ZoomFactor := FPreview.ZoomPageWidthFactor; end else begin (* Zeigt den Standard Output Options Dialog an *) FReport.Engine := nil; FReport.Execute; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:08 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-2025 by Thomas Breitkreuz