Einzelnen Beitrag anzeigen

HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#3

Re: TRaveReport -> DataField -> Spalte übergeben

  Alt 7. Mai 2009, 13: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
  Mit Zitat antworten Zitat