Komponete in LazReport zur Laufzeit hinzufügen

Rund um die LCL und andere Komponenten
Antworten
Benutzeravatar
willi4willi
Lazarusforum e. V.
Beiträge: 170
Registriert: Sa 1. Nov 2008, 18:06
OS, Lazarus, FPC: Lazarus 3.8 FPC 3.2.2 x86_64-win64-win32/win64 x86_64-linux-gtk2
CPU-Target: i386, win64, arm

Komponete in LazReport zur Laufzeit hinzufügen

Beitrag von willi4willi »

Hallo,

ich habe folgendes Problem mit LazReport:

Ich möchte während der Laufzeit ein Report erstellen und ihm auch Objekte bzw. Komponenten hinzufügen.

Als Ansatz hatte ich folgendes versucht:

Code: Alles auswählen

//--------------------------------------------------//
// Erstellen des Formulars                          //
//--------------------------------------------------//
procedure TForm1.CreateFormular;
var i : integer;
     MyMemofeld : TfrMemoView;
begin
 frReport1.Filename:='Test.lrf';
 if not fileexists(frReport1.FileName) then             //wenn es die Datei noch nicht gibt, dann ...
 begin
  frReport1.LoadFromFile(frReport1.FileName);                   
  if frReport1.Variables.IndexOf('MyVariables')<0 
   then frReport1.Variables.Add('MyVariables');       //Variablenliste hinzufügen (klappt)
  if frReport1.Variables.IndexOf(' Variable1')< 0 
   then frReport1.Variables.Add(' Variable1');
  if frReport1.Variables.IndexOf(' Variable2')< 0 
   then frReport1.Variables.Add(' Variable2');
 
  MyMemofeld := TfrMemoView.Create;                 // Mein Textfelder erzeugen
  MyMemofeld.Name:='Feld1';
  MyMemofeld.SetBounds(50, 250, 300, 50);          // Name, Größe, ... festlegen
  MyMemofeld.Font.Size := 18;
  MyMemofeld.Memo.Add('Dies ist eine Testzeile');   // Inhalt hinzufügen
  MyMemofeld.Memo.Add('[Variable1]');
  MyMemofeld.Memo.Add('[Variable2]');
 
  frReport1.Pages.Clear;                                        // Seite1 hinzufügen
  frReport1.Pages.Add();
  frReport1.Pages[0].Objects.Add(MyMemofeld);    // mein Textfeld hinzufügen
 
  showmessage(inttostr(frReport1.Pages[0].Objects.Count));   
                                                  // mal sehen ob die Komponente auch da ist (sagt = 1)
 
  frReport1.SaveToFile(frReport1.FileName);         // und das Ding speichern
 end;
end;
Wenn ich mir dann aber den Report ändern oder ansehen möchte, sehe ich nichts (außer, dass die Variablen angekommen sind):

Code: Alles auswählen

procedure TForm1.ChangeFormular;
var i : integer;
begin
 frReport1.Filename:='Test.lrf';
 frReport1.LoadFromFile(frReport1.FileName);
 frReport1.DesignReport;
end;
Was mache ich nur falsch? Hat jemand eine Idee?

Willi4Willi
 

Viele Grüße

Willi4Willi

------------

u-boot
Beiträge: 308
Registriert: Do 9. Apr 2009, 10:10
OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 785..

Re: Komponete in LazReport zur Laufzeit hinzufügen

Beitrag von u-boot »

Code: Alles auswählen

if not fileexists(frReport1.FileName) then            
 begin
  frReport1.LoadFromFile(frReport1.FileName);
Ich kenn mich damit nich weiter aus aber ist das ernsthaft soll das wirklich heissen:

"Wenn es die Datei nicht gibt dann lade diese nicht existierende Datei " ?

Oder lese ich da was falsch ?
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)

Benutzeravatar
willi4willi
Lazarusforum e. V.
Beiträge: 170
Registriert: Sa 1. Nov 2008, 18:06
OS, Lazarus, FPC: Lazarus 3.8 FPC 3.2.2 x86_64-win64-win32/win64 x86_64-linux-gtk2
CPU-Target: i386, win64, arm

Re: Komponete in LazReport zur Laufzeit hinzufügen

Beitrag von willi4willi »

Ja genau, ich denke mal, dass damit der Dateiname festgelegt wird. Jedenfalls gibt es damit kein Problem.
Auch das anschließende Zuordnen der Variablen klappt.

Mein Problem sind die Textfelder.
 

Viele Grüße

Willi4Willi

------------

Antworten