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/)
-   -   property vom Typ string mit dem Komponentennamen vorbelegen (https://www.delphipraxis.net/173819-property-vom-typ-string-mit-dem-komponentennamen-vorbelegen.html)

Poolspieler 18. Mär 2013 22:28

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

hoika 18. Mär 2013 22:34

AW: property vom Typ string mit dem Komponentennamen vorbelegen
 
Hallo,

schau dir mal Loaded an.


Heiko

Poolspieler 18. Mär 2013 22:56

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

DeddyH 19. Mär 2013 07:17

AW: property vom Typ string mit dem Komponentennamen vorbelegen
 
Ich hätte jetzt eher an
Delphi-Quellcode:
ControlStyle := ControlStyle + [csSetCaption];
gedacht.

Poolspieler 19. Mär 2013 10:51

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

DeddyH 19. Mär 2013 10:57

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 ;)

Sir Rufo 19. Mär 2013 12:43

AW: property vom Typ string mit dem Komponentennamen vorbelegen
 
Man schaut einfach mal nach, wo/wie die Eigenschaft
Delphi-Quellcode:
Name
gesetzt wird und stößt dann auf
Delphi-Quellcode:
TControl.SetName
Delphi-Quellcode:
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;
BTW: Du kannst diese Methode in deiner Klasse auch überschreiben und dann ebenfalls deine Eigenschaft
Delphi-Quellcode:
Beschreibung
damit setzen ;)


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

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