Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
Delphi XE7 Enterprise
|
Re: TRaveReport -> DataField -> Spalte übergeben
7. Mai 2009, 14:05
Dann gebe ich mir jetzt selber die Lösung
Delphi-Quellcode:
//Procedure für variabeln Rave Report - Erstellung
procedure Rave_Report_Variabel(Ueberschrift: String; Parameter: Array of String; ParaWerte: Array of String; Anzeigen:Boolean; DBGrid:TDBGrid);
var
I, Y, Z, komplette_Breite, Max_Breite: Integer;
Sender: TObject;
MeinReport : TRaveReport;
MeineSeite: TRavePage;
MeineRegion: TRaveRegion;
MeinBand: TRaveBand;
MeinDataBand: TRaveDataBand;
MeinText: TRaveText;
MeineTexte: TRaveText;
MeinDataText: TRaveDataText;
MeinDataText1: TRaveDataText;
MeineDataView: TRaveDataView;
New_save, Datei_Pfad: String;
vorherige_Breite, naechste_Breite, Prozentwert: Double;
begin
DM_Rave_Report.RvDS_Con_AW_Variabel.DataSet := DBGrid.DataSource.DataSet;
vorherige_Breite := 0;
komplette_Breite := 0;
for Z:= 0 to DBGrid.columns.count - 1 do
begin
If DBGrid.Columns[Z].Visible = True then komplette_Breite := komplette_Breite + DBGrid.Columns[Z].Width;
end;
Max_Breite := 1110;
Datei_Pfad := 'AW_Variabel';
if komplette_Breite < 790 then
begin
Datei_Pfad := 'AW_Variabel_hoch';
Max_Breite := 770;
end;
if komplette_Breite > 1130 then
begin
Datei_Pfad := 'AW_Variabel_A3';
Max_Breite := 1590;
end;
DM_Rave_Report.RvSystem.DefaultDest := rdFile;
DM_Rave_Report.RvSystem.DoNativeOutput := false;
DM_Rave_Report.RvSystem.RenderObject := DM_Rave_Report.RvRenderPDF;
DM_Rave_Report.RvSystem.OutputFileName := 'C:PDF_Report\PDF-Dateien\' + Datei_Pfad + '_' + Anwender_ermitteln (FormTerMaS.SB_TerMaS.Panels[1].Text) + '.pdf';
DM_Rave_Report.RvSystem.SystemSetups := DM_Rave_Report.RvSystem.SystemSetups - [ssAllowSetup];
//Projekt zurücksetzen
DM_Rave_Report.RvProject.Close;
DM_Rave_Report.RvProject.ClearParams;
DM_Rave_Report.RvProject.ProjectFile := 'C:\PDF_Report\' + Datei_Pfad + '.rav';
DM_Rave_Report.RvProject.Open;
//Eventuelle Parameter hinzufügen
for I := 0 to length(Parameter) - 1 do
begin
DM_Rave_Report.RvProject.SetParam('' + Parameter[I] + '', ParaWerte[I]);
end;
New_save := '';
//Projekt abändern
With DM_Rave_Report.RvProject.ProjMan do
begin
MeinReport := FindRaveComponent('Report1', nil) as TRaveReport;
MeineSeite := FindRaveComponent('Page1', MeinReport) as TRavePage;
MeineRegion := FindRaveComponent('Region', MeineSeite) as TRaveRegion;
MeinBand := FindRaveComponent('Band', MeineSeite) as TRaveBand;
MeinDataBand := FindRaveComponent('DataBand', MeineSeite) as TRaveDataBand;
MeineDataView := FindRaveComponent('DataView', MeineSeite) as TRaveDataView;
CreateFields(MeineDataView, nil, nil, true);
MeinText := FindRaveComponent('Text_Main', MeineSeite) as TRaveText;
MeinText.Text := Ueberschrift;
for Y := 0 to DBGrid.Columns.count - 1 do
begin
if DBGrid.Columns[Y].Visible = True then
begin
naechste_Breite := vorherige_Breite + RoundTo(DBGrid.Columns[Y].Width / 100, -2);
if naechste_Breite >= RoundTo(Max_Breite / 100, -2) then
begin
Prozentwert := ((RoundTo(Max_Breite / 100, -2) - (0.05 + vorherige_Breite)) / RoundTo(DBGrid.Columns[Y].Width / 100, -2)) * 100;
if Prozentwert < 50 then
begin
Application.MessageBox(PChar('Es können nicht alle Spalten ausgegeben werden.'),'Information',MB_OK or MB_ICONINFORMATION);
break;
end;
end;
MeineTexte := MeinBand.CreateChild(TRaveText, 'Text_' + inttostr(Y)) As TRaveText;
MeineTexte.Text := DBGrid.Columns[Y].Title.Caption;
MeineTexte.Left := 0.05 + vorherige_Breite;
MeineTexte.Top := 0.05;
if RoundTo(Max_Breite / 100,-2) > MeineTexte.Left + RoundTo(DBGrid.Columns[Y].Width / 100, -2) then
MeineTexte.Width := RoundTo(DBGrid.Columns[Y].Width / 100, -2)
else
MeineTexte.Width := RoundTo(Max_Breite / 100, -2) - MeineTexte.Left;
If DBGrid.Columns[Y].Alignment = taLeftJustify then MeineTexte.FontJustify := pjLeft;
If DBGrid.Columns[Y].Alignment = taRightJustify then MeineTexte.FontJustify := pjRight;
If DBGrid.Columns[Y].Alignment = taCenter then MeineTexte.FontJustify := pjCenter;
MeineTexte.Font.Size := 8;
MeineTexte.Font.Name := 'Tahoma';
MeinDataText := MeinDataBand.CreateChild(TRaveDataText, 'DataText_' + inttostr(Y)) As TRaveDataText;
MeinDataText.DataField := DBGrid.Columns[Y].FieldName;
MeinDataText.DataView := MeineDataView;
MeinDataText.Left := 0.05 + vorherige_Breite;
MeinDataText.Top := 0.05;
if RoundTo(Max_Breite / 100,-2) > MeinDataText.Left + RoundTo(DBGrid.Columns[Y].Width / 100, -2) then
MeinDataText.Width := RoundTo(DBGrid.Columns[Y].Width / 100, -2)
else
MeinDataText.Width := RoundTo(Max_Breite / 100, -2) - MeinDataText.Left;
If DBGrid.Columns[Y].Alignment = taLeftJustify then MeinDataText.FontJustify := pjLeft;
If DBGrid.Columns[Y].Alignment = taRightJustify then MeinDataText.FontJustify := pjRight;
If DBGrid.Columns[Y].Alignment = taCenter then MeinDataText.FontJustify := pjCenter;
MeinDataText.Font.Size := 8;
MeinDataText.Font.Name := 'Tahoma';
vorherige_Breite := vorherige_Breite + RoundTo(DBGrid.Columns[Y].Width / 100, -2);
end;
end;
//Zwischenspeichern und nachher wird neu geladen
DM_Rave_Report.RvProject.ProjectFile := 'C:\PDF_Report\' + Datei_Pfad + '_2.rav';
DM_Rave_Report.RvProject.Save;
DM_Rave_Report.RvProject.Open;
New_save := '_2';
end;
//Rave-Datei als PDF speichern
DM_Rave_Report.RvProject.LoadFromFile('C:PDF_Report\' + Datei_Pfad + New_save + '.rav');
DM_Rave_Report.RvProject.ExecuteReport('Report1');
end;
Zur Info: Es wird das übergebene DBGrid daraufhin analysiert, ob die Spalten auf einem Hochformat A4 oder Querformat A4 oder Querformat A3 ausgegeben werden kann. Die rav - Dateien dafür habe ich vorher schon erstellt. Mit dieser Procedure fülle ich nur noch die Spalten.
Gruss
Holger
|
|
Zitat
|