![]() |
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:
Ich habe leider keine Idee mehr was ich noch versuchen soll ...
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; |
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