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/)
-   -   Delphi Ansprechen dynamisch erzeugter objekte (https://www.delphipraxis.net/23896-ansprechen-dynamisch-erzeugter-objekte.html)

Master_BB 11. Jun 2004 16:40


Ansprechen dynamisch erzeugter objekte
 
Hi,
ich hab ein Problem und zwar habe ich eine PageControl die automatisch Tabsheets erstellt
auf denen sich ListViews befinden. Die namen der Tabsheets und listviews werden aus
einer Typisierten Datei geholt in welche der User Datensätze integrieren kann.
So die ListViews heißen dann immer so MyListView.Name := ListView+name;
nun möchte ich aus einer anderen procedure auf diese ListView zugreifen
und zwar mach ich das so

n := 'ListView'+name;
n.clear;

dann sagt er jedcoh zu wenig parameter. woran liegts? oder muß davor noch die pagecontrol?
pagecontrol1.pages[i].objekt.clear?

und dann noch ne kleine frage FindComponent bei pagecontrol um meine Tabsheets zu finden was gibt das aus?
eine indexzahl? um das Tabsheet anzusprechen?

Greetz
Master_BB

Niko 11. Jun 2004 16:56

Re: Ansprechen dynamisch erzeugter objekte
 
FindComponent gibt einen Zeiger auf das Objekt mit dem angegbenen Namen zurück oder nil, falls es kein solches gibt.
Entsprechend müsste auch dein Zugriff auf die ListView in etwa so aussehen:
Delphi-Quellcode:
var lst: TListView;

//...

lst := MeinTabsheet.FindComponent('ListView' + name);
if lst <> nil then
  lst.clear;

Master_BB 12. Jun 2004 00:54

Re: Ansprechen dynamisch erzeugter objekte
 
hey Niko thx,
jedoch klappts noch nicht weil MeinTabsheet ja auch dynamisch erstellt ist.
Ich wollte dein beispiel darauf umwälzen jedoch fehlt noch nen kleines stück.

Delphi-Quellcode:
var myTabSheet:TTabSheet;

...
 myTabSheet := PageControl1.Page[0]   //?
das prob ist ich weiß ja nicht welche page es ist, und findcomponent oder so gibts da nicht, soweit wie diese komische funktions vorrausschau nach dem . es immer anzeigt.

Alexander 12. Jun 2004 07:01

Re: Ansprechen dynamisch erzeugter objekte
 
Wenn du das aktive Tabsheet herausfinden willst, schau dir mal ActivePage an. Sonst habe ich dich leider nicht richtig verstanden... :saD:

Master_BB 12. Jun 2004 15:47

Re: Ansprechen dynamisch erzeugter objekte
 
ja die page der pagecontrol ist nohc nicht aktiv.
ok nochmal ganz ausführlich

1 Typisierte Datei mit folgenden Datensätzen
- Filme - Sichtbar True
- Trailer - Sichtbar False
- Serien - Sichtbar True (extra boolische variablen des Records)

Eine zählschleife erstellt nun von Sichtbar True TabSheets auf der Pagecontrol mit dem namen Filme udn Serien.
Darauf werden ListViews erstellt mit dem namen "ListViewFilme" und "ListViewSerien".
und jetzt möchte ihc ListViewFilme.clear und noch weiteres machen.
mit Nikos lösung kann man auf die listview zugreifen wenn man in einer variable das tabsheet hat.
listview und tabsheet sind beide dynamisch erstellt und ich kann nicht auf die Listview zugreifen
da

lst := MeinTabsheet.FindComponent('ListView' + name);
if lst <> nil then
lst.clear;

MeinTabsheet ist noch nicht definiert. wie kann ich das tun? erstellt wurden die tabsheets in einer anderen procedure und das soll auch so bleiben.

Niko 12. Jun 2004 16:55

Re: Ansprechen dynamisch erzeugter objekte
 
Ich habs gerade noch mal ausprobiert.
FindComponent findet nicht nur die direkt, sondern alle irgendwie untergeordneten Objekte.
Damit kannst du einfach schreiben:
Delphi-Quellcode:
var lst: TListView;

//...

lst := MeinForm.FindComponent('ListView' + name) as TListView;
if lst <> nil then
  lst.clear;


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

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