Delphi-PRAXiS

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/)
-   -   Dynamisches erstellen von Tabsheets und Memos (https://www.delphipraxis.net/155372-dynamisches-erstellen-von-tabsheets-und-memos.html)

p80286 20. Okt 2010 15:39

Dynamisches erstellen von Tabsheets und Memos
 
Hallo zusammen,

Ich habe eine Anwendung, die ihre Logdateien über mehrere Verzeichnisse verteilt. Also schnell ein Form mit einem Pagecontrol erstellt.
Für jede gefundene Logdatei soll jetzt auf dem Pagecontrol ein Tabsheet erstellt werden und auf jedem Tabsheet ein Memo.
Ich hab mir aus mehreren Beispielen meinen Source zusammengeklöppelt, aber ich werde das Gefühl nicht los, das er etwas suboptimal ist, vor allem was Parent und Owner angeht. Könntet Ihr bitte einmal darüber schauen und mich korrigieren:
Delphi-Quellcode:
var
   marr : array of tmemo;
   ll  : tstringlist;

.....
  { ll enthält Dateinamen }
  if ll.count>0 then
    setlength(marr,ll.count-1);
    for i:=0 to ll.count-1 do begin
      with TTabSheet.Create(pagecontrol1) do begin
        PageControl := PageControl1;
        Caption := ll[i];
      end;
      marr[i]:=tMemo.Create(self);
      marr[i].parent:=pagecontrol1.pages[i];
      marr[i].Align:=alClient;
      marr[i].ScrollBars:=ssBoth;
      try
      marr[i].Lines.loadfromfile(ll[i]);
      except
      marr[i].text:='**** '+#13#10+
                    ll[i]+#13#10+
                    ' konnte nicht geöffnet werden'+#13#10+
                    ' **** ' ;
      end;
    end;
Das "Aufräumen" fehlt noch, da hab ich mir etwas in dieser Art vorgestellt:
Delphi-Quellcode:
for i:=0 to Pagecontrol1.pages.count-1 do
  Pagekontrol1.Pages[i].free; {mit automatischer Freigabe der Memos !? }
Vielen Dank
K-H

DeddyH 20. Okt 2010 15:43

AW: Dynamisches erstellen von Tabsheets und Memos
 
Kann es sein, dass marr um 1 Element zu klein ist? Ansonsten ist mir nichts weiter aufgefallen.

himitsu 20. Okt 2010 15:50

AW: Dynamisches erstellen von Tabsheets und Memos
 
Jupp, marr ist zu klein.

Und beim Löschen die Forschleife rückwärts laufen lassen oder
Delphi-Quellcode:
Pages[0].Free;
verwenden.

Das Memo wird freigegeben, wenn dessen Owner freigegeben wird.
Also für das Memo das TabSheet als Owner angeben.
Delphi-Quellcode:
tMemo.Create(pagecontrol1.pages[i]);

p80286 20. Okt 2010 17:03

AW: Dynamisches erstellen von Tabsheets und Memos
 
Vielen Dank!
Fluppt wie gewünscht!
dieses ..count-1 hab ich glatt übersehen und in die Downtofalle wär ich wohl auch getappt

K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:28 Uhr.

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