Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Auf Memo zugreifen das zur Laufzeit erzeugt wurde


Luncustaf - Fr 13.12.02 15:56
Titel: Auf Memo zugreifen das zur Laufzeit erzeugt wurde
hi,

ich hab hier eine Pagecontrol auf dieser erzeuge ich zur laufzeit mehrere tabsheets. Auf diesen tabsheets sollen nun memofelder platziert werden klapptauch sehr gut wenn nicht gar einwandfrei. nur will ich in diese Meofelder nun eine textdatei laden und zwar in das memofeld das zur Zeit active ist. Da die memofelder immer verschiedene Anmen haben müssen, hab ich diese mit einem Zähler versehen so das das erste als ANme fenster0 hat das zweite Fenster1 das dritte Fenster2 usw.

wenn ich nun auf das memofeld zugreifen will dann bringt der compiler mir jedesmal eine zugriffsverletzung.

ich mache das mit diesem Code


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
    AssignFile(f,OpenD.FileName);
    {$i-} Reset(f); {$i+}
    if IOResult <> 0 then
    begin
       ShowMessage('Fehler...');
       Exit;
    end;
    while not eof(f) do begin
          Readln(f,s);
         TMemo(Page.ActivePage.FindComponent('Fenster'+Page.ActivePage.Caption));



Quelltext
1:
         TMemo(Page.ActivePage.FindComponent('Fenster'+Page.ActivePage.Caption));                    


hiermit suche ich auf der Activen seite des pageControls (Page) nach einer TMemo Komponente die den Namen Fenster + die Caption des Activen Fensters hat. zur Erklärung die Tabsheets haben die Gleiche bezeichnung wie die nummer der Memofelder.

Also Fenster0 gehört zu Tabsheet0, Fenster1 gehört zu Tabsheet1 usw.

ich weis nicht wo der FEhler eligt.

gr€€tz


foxy - Fr 13.12.02 16:00

hmm mal ein vorschlag was ich mal versuchen würde .... mach doch ne spezielle abfrage if blaFenster.activ then bla bla ...

ka ob das dir hilft warscheins nicht =) aber ich hätte das mal versucht ...


bis11 - Fr 13.12.02 16:01

hi,

so wie ich Deine Frage und Deinen Quelltext verstehe suchst Du die Memokompo mit dem Namen, so wie das aktuelle TabSheet heißt. Nur was ich garnicht verstehe, steht oben im TabSheet jetzt "Tabsheet0" oder "Fenster0" :?: :?: :?


LCS - Fr 13.12.02 16:08

Hi
könnte auch sein, dass der Fehler bereits beim Erstellen der Memos passiert. Hast du mal kontrolliert, ob du dem Memo auch das jeweilige Tabsheet als Parent zuordnest? Wenn nicht, dann kann das mit FindComponent auch nicht funktionieren.

Gruss Lothar


Luncustaf - Fr 13.12.02 16:14

hi,

der tabsheet heißt einfach 0, 1, 2 usw. die memos heißen dann Fenster0, Fenster1 usw.

die erzeugung funktioniert so.


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
 
      pruefe := memozaehler;
      memozaehler := memozaehler +1;
       with TTabsheet.Create(Self) do
       begin
            PageControl := Page;
            Caption := IntToStr(memozaehler);
            Page.SelectNextPage(memozaehler > pruefe);
            Fenster := TMemo.Create(self);
            Fenster.Parent := Page.Pages[pruefe];
            Fenster.Align := alClient;
            Fenster.Name:='Fenster'+ IntToStr(memozaehler);
            Page.ActivePageIndex := memozaehler;
            Page.ActivePage.ShowHint := True;

       end;



gr€€tz


smiegel - Fr 13.12.02 17:55

Hallo,


Quelltext
1:
Page.ActivePage.FindChildControl('Fenster'+Page.ActivePage.Caption);                    


Luncustaf - Mo 16.12.02 09:07

hi,

danke für eure antworten smiegels lösung hat geholfen thx vielmals und wieder was gelernt :)


gr€€tz