![]() |
property vom Typ string mit dem Komponentennamen vorbelegen
Hallo,
ich entwickle gerade eine neue Komponente und würde gerne eine property vom Typ string mit dem Komponentennamen vorbelegen. Also genau wie bei z.B. TLabel: Wenn man ein neues Label auf einer Form platziert, dann erhält die caption des Labels automatisch den selben Text, wie der Name des Labels --> z.B. label123 WIE wird das gemacht? Im Konstruktor der Komponente ist der Name der Komponente noch leer. Wann bzw. in welchem Ereignis wird der Caption eines Labels Ihr Text zugewiesen, wenn diese auf der Form zur Designzeit platziert wird? Ich habe nun schon viel hier gesucht, gegoogelt und einige Bücher um Rat gefragt - leider ohne Ergebnis. :( Falls es wichtig ist: Ich leite meine neue Komponente von TCustomPanel ab.
Code:
constructor TEingabe.Create(AOwner: TComponent);
begin inherited; ... FBeschriftung := Self.Name; // Self.Name ist aber leider LEER --> wenn ich zu Testzwecken Self.Name über ein OnClick-Ereignis per showmessage() ausgebe, dann steht da der korrekte Name drin --> WANN wird Self.Name beschrieben??? ... end; Viele Grüße, Poolspieler |
AW: property vom Typ string mit dem Komponentennamen vorbelegen
Hallo,
schau dir mal Loaded an. Heiko |
AW: property vom Typ string mit dem Komponentennamen vorbelegen
Hallo,
danke für Deine Antwort! Es ist schon mal ein sehr guter Hinweis gewesen - aber wohl noch nicht ganz die Lösung. Ich habe mal weiter in die Richtung gesucht und TComponent.SetName gefunden. Ich habe es auch gleich ausprobiert - und es hat damit funktioniert! :thumb: Danke nochmal - da wäre ich ohne Deinen Denkanstoß NIE drauf gekommen! Viele Grüße, Poolspieler |
AW: property vom Typ string mit dem Komponentennamen vorbelegen
Ich hätte jetzt eher an
Delphi-Quellcode:
gedacht.
ControlStyle := ControlStyle + [csSetCaption];
|
AW: property vom Typ string mit dem Komponentennamen vorbelegen
Hallo DeddyH,
vielen Dank für die Info, ControlStyle ist wirklich interessant. Für meinen Fall passt es zwar nicht, weil ich das Feld "Beschreibung" und nicht "Caption" genannt habe. Frage nebenbei: Woher kennst Du diese Eigenschaft --> steht sowas in irgend einem TUT oder HOWTO? Ich habe wirklich viel zu diesem Thema gesucht, aber definitiv nirgends einen Hinweis auf diese Eigenschaft gelesen. Auch im Grundlagenbuch und im Kochbuch von Doberenz und Kowalski steht davon nichts. Oder sind das einfach Erfahrungswerte, die Du irgendwo (mehr oder minder zufällig) gesammelt hast? Viele Grüße, Poolspieler |
AW: property vom Typ string mit dem Komponentennamen vorbelegen
Ich hatte vor Jahren einmal dasselbe Problem. Wie ich dann aber letztendlich auf TControlStyle gekommen bin, weiß ich nicht mehr, möglicherweise in anderen Komponenten gespickt ;)
|
AW: property vom Typ string mit dem Komponentennamen vorbelegen
Man schaut einfach mal nach, wo/wie die Eigenschaft
Delphi-Quellcode:
gesetzt wird und stößt dann auf
Name
Delphi-Quellcode:
TControl.SetName
Delphi-Quellcode:
BTW: Du kannst diese Methode in deiner Klasse auch überschreiben und dann ebenfalls deine Eigenschaft
procedure TControl.SetName(const Value: TComponentName);
var ChangeText: Boolean; begin ChangeText := (csSetCaption in ControlStyle) and not (csLoading in ComponentState) and (Name = Text) and ((Owner = nil) or not (Owner is TControl) or not (csLoading in TControl(Owner).ComponentState)); inherited SetName(Value); if ChangeText then Text := Value; end;
Delphi-Quellcode:
damit setzen ;)
Beschreibung
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:32 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