Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Rave einzelne Seiten drucken (https://www.delphipraxis.net/114886-rave-einzelne-seiten-drucken.html)

okoeller 2. Jun 2008 13:15


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

soulies 2. Jun 2008 14:04

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:
 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(...);
Druckt Seite 1,3,5 - ich denke so gehts ...

cya

okoeller 2. Jun 2008 15:41

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:
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;
Oliver

merlin17 2. Jun 2008 17:38

Re: Rave einzelne Seiten drucken
 
Oliver,

aus meinem Rave-Buch (dass evtl. noch im Juni, endlich :oops: , fertig wird)....
Delphi-Quellcode:
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;
in dem Beispiel habe ich den Ausdruck dargestellt, analog geht es auch mit PDF-Rendern, of course <g>


:-) thomas, TeamNevrona

okoeller 3. Jun 2008 11:59

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:
  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;
Oliver

okoeller 4. Jun 2008 09:25

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

Andreas Schilling 4. Jun 2008 10:18

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:
var Report : TRaveReport;
begin
  Report := RaveProjekt.ProjMan.findravecomponent('NameVomReportImProjektfile', nil) as TRaveReport;

  Report.pagelist......
end;
Ich hoffe das hilft dir weiter.

okoeller 4. Jun 2008 18:35

Re: Rave einzelne Seiten drucken
 
Ich hab es inzwischen wie folgt gelöst:
Vielleicht hilft mein Ansatz ja hier weiter.

Delphi-Quellcode:
uses
  . . .
  RpSystem, RpRave, RpDefine, RpRender, RpRenderCanvas,
  RpRenderPreview, RpBase, RpFiler, RpRenderPDF, RvClass, RvCSStd;
Im constructor :
Delphi-Quellcode:
   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);
Jede weitere Seite wird über Ja- Nein-RadioButtons aktiviert/deaktiviert.
Also das OnClick-Ereignis eines Radiobuttons mit einer Prozedur verbinden die der PageList eine weitere Seite hinzufügt oder löscht.

Delphi-Quellcode:
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;
Via ButtonClick das Anzeigen des Protokolls auslösen und vorher Feldparameter übergeben.

Delphi-Quellcode:
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;
Oliver


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