Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Folge von Diagrammen in FastReport ? (https://www.delphipraxis.net/147578-folge-von-diagrammen-fastreport.html)

neo4a 15. Feb 2010 17:56

Re: Folge von Diagrammen in FastReport ?
 
Zitat:

Zitat von EccoBravo
Hallo Andreas,

Dein Vorschlag mit dem Auslagern in ein bmp ist sehr gut, aus meinem Programm funktioniert das auch komplikationsfrei.
Nur wie bekomme ich die Latte von Bmp#s zur Laufzeit ins frxReport ?
Mein Wunsch wäre es, k Bilder auf k Seiten des Reports zu bekommen, je seite ein Bild.

Vielen Dank

EB.

Da gibt es verschiedene Ansätze:

- dateibasierend, wie angedeutet
- direkt auf den Report-Canvas malen
- im onGetValue-Event ein Bitmap/Dateiname übergeben

Das hängt halt von Deinen Bedingungen ab und wieviel Arbeit Du da investieren willst. Schau Dir vielleicht auch einmal die Demos von FR an.

--
Andreas

haentschman 15. Feb 2010 18:50

Re: Folge von Diagrammen in FastReport ?
 
zum Thema Masterband von Chartdaten trennen:

- Chart Daten wie gehabt
- Masterband auf [nicht zugeordnet] und Anzahl Datensätze 1 (Dann gibt´s das Masterband nur 1 mal mit einem Chart)

...ich hoffe, das nicht falsch verstanden zu haben :hi:

EccoBravo 17. Feb 2010 14:49

Re: Folge von Diagrammen in FastReport ?
 
nochmal zu direkter Diagrammbildung in frx (direkte Datenübertragung in TFrxChartView):

wie übertrage ich denn eine 2D Matrix an Werten ins frxChart ?

All meine Versuche endeten in Fehlermeldungen.
(Siehe Code oben).

Muß ich etwa die 2D-Matrix in einen 1D-Vektor übersaetzten und dann wieder im frx zusammensetzen?

Wie gene ich im 2D-Fall (k 2D-Diagramme) mit dem UserDataSet.tag um ?

Danke

EB.

EccoBravo 17. Feb 2010 15:37

Re: Folge von Diagrammen in FastReport ?
 
Hallo,

Was bedeuten

TfrxChartView().SaveToMetaFile,
TfrxChartView().SaveToStream

oder

TfrxChartView().LoadMetaFile,
TfrxChartView().LoadStraem


Danke

EB

EccoBravo 17. Feb 2010 15:47

Re: Folge von Diagrammen in FastReport ?
 
ich frage deshalb nochmal wegen des direkten Zugriffs auf FrxChart, da der Transfer über Picture1 Bitmap von der Bildqualität zu schlecht ist.

EB

neo4a 18. Feb 2010 09:40

Re: Folge von Diagrammen in FastReport ?
 
Zitat:

Zitat von EccoBravo
ich frage deshalb nochmal wegen des direkten Zugriffs auf FrxChart, da der Transfer über Picture1 Bitmap von der Bildqualität zu schlecht ist.

EB

Ich bin mir fast sicher, dass Dir meine Antwort nicht gefällt, aber: Lass FR das machen, was es am besten kann - Drucken. Benutze (D)eine Spezialkomponente für das "Diagrammen". Dort sitzt die gesamte Logik und Ausführung an zentraler Stelle. Exportiere das Ergebnis als Bitmap an die richtige Stelle Deines Reports. Andere Lösungswege sind sicher denkbar, aber wirklich nicht zu empfehlen: Doppelt/mehrfach vorgehaltene Programmlogik ist eine ganz zuverlässige Fehlerquelle.

Wenn also die/das exportierte Bitmap zu schlecht aufgelöst ist, vergrößere vor dem Export z.B. den Diagramm-Canvas und schalte insbesondere in FR stretching und dergleichen aus.

--
Andreas

EccoBravo 18. Feb 2010 13:18

Re: Folge von Diagrammen in FastReport ?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Gut und Danke neo4a,

dann machen wir es so!
Wie würdest Du es machen?
Ich habe imFastreport Developer schon eine Seite (Page4) mit einem Masterband (MasterData4) und einem Image (Picture1) eingerichtet.
Nun will ich aus meinem Delphiprogramm in meinem FR Report z.B 104 2D-Diagramme mit jeweils einer TContourSeries erzeugen
(Den DiagrammTyp habe ich unten angehangen)


Dazu habe ich FastReport 4.0 Programmer´s manual auf Seite 9-10 interessanten Code gefunden

Delphi-Quellcode:
frxReport1.Clear

frxReport1.DataSet.Add(frxReport1);

Page := TfrxDataPage.Create(frxReport1);
Page.CreateUniqueName;
Page.SetDefaults;
Page.Orientation := poLandscape;

Band := TfrxReportTitle.Create(Page);
Band.CreateUniqueName;
Band.Top := 0;
Band.Height := 20;

Memo :=TfrxMemoView.Create(Band);
Memo.CreateUniqueName;
Memo.Text := 'Hello';
Memo.Height := 20;
Memo.Align := baWidth;

DataBand := TfrxMasterData.Create(Page);
DataBand.CreateUniqueName;
DataBand.Top :=100;
DataBand.Height := 20;

Memo.DataSet := frxDBDataSet1;
Memo.DataField := 'CustomNo';
Memo.SetBounds(0,0,100,20);
Memo.Align := haRight;

frxReport1.ShowReport;
Kann ich diesen Code nicht irgendwo gebrauchen ?

Frage nur, wo bringe ich diesen am Besten in meinem Delphiprogramm unter ?

Vielen Dank

EB.

neo4a 18. Feb 2010 18:17

Re: Folge von Diagrammen in FastReport ?
 
Mit Dateien:
1. Erzeugst Du Deine 108 Diagramme und speicherst sie in einem Verzeichnis Deines Vertrauens.
2. im OnBeforePrint des Databands (FR-IDE) schreibst Du

Delphi-Quellcode:
 
  if FINALPASS then begin
    fn:=[DIAGRAMM];
    if fn>'' then Picture.Loadfromfile(fn);
  end;
3. im onGetValue Deines Reports (Delphi-IDE) schreibst Du
Delphi-Quellcode:
  if uppercase(ParName)='DIAGRAMM' then begin
    ParValue:='';
    c:=Format(MainForm.AppDataDir+'Diagramm%d.bmp',[nr]);
    if FileExists(c) then
      ParValue:=c;
  end;
Mit DB:
1. Erzeuge Deine 108 Diagramme und speichere Sie in einem Blob-Feld der passenden Tabelle
2. Verknüpfe die Tabelle mittels Master-Detail-Beziehungen
3. Referenziere Tabelle und Feld im tfrxPictureview

Mit Code:
1. Erstelle alle Seiten aus Delphi heraus ohne visuelles Design.


--
Andreas

EccoBravo 19. Feb 2010 08:24

Re: Folge von Diagrammen in FastReport ?
 
Danke neo4a,

was ist die Variable c in Deinem ersten Beispiel, und was bedeutet die Funktion Format und was steht in nr ?

Danke

EB

EccoBravo 19. Feb 2010 08:57

Re: Folge von Diagrammen in FastReport ?
 
Hallo heo4a,

hast Du Dir den Code so vorgestellt ?

Hier irgendwo werden die 104 Diagramm im Hauptprogramm erzeugt und abgespeichert:

Delphi-Quellcode:
. . .

    for k := 1 to Bild.Bildzahl do
    begin

        CH_Bild1.Refresh;
        CH_Bild1.SaveToBitmapFile('G:\Daten_XP\Eigene RAD\EB_PDF_Arc\Daten\Pat\Test' + IntToStr(k) + '.bmp');
       
    end;

. . .
Dann kommt der Code in der FastReport-IDE unter dem gewünschten Masterband4:

Delphi-Quellcode:
procedure MasterData4OnBeforePrint(Sender: TfrxComponent);
begin
     if FINALPASS then
     begin
         fn:= [DIAGRAMM];
         if fn>'' then  
             Picture.LoadFromFile(fn);                                                                                        
     end;              
end;
Und nun die für mich rätselhafte Stelle im OnGetValue in der Delphi-IDE:

Delphi-Quellcode:
. . .

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

procedure TF_Haupt.frxUserDataSet1CheckEOF(Sender: TObject; var Eof: Boolean);
begin
    eof := frxUserDataSet1.Tag > Bild.Bildzahl - 1;
end;
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

procedure TF_Haupt.frxUserDataSet1First(Sender: TObject);
begin
    frxUserDataSet1.Tag := 1;
end;
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

procedure TF_Haupt.frxUserDataSet1GetValue(const VarName: string;
    var Value: Variant);
var
    i, j, k: integer;
    c: string;
begin
    if UPPERCASE(VarName) = 'DIAGRAMM' then
    begin
        Value := '';
        c := format('G:\Daten_XP\Eigene RAD\EB_PDF_Arc\Daten\Pat\Test' +
            IntToStr(frxUserDataSet1.tag) + '.bmp',[frxUserDataSet1.tag]);
        if FileExists(c) then
            Value := c;
    end;
end;
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

procedure TF_Haupt.frxUserDataSet1Next(Sender: TObject);
begin
    frxUserDataSet1.Tag := frxUserDataSet1.Tag + 1;
end;
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

procedure TF_Haupt.frxUserDataSet1Prior(Sender: TObject);
begin
    frxUserDataSet1.Tag := frxUserDataSet1.Tag - 1;
end;
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

. . .
Natürlich läuft der Code nicht bei mir. Der Debugger steht bei OnGetValue.

Variable c habe ich einfach als String deklariert. ?

Habe ich das mit frxUserDataSet1.Tag richtig gemacht ?

Wieso muß ich fn nicht deklarieren, was bedeuten DIAGRAMM und FINALPASS ?

Vielen Dank für weitere Hilfe

EB.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:20 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz