So ich habe jetzt noch mal ein kleines Tool gebastelt um alles andere von dem eigentlichen Projekt auszuschließen.
Ich habe einen einfachen Report erstellt, eine Region mit einem Databand auf den wird dann zur Laufzeit ein DataText Objekt plaziert.
Und mit Hilfe eines Ereignis welches ebenfalls zur Laufzeit erstellt wird soll der Text eingefärbt werden.
Durch den Klick auf den Button wird der Report aufgerufen und als PDF Datei exportiert und anschließend wird das PDF geöffnet.
Und wieder kann ich dieses nur einmal machen, beim zweiten Versuch erhalte ich eine Fehlermeldung dies mal ist es jedoch "General Compiler Error".
Das liegt aber wohl nur daran das ich Integer an den Report übergebe und keine Strings mehr, bei Strings würde ich wieder die
ursprüngliche Fehlermeldung "Error #40 Boolean expression expected" erhalten.
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var
Report: TRaveReport;
Page: TRavePage;
DataBand: TRaveDataBand;
DataView: TRaveDataView;
DataText: TRaveDataText;
Event: TRaveSimpleEvent;
begin
//Rave für PDF Export vorbereiten...
RvSystem.DefaultDest := rdFile;
RvSystem.DoNativeOutput := False;
RvSystem.RenderObject := RvRenderPDF;
RvSystem.OutputFileName := '.\test.pdf';
RvSystem.SystemSetups := RvSystem.SystemSetups - [ssAllowSetup];
RvSystem.SystemOptions := RvSystem.SystemOptions - [soShowStatus];
//Report öffnen
RvProject.ProjectFile := '.\test.rav';
RvProject.Open;
//Komponenten ermitteln
Report := RvProject.ProjMan.FindRaveComponent('Test', nil) as TRaveReport;
Page := RvProject.ProjMan.FindRaveComponent('Page1', Report) as TRavePage;
DataBand := RvProject.ProjMan.FindRaveComponent('DataBand1', Page) as TRaveDataBand;
DataView := RvProject.ProjMan.FindRaveComponent('DataView1', Page) as TRaveDataView;
CreateFields(DataView, nil, nil, True);
//Feld erstellen
DataText := DataBand.CreateChild(TRaveDataText, 'dtData') as TRaveDataText;
DataText.DataField := 'DataFeld';
DataText.DataView := DataView;
DataText.Top := 0;
DataText.Left := 0 / RvProject.ProjMan.UnitsFactor;
DataText.Width := 15 / RvProject.ProjMan.UnitsFactor;
//Ereignis erstellen
Event := TRaveSimpleEvent.Create;
Event.Name := 'DataFeldOnBeforePrint';
Event.ModuleOwner := Page;
Event.Sender := DataText;
Event.Owner := DataText;
Event.Body := 'if DataView1Color.AsInteger <> '+IntToStr(clBlack)+' then'+
' Self.Color := DataView1Color.AsInteger;'+
'end;';
DataText.OnBeforePrint := Event;
//Events kompilieren..
RvProject.ProjMan.Compile;
//Report ausführen...
RvProject.ExecuteReport('Test');
//Report schließen...
RvProject.Close;
ShellExecute(Application.Handle, 'open', PWideChar('.\test.pdf'), nil, nil, SW_NORMAL);
end;
Der Quellcode, kompilierte Exe und die Report Datei habe ich angehängt.