Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Werkzeuge (https://www.delphipraxis.net/63-sonstige-werkzeuge/)
-   -   RaveReport Event zur Laufzeit erzeugen (https://www.delphipraxis.net/178706-ravereport-event-zur-laufzeit-erzeugen.html)

TUX_der_Pinguin 22. Jan 2014 11:03

RaveReport Event zur Laufzeit erzeugen
 
Hey DPler,

Ich habe einen Report gebastelt in dem ich dynamisch Felder (DataText) hinzufüge.
Diese sollen dynamisch eingefärbt werden, normalerweise realisiere ich das per OnBeforePrint Ereignis im Report Designer.

Ich habe deshalb versucht an der gleichen Stelle wo ich auch das Feld hinzufüge ein Ereignis zu erzeugen und dieses dem Feld zugewiesen.

Jedoch passiert nichts beim Ausführen des Reports.

Delphi-Quellcode:
procedure PrintReport;
var
  Report: TRaveReport;
  Page: TRavePage;   
  DataBandTabData: TRaveDataBand;
  DV_TabData: TRaveDataView;
  Event: TRaveSimpleEvent;

begin
  //Report öffnen & Komponenten ermitteln
  RvProject.ProjectFile := glLocalAppDir+FILE_REPORT_GENERAL;
  RvProject.Open;
  Report := RvProject.ProjMan.FindRaveComponent('MyReport', nil) as TRaveReport;
  Page := RvProject.ProjMan.FindRaveComponent('Page1', Report) as TRavePage;
  DataBandTabData := RvProject.ProjMan.FindRaveComponent('DataBandTabData', Page) as TRaveDataBand;
  DV_TabData  := RvProject.ProjMan.FindRaveComponent('DV_TabData', Page) as TRaveDataView;
  CreateFields(DV_TabData, nil, nil, True);

  //Feld erstellen
  DataText := DataBandTabData.CreateChild(TRaveDataText, 'dt_DynamischerFeldName') as TRaveDataText;
  DataText.DataField := 'DynamischerFeldName';
  DataText.DataView := DV_TabData;

  //Event erzeugen
  Event := TRaveSimpleEvent.Create;
  Event.Name := TableLayout.Tabs[Idx].Key+'OnBeforePrint';
  Event.ModuleOwner := Page;
  Event.Sender := DataText;
  Event.Owner := DataText;
  Event.Body := 'Self.Color := '+IntToStr(clRed)+';';

  //Event zuweisen
  DataText.OnBeforePrint := Event;

  //Report ausführen und schließen
  RvProject.ExecuteReport('MyReport');
  RvProject.Close;

end;
Ich habe leider keine Idee mehr was ich noch versuchen soll ...

TUX_der_Pinguin 23. Jan 2014 08:34

AW: RaveReport Event zur Laufzeit erzeugen
 
Ich habe nun selbst die Lösung gefunden, man muss nur hartnäckig sein und darf nicht aufgeben.

Alles was ich bis dahin gemacht habe war korrekt, was aber gefehlt hat war das die Ereignisse
noch kompiliert werden mussten. Was ich dachte mit TRaveSimpleEvent.Execute zu erreichen, aber
das war es nicht. Richtig wäre "RvProject.ProjMan.Compile" gewesen.

Hier der komplette nun korrekt funktionierende Code...

Delphi-Quellcode:
uses
  RvLDCompiler;


procedure PrintReport;
var
  Report: TRaveReport;
  Page: TRavePage;  
  DataBandTabData: TRaveDataBand;
  DV_TabData: TRaveDataView;
  Event: TRaveSimpleEvent;

begin
  //Report öffnen & Komponenten ermitteln
  RvProject.ProjectFile := glLocalAppDir+FILE_REPORT_GENERAL;
  RvProject.Open;
  Report := RvProject.ProjMan.FindRaveComponent('MyReport', nil) as TRaveReport;
  Page := RvProject.ProjMan.FindRaveComponent('Page1', Report) as TRavePage;
  DataBandTabData := RvProject.ProjMan.FindRaveComponent('DataBandTabData', Page) as TRaveDataBand;
  DV_TabData := RvProject.ProjMan.FindRaveComponent('DV_TabData', Page) as TRaveDataView;
  CreateFields(DV_TabData, nil, nil, True);

  //Feld erstellen
  DataText := DataBandTabData.CreateChild(TRaveDataText, 'dt_DynamischerFeldName') as TRaveDataText;
  DataText.DataField := 'DynamischerFeldName';
  DataText.DataView := DV_TabData;

  //Event erzeugen
  Event := TRaveSimpleEvent.Create;
  Event.Name := TableLayout.Tabs[Idx].Key+'OnBeforePrint';
  Event.ModuleOwner := Page;
  Event.Sender := DataText;
  Event.Owner := DataText;
  Event.Body := 'Self.Color := '+IntToStr(clRed)+';';

  //Event zuweisen
  DataText.OnBeforePrint := Event;

  //Event kompilieren
  RvProject.ProjMan.Compile;

  //Report ausführen und schließen
  RvProject.ExecuteReport('MyReport');
  RvProject.Close;

end;


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