AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Rave einzelne Seiten drucken

Ein Thema von okoeller · begonnen am 2. Jun 2008 · letzter Beitrag vom 4. Jun 2008
Antwort Antwort
okoeller

Registriert seit: 21. Nov 2006
66 Beiträge
 
Turbo Delphi für Win32
 
#1

Rave einzelne Seiten drucken

  Alt 2. Jun 2008, 14:15
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
  Mit Zitat antworten Zitat
soulies

Registriert seit: 9. Dez 2005
234 Beiträge
 
#2

Re: Rave einzelne Seiten drucken

  Alt 2. Jun 2008, 15:04
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
  Mit Zitat antworten Zitat
okoeller

Registriert seit: 21. Nov 2006
66 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Rave einzelne Seiten drucken

  Alt 2. Jun 2008, 16:41
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
  Mit Zitat antworten Zitat
merlin17

Registriert seit: 15. Dez 2002
Ort: Mittelfranken
980 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

Re: Rave einzelne Seiten drucken

  Alt 2. Jun 2008, 18:38
Oliver,

aus meinem Rave-Buch (dass evtl. noch im Juni, endlich , 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
- TeamNevrona cannot respond to questions received via email -
http://rave-notes.blogspot.com
  Mit Zitat antworten Zitat
okoeller

Registriert seit: 21. Nov 2006
66 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Rave einzelne Seiten drucken

  Alt 3. Jun 2008, 12:59
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
  Mit Zitat antworten Zitat
okoeller

Registriert seit: 21. Nov 2006
66 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Rave einzelne Seiten drucken

  Alt 4. Jun 2008, 10:25
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
  Mit Zitat antworten Zitat
Andreas Schilling

Registriert seit: 6. Sep 2006
106 Beiträge
 
Delphi 10.3 Rio
 
#7

Re: Rave einzelne Seiten drucken

  Alt 4. Jun 2008, 11:18
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.
  Mit Zitat antworten Zitat
okoeller

Registriert seit: 21. Nov 2006
66 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Rave einzelne Seiten drucken

  Alt 4. Jun 2008, 19:35
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:31 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