AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wozu haben Komponenten Namen?

Ein Thema von Der schöne Günther · begonnen am 28. Okt 2013 · letzter Beitrag vom 28. Okt 2013
Antwort Antwort
Seite 2 von 3     12 3      
Popov
(Gast)

n/a Beiträge
 
#11

Aw: Schön langsam mit Gefühl und über neuen Namen

  Alt 28. Okt 2013, 12:41
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;
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#12

AW: Wozu haben Komponenten Namen?

  Alt 28. Okt 2013, 12:45
Zur Laufzeit brauchst du nichts davon, denn zur Laufzeit ist bereits alles verwurstelt, was man in Fachkreise auch als compiliert bezeichnet. Die Namensgebung dient der komfortableren Entwicklung.
Schonmal von Metaprogramming und Reflection gehört?
Nein. Muß man das als einfacher Delphi-Entwickler kennen?

Zur Frage: Es geht Günther doch offensichtlich einzig um die Property namens "Name" die alle Komponenten haben, die aber keinen offensichtlichen Sinn erfüllt. So ähnlich wie die "Tag"-Property. Es geht nicht um die Namen der Variablen, in denen Referenzen auf Instanzen dieser Komponenten gespeichert werden. Ich kann da keine endgültige Antwort geben, aber ich vermute, dass es tatsächlich dazu dient, Komponenten zur Laufzeit identifizieren zu können.
Aha, er möchte also wissen, wozu das Property Name auch zur Laufzeit noch verfügbar ist. Wieso sollte es das nicht sein? Die Frage lautete zwar anders, nämlich "wozu haben Komponenten Namen", aber wenn du nun irgendwie erfahren hast, daß er genau das meint, dann würde ich mal sagen: weil die Entwickler bei Borland, Codegear und Emba das so geschrieben haben, nicht wahr? Warum hat ein Graf noch seinen Titel, wenn es doch offiziell keine derartigen Titel mehr gibt? Tja, da ist guter Rat teuer ...

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?
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#13

AW: Wozu haben Komponenten Namen?

  Alt 28. Okt 2013, 13:00
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.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.431 Beiträge
 
Delphi 12 Athens
 
#14

AW: Wozu haben Komponenten Namen?

  Alt 28. Okt 2013, 13:17
Ich glaube hier findet ständig eine Verwechselung statt zwischen den Komponenten-Namen und den Variablen-Namen. Der Komponenten-Name dient ausschließlich der Zuordnung von gestreamten Resourcen zu den korrekten Variablen beim Laden der Formulare.

Im dfm wird dann vom Reader erkannt, dass:
  object Label1: TLabel hiermit verknüpft werden soll:
Delphi-Quellcode:
TForm1 = class(TForm)
  Label1: TLabel;
Das hat eigentlich gar nichts mit dem Streaming zu tun. Wenn du eine Klasse von TComponent ableitest und darin ein Feld mit einem ebenfalls von TComponent abgeleiteten Typ mit der passenden Sichtbarkeit (published) deklarierst, dann wird dieses Feld bei einem Aufruf von InsertComponent mit einer Instanz als Parameter, deren Name dem Feldnamen entspricht, genau auf diese Instanz gesetzt. Deshalb dürfen die Komponentennamen der Child-Komponenten auch nur eindeutig innerhalb der Parent-Komponente oder leer sein (weil ein Leerstring ja kein Variablenname ein kann).

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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#15

AW: Wozu haben Komponenten Namen?

  Alt 28. Okt 2013, 13:21
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.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (28. Okt 2013 um 13:28 Uhr)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#16

AW: Wozu haben Komponenten Namen?

  Alt 28. Okt 2013, 13:22
Ich glaube er meint das:
Delphi-Quellcode:
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;
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.

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.

Geändert von Popov (28. Okt 2013 um 13:25 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.617 Beiträge
 
Delphi 12 Athens
 
#17

AW: Wozu haben Komponenten Namen?

  Alt 28. Okt 2013, 13:26
Zur Laufzeit erstellte Komponenten werden ja auch nicht in der *.dfm hinterlegt, das ist ein entscheidender Unterschied.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.155 Beiträge
 
Delphi 10 Seattle Enterprise
 
#18

AW: Wozu haben Komponenten Namen?

  Alt 28. Okt 2013, 13:36
Fast artete es in eine echte Wildwest-Kneipenschlägerei aus, aber jetzt ist doch gut erklärt. Die Parallele zur Tag -Property fand ich sehr passend

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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.617 Beiträge
 
Delphi 12 Athens
 
#19

AW: Wozu haben Komponenten Namen?

  Alt 28. Okt 2013, 13:41
Das hättest Du vielleicht dazu schreiben sollen, dann hätte ein einfaches "Nein" als Antwort genügt
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.155 Beiträge
 
Delphi 10 Seattle Enterprise
 
#20

AW: Wozu haben Komponenten Namen?

  Alt 28. Okt 2013, 13:55
"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

Das nächste mal versuche ich besser drauf zu achten.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:40 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