![]() |
Aw: Schön langsam mit Gefühl und über neuen Namen
Delphi-Quellcode:
type
TForm1 = class(TForm) //... private { Private-Deklarationen } procedure NewButonOnClick(Sender: TObject); public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.NewButonOnClick(Sender: TObject); begin ShowMessage('Schön langsam mit Gefühl und über neuen Namen'); end; procedure TForm1.Button1Click(Sender: TObject); var newButton: TButton; begin newButton := TButton.Create(self); newButton.Name := 'Testbutton'; newButton.Parent := self; newButton.OnClick := NewButonOnClick; end; procedure TForm1.Button2Click(Sender: TObject); var newButton: TButton; begin newButton := TButton(FindComponent('Testbutton')); newButton.OnClick(nil); end; |
AW: Wozu haben Komponenten Namen?
Zitat:
Zitat:
Mir ist noch immer nicht klar, worauf die Frage eigentlich abzielt, sollte es sich nicht einfach um eine nach Gutdünken konstruierte Fragestellung handeln. Vielleicht auf die Abschaffung dieses Properties? |
AW: Wozu haben Komponenten Namen?
Frank, es ist wieder eine wahre Freude, von Dir lesen zu dürfen. Und dass Du die Frage nicht erkannt hast, wurde offensichtlich. Das ist nicht schlimm - geht mir selbst auch oft genug so. In diesem Fall rate ich jedoch zur Zurückhaltung - manchmal kann man einfach die anderen erstmal machen lassen.
|
AW: Wozu haben Komponenten Namen?
Zitat:
Insofern würde das obige Beispiel:
Delphi-Quellcode:
newButton := TButton.Create(self);
newButton.Name := 'Testbutton'; newButton.Parent := self; ... testButton.Click(); durchaus funktionieren, wenn testButton entsprechend als Feld im Form deklariert ist. |
AW: Wozu haben Komponenten Namen?
Um es noch etwas zu verdeutlichen:
Wenn du eine Komponente zur Designzeit plazierst, generiert die IDE dafür eine Feldvariable im published Teil deines Forms (Frames, Datamodules, ...). Diese wird so genannt, wie du im ObjektInspektor in der Eigenschaft Name einstellst. Somit kannst du deiner Komponente einen vernünftigen Namen verpassen (die IDE sorgt dafür, dass die Feldvariable auch passend umbenannt wird), um dich nicht hinterher im Sourcecode zu fragen, wofür nochmal Button24 oder TListbox17 waren. Fun fact: Wenn du niemals auf deinen Button im Sourcecode zugreifst, kannst du sogar die Feldvariable entfernen (nicht empfohlen) und dein Programm funktioniert noch - mit der kleinen Einschränkung, dass diese Klasse mit RegisterClass registriert werden muss, da sonst der dfm Streaming Mechanismus fehlschlagen würde, weil in diesem Fall aus dem Klassennamen, die in der dfm steht, eine Instanz der entsprechenden Klasse erzeugen muss. |
AW: Wozu haben Komponenten Namen?
Ich glaube er meint das:
Delphi-Quellcode:
Das scheint zu gehen, ist mir bisher noch nicht aufgefallen, denn zur Entwicklungszeit meckert die IDE, bei zwei Komponenten ohne Namen. Und wenn man im Beispiel oben die Buttons einzig mit einer Prozedur (z. B. OnClick) direkt verknüpft, brauch man anscheinend auch keine Namen.
var
newButton: TButton; begin newButton := TButton.Create(self); newButton.Left := 0; newButton.Caption := '1'; newButton.Parent := self; newButton.OnClick := NewButonOnClick; newButton := TButton.Create(self); newButton.Left := 100; newButton.Caption := '2'; newButton.Parent := self; newButton.OnClick := NewButonOnClick; end; Problematisch wird es nur wenn man später - wie im ersten Beispiel - auf die Komponente zugreifen will. Will man es nicht, scheint es kein Problem zu sein. |
AW: Wozu haben Komponenten Namen?
Zur Laufzeit erstellte Komponenten werden ja auch nicht in der *.dfm hinterlegt, das ist ein entscheidender Unterschied.
|
AW: Wozu haben Komponenten Namen?
Fast artete es in eine echte Wildwest-Kneipenschlägerei aus, aber jetzt ist doch gut erklärt. Die Parallele zur
Delphi-Quellcode:
-Property fand ich sehr passend ;-)
Tag
Meine Intention war nur zu sehen, ob ich irgendeinen tollen Mehrwert verpasse, wenn ich einer zur Laufzeit erstellten Komponente (ohne andere Komponente als Owner) keinen Namen gebe oder ich mir gar Sorgen machen muss, dass mir irgendwann alles um die Ohren fliegt. |
AW: Wozu haben Komponenten Namen?
Das hättest Du vielleicht dazu schreiben sollen, dann hätte ein einfaches "Nein" als Antwort genügt :lol:
|
AW: Wozu haben Komponenten Namen?
"Instanzen ... erzeugen" hatte für mich schon so einen beschwingenden, schöpferischen und aktiven Klang, da dachte ich es sei klar, dass es um die Laufzeit geht :oops:
Das nächste mal versuche ich besser drauf zu achten. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:55 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