Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Innerhalb einer Komponente ihren Namen rausfinden


ao - Mi 14.08.02 12:03
Titel: Innerhalb einer Komponente ihren Namen rausfinden
Moin, moin,

ich habe einen Komponente entwickelt, klappt auch alles wunderbar, nur bin ich irgendwie zu dumm, innerhalb der Komponente (zur Laufzeit) ihren Namen rauszufinden. :cry:
Ich hoffe ihr könnt mir helfen.

Gruß
Andreas


Renegade - Mi 14.08.02 12:20

Moin erstmal!

Das sollte folgendermaßen funzen:

Quelltext
1:
ShowMessage(MeineKompo.Name);                    


Gruß


Arakis - Mi 14.08.02 12:52

Ich glaub, ao meinte vielleicht etwas anderes, also den Namen von sich selbst herausfinden, ohne "MeineKompo" zu verwenden.

Quelltext
1:
ShowMessage(self.Name);                    

Vorraussetzung ist, dass man sich gerade in der Klasse der Komponente befindet.

Oder ist das das selbe wie bei Renegade user defined image


ao - Mi 14.08.02 13:14

Hallo,

Wenn ich meine Komponente zur Entwicklungszeit z.B. in ein DataModule
setze, bekommt die Komponente ja automatisch einen Namen. In dem Fall reicht es, wenn ich innerhalb meiner Komponente einfachShowMessage(Name);aufrufe, da ich mich ja innerhalb der Klasse befinde.

Wenn ich meine Komponente aber zur Laufzeit z.B. so erzeuge

Quelltext
1:
2:
3:
4:
5:
6:
7:
var
  Q: TMyComponent;
begin
  Q := TMyComponent.Create(Form1);
  // irgendwas mit der Komponente machen
  Q.Free;
end;
dann gibtShowMessage(Name); nur einen leeren string zurück, da ich q.name keinen Wert zugewiesen habe.
Ich hätte aber gerne "Q".

Gruß
Andreas


Renegade - Mi 14.08.02 13:30

Moin erstmal!

Ich wüßte im Moment nicht wozu du das bräuchtest. Du erzeugst die Kompo ja im Code - also weißt du ja wie sie heißt.

Ansonsten weiß doch beim createn Q.Name:='Q' zu.

Gruß


Arakis - Mi 14.08.02 13:32

Meiner Meinung nach kann das nicht gehen, weil der Variabelname zur Laufzeit nicht bekannt ist. Variabelnamen sind ja nur eine Kleine Hilfe für uns Menschen, das Objekt "Q" kann ja als Komponente den Namen "irgendwas" haben. Alles andere wären Sprachkonstrukte, so wie sie bei Scriptsprachen häufig verwendet werden(Sourcecode zur Laufzeit generieren)

Vielleicht sagt dir das irgendwas:

Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.Button1Click(Sender: TObject);
var
  IrgendEineKompo: TComponent;
begin
  IrgendEineKompo := self.FindComponent('Button1');
  showmessage(IrgendEineKompo.Name); //Hier wird "Button1" angezeigt
end;


Bis dann
user defined image


ao - Mi 14.08.02 13:50

Also wenn ich "Q" nicht anders rausfinden kann, dann muss ich halt der Eigenschaft Name den Wert "Q" zuweisen. Ich habe nur immer gedacht, k.A. wieso, dass der Name der Variablen automatisch der Name der Komponente ist. Aber wenn man da genauer drüber nachdenkt ist es ja auch unlogisch, wie Arakis schon sagte, es ist ja nur eine Hilfe. Ich konnte mir nur irgendwie nicht vorstellen das die Komponente die ich erzeuge keinen Namen hat, obwohl ich sie doch mit "Q" anspreche, aber das ist ja nur ein "Zeiger".
Aber danke euch trotzdem! Man lernt nie aus! :D

Gruß
Andreas