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 Wie den Namen einer dynamisch erzeugten Komponente ermitteln (https://www.delphipraxis.net/50554-wie-den-namen-einer-dynamisch-erzeugten-komponente-ermitteln.html)

Glühwürmchen 27. Jul 2005 15:27


Wie den Namen einer dynamisch erzeugten Komponente ermitteln
 
Folgende Situation:
Ich habe ein Formular auf dem ein Panel liegt. Nun wird zur Laufzeit ein DBGRid erzeugt und auf diesem Panel platziert. Anschließend wird aus einer Auswahl von an die Hundert ClientDataSets eines oder mehrere ausgewählt und mit dem DBGRid verbunden.

Eigentlich benötige ich die Namen dieser ClientDataSets.
Ich glaube mir wäre schon geholfen, wenn ich den Namen des DBGRid's herausfinden könnte.

Hat jemand eine Idee, wie ich das eine oder das andere bewerkstelligen kann?

marabu 27. Jul 2005 15:39

Re: Wie den Namen einer dynamisch erzeugten Komponente ermit
 
Hi,

der Name einer Komponente wird im Form-Designer der IDE automatisch vorbelegt - und nur da. Hast du denn bei der dynamischen Erzeugung deiner Komponenten auch einen Namen vergeben? Das ist recht ungewöhnlich. Im Normalfall identifizierst du deine dynamischen Komponenten auf andere Weise.

Ganz allgemein findest du jede Komponente über die Methode FindChildControl(name) oder du suchst rekursiv in der Eigenschaft Controls eines Component-Containers (z.B. deine Form).

Grüße vom marabu

Glühwürmchen 28. Jul 2005 13:07

Re: Wie den Namen einer dynamisch erzeugten Komponente ermit
 
Habe jetzt folgenden Lösungsansatz:

Zunächst mal vorweg:
Ich habe ein Panel mit Namen „pnlList“. Darauf wird zur Laufzeit unter anderem das besagte dbGrid dynamisch platziert.

Ich habe mich dann langsam vorgetastet und festgestellt, daß zur Laufzeit auf „pnlList“ eine Komponente[34] liegt – eine Form – und auf dieser wiederum mein dbGrid. Das dbGrid ist dann Komponente[22].

Nun hat ein dbGrid ja normalerweise die Eigenschaft „DataSource“.
Wenn ich aber versuche auf diese Eigenschaft zuzugreifen meldet bereits der Compiler Bedenken an:

Delphi-Quellcode:
dsIrgendwas := pnlList.Components[34].(Components[22]). DataSource;
 [Fehler] Main.pas(1856): E2029 Bezeichner erwartet, aber '(' gefunden

Delphi-Quellcode:
dsIrgendwas := pnlList.Components[34].TDbGrid(Components[22]).DataSource;
 [Fehler] Main.pas(1856): E2003 Undefinierter Bezeichner: 'TDbGrid'

Delphi-Quellcode:
dsIrgendwas := pnlList.Components[34].Components[22] as TDBGrid.DataSource;
 [Fehler] Main.pas(1856): E2096 Methodenbezeichner erwartet

Delphi-Quellcode:
dsIrgendwas := pnlList.Components[34].(Components[22] as TDBGrid).DataSource;
 [Fehler] Main.pas(1856): E2029 Bezeichner erwartet, aber '(' gefunden


Was mache ich denn falsch?

Igotcha 28. Jul 2005 13:11

Re: Wie den Namen einer dynamisch erzeugten Komponente ermit
 
Die benötigten Klassen von dynamisch zu erstellenden Komponenten musst Du schon von Hause aus in die uses-Klausel aufnehmen.

Gruß Igotcha

Glühwürmchen 28. Jul 2005 13:17

Re: Wie den Namen einer dynamisch erzeugten Komponente ermit
 
Die Klasse DBGrid wird eingebunden.

marabu 28. Jul 2005 13:25

Re: Wie den Namen einer dynamisch erzeugten Komponente ermit
 
Hallo,

wenn das wirklich so ist, dass du ein DGrid auf einer Form platziert hast, und diese Form zur Laufzeit auf das Panel pnlList klebst, dann ist der Zugriff auf die DataSource folgendermaßen:

Delphi-Quellcode:
var
  ds: TDataSource;
  grid: TDBGrid;
  frm: TDeineForm;
begin
  frm := pnlList.Components[34] as TDeineForm;
  grid := frm.Components[22] as TDBGrid;
  ds := grid.DataSource;
end;
marabu

Glühwürmchen 28. Jul 2005 13:50

Re: Wie den Namen einer dynamisch erzeugten Komponente ermit
 
Das funzt soweit.
Danke schön.

Jetzt muß ich nur noch sehen, ob mich das weiterbringt....
:gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:52 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