Delphi-PRAXiS
Seite 3 von 3     123   

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 19. Feb 2010 09:44

Re: Folge von Diagrammen in FastReport ?
 
Zitat:

Variable c habe ich einfach als String deklariert. ?
Gut erkannt.
Zitat:

Habe ich das mit frxUserDataSet1.Tag richtig gemacht ?
Das ist überflüssig. Du kannst im onGetValue frxUserDataSet1.RecNo auswerten. Damit übergibst Du den passenden Dateinamen zu aktuellen Datensatz. Ersetze also in meinem Beispiel die Variable nr entsprechend.
Zitat:

Wieso muß ich fn nicht deklarieren, was bedeuten DIAGRAMM und FINALPASS ?
Das musste man in FR2 noch nicht tun, in FR4 schon, also tu es.

DIAGRAMM ist der Variablennamen, der zur Laufzeit im onGetValue belegt wird. Wenn Du ihn in der FR-IDE nicht vorher irgendwie mit einem Dummy-Wert belegst, wird die Druckvorschau in der IDE nicht funktionieren. Überhaupt funktioniert das alles nur zur Laufzeit Deiner App. Willst Du das auch zur Designzeit haben, sehe ich einen Weg über FR-UDF, aber ich denke, da Du derzeit noch nicht die Bedeutung von FINALPASS kennst ( FR-Systemvariable, die anzeigt, dass bei einem 2-Phasen-Report der 2. Lauf läuft), kommt dieser Weg noch etwas früh für Dich.

Vielleicht noch einmal zum Prinzip: FR löst im Script die Variablennamen auf. Das können Datenfelder oder lokale oder globale Variablen sein. Solange alles im FR-Report passiert, müssen alle Varibalen dort deklariert und belegt sein, ansonsten gibt's Meldungen.

onGetValue stellt nun dem Programmierer einen Mechanismus zur Verfügung, bei dem zur Laufzeit des Programmes der Wert außerhalb des FR-Reports belegt, verändert, gesetzt werden kann. Damit kann man Dinge machen, die man innerhalb FR nicht kann, weil man z.B. keinen Zugriff auf andere Delphi-Komponenten usw. hat.

--
Andreas

EccoBravo 19. Feb 2010 10:09

Re: Folge von Diagrammen in FastReport ?
 
Hallo Andreas,

vielen Dank für Deine ausführliche Antwort,

Ich will nicht nerven, bin aber ein absoluter FR-Anfänger.
Daher meine weitere Fragerei:

Also kann ich die Procedures ...frxUserDataSet1First, ...frxUserDataSet1Next ... usw wegschmeissen?

Wie werte ich dann die RecNo / nr in OnGetValue aus, wenn ich irgendwann im Delphiptogramm eine Liste von Bmp+s derart

Bild1
Bild2
...
Bild104

erzeugt habe.

Vielen Dank

EB.

neo4a 19. Feb 2010 10:38

Re: Folge von Diagrammen in FastReport ?
 
Wenn Du den frxUserDataSet1 an Dein FR-Databand hängst, übernimmt FR die Steuerung für Dich und dann geht es so:

Delphi-Quellcode:
if uppercase(ParName)='DIAGRAMM' then begin
    ParValue:='';
    c:=Format(MainForm.AppDataDir+'Diagramm%d.bmp',[frxUserDataSet1.RecNo]);
    if FileExists(c) then
      ParValue:=c;
  end;

--
Andreas

EccoBravo 19. Feb 2010 11:07

Re: Folge von Diagrammen in FastReport ?
 
Hallo Andreas,
nimm es mir nicht übel, es läuft so noch nicht bei mir.

Entsprechend meines ProgrammCodes:

Delphi-Quellcode:
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\Diagramm%d.bmp',[frxUserDataSet1.RecNo]);
        if FileExists(c) then
            Value := c;
    end;
end;
kennt mein Compiler nicht die Worte ParName und ParValue.
Entsprechend meines Codes habe ich dafür VarName und Value genommen.

Nun kennt mein Compiler auch nicht MainForm.AppDataDir.
Unter F_Haupt. kennt er auch nicht AppDataDir
Also habe ich da mit
Delphi-Quellcode:
'G:\Daten_XP\Eigene RAD\EB_PDF_Arc\Daten\Pat\'
versucht = Negativ.

Dann heißen meine abgespeicherten Bilder

Test1
Test2
. . .
Test104

Anstelle
Delphi-Quellcode:
'G:\Daten_XP\Eigene RAD\EB_PDF_Arc\Daten\Pat\Diagramm%d.bmp'
habe ich
Delphi-Quellcode:
'G:\Daten_XP\Eigene RAD\EB_PDF_Arc\Daten\Pat\Test%d.bmp'
genommen = Negativ.

Trotz Deiner ausführlichen Hilfe bei mir noch wildes probieren.

Und dann noch ein Hinweis, in der FR-IDE habe ich im Masterband4 ein Bild Picture1 platziert, das ich nutzen wollte.

Letzte Frage, Wo werden denn die Bilder im FR geladen ?

Ich häre Dir für weitere geduldige Hilfe dankbar

EB.

neo4a 19. Feb 2010 11:21

Re: Folge von Diagrammen in FastReport ?
 
Wahrscheinlich findet er die Datei nicht. Das kann man leicht debuggen.

Ansonsten stammt der Code-Auszug aus (m)einer App, die ich vor Jahren mit FR2 entwickelt habe. Die offensichtlichen Anpassungen wollte ich Dir überlassen. Ich kann Dir sagen, dass das, was Du willst, mit FR4 umzusetzen ist, weil etwas ähnliches seit langem bei mir läuft. Erwarte aber bitte nicht meinen Ehrgeiz, Dir eine ready-to-go-Lösung zu liefern. Dafür denke ich leider zu kommerziell ;)

--
Andreas

EccoBravo 26. Feb 2010 17:09

Re: Folge von Diagrammen in FastReport ?
 
nur noch eine kurze Frage:

Zitat:

procedure MasterData4OnBeforePrint(Sender: TfrxComponent);
begin
if FINALPASS then
begin
fn:= [DIAGRAMM]; { <--- ??? }
if fn>'' then
Picture.LoadFromFile(fn);
end;
end;
stolpert mein Compiler über [DIAGRAMM].
Er kann dieses folgendermaßen zur Laufzeit nicht auflösen

..kann typ Array nicht als String auflösen...

Irgendwie muß ich aus DIAGRAMM das DataField, das ich im unstehendem Code als c übergeben habe, herausholen.
Zitat:

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;
Hiernach werde ich im Interesse der Nichtumgehung kommerzieller Interessen auch nicht mehr weiterfragen.
Andreas war mir bei aller vorher geleisteter Unterstützung nur noch die Erklärung des Klammerausdrucks [...] schuldig.
Meine Bankdaten werde ich nicht preisgeben, dafür aber Lob und Wertschätzung.

EB

EccoBravo 1. Apr 2010 13:00

Re: Folge von Diagrammen in FastReport ?
 
Hallo,

nach langen Mühen habe ich es endlich geschafft, eine Reihe von Bildern in einem FR4 Report auszugeben.
Bin mit der Lösung auch ganz zufrieden.

Ich habe festgestellt, dass man dazu alles aus der Delphi IDE steuern kann, also keinerlei Code in der FR4 IDE benötigt.

Den benutzten Code habe ich unten angehangen.

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
   sl := TStringList.Create;

   sl.Add('G:\Path\Test1.bmp');
   sl.Add('G:\Path\Test2.bmp');
   sl.Add('G:\Path\Test3.bmp');
   sl.Add('G:\Path\Test4.bmp');
   sl.Add('G:\Path\Test5.bmp');
   sl.Add('G:\Path\Test6.bmp');
   sl.Add('G:\Path\Test7.bmp');
   sl.Add('G:\Path\Test8.bmp');
   sl.Add('G:\Path\Test9.bmp');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   FrxReport1.PrintOptions.Printer := 'Acrobat PDFWriter';
   FrxReport1.FileName := 'G:\Path\TargetDoc.pdf';
   StringDS.RangeEnd := reCount;
   StringDS.RangeEndCount := sl.Count;
   frxReport1.ShowReport;
end;

procedure TForm1.frxReport1BeforePrint(c: TfrxReportComponent);
var
   Pict: TfrxPictureView;
   Name: string;
begin
   if c is TfrxPictureView then
   begin
      Name := TfrxPictureView(c).Name;
      if Name = 'Picture1' then
      begin
         Pict := TfrxPictureView(c);
         Pict.Picture.LoadFromFile(sl[StringDS.RecNo]);
      end;
   end;
end;
Dazu fiel mir nur eine alte Frage aus Studienzeiten ein:
Wieviel Versuche benötigt ein Affe, um "Romeo und Julia" auf einer Schreibmaschine zu tippen.

Vielen Dank an Euch alle,
neo4a darf diesen Code auch unentgeldlich benutzen.

Eine Frage habe ich trotzdem noch:
Zur Laufzeit in der Reportvorschau.
Wenn ich den Printdialog zum Speichern der 'TargetDOC.pdf' aus der Druckvorschau heraus öffne, wird im Speicherdialog schon der richtige Dateiname 'TargetDOC.pdf' angezeigt, jedoch nicht der richtige Pfadname 'G:\Pfad'.
Stattdessen steht dort 'C:\Dokumente und Einstellungen\Benutzer\Eigene Dateien'.

Wie bekomme ich dem Speicherdialog unter der Reportvorschau den richtigen Pfadnamen beigebogen ?


Viel Spass beim Knobeln und
Frohe Ostern

EB

DSCHUCH 1. Apr 2010 14:01

Re: Folge von Diagrammen in FastReport ?
 
kannst du mal ein bsp posten wie der chart am ende aussehen soll?


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:59 Uhr.
Seite 3 von 3     123   

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