Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wozu haben Komponenten Namen? (https://www.delphipraxis.net/177254-wozu-haben-komponenten-namen.html)

Der schöne Günther 28. Okt 2013 10:33

Delphi-Version: XE2

Wozu haben Komponenten Namen?
 
So wie es aussieht, kann man problemlos
Delphi-Quellcode:
TComponent
-Instanzen erzeugen und verwenden, ohne ihnen über ihre
Delphi-Quellcode:
Name
-Property jemals etwas zugewiesen zu haben. Gibt man ihnen allerdings einen, muss er für ihren
Delphi-Quellcode:
Owner
eindeutig sein. Hat sie keinen, ist das auch egal.

Sehe ich das bis hierhin richtig?

Wenn ja, welchen Sinn hat der Name überhaupt? Ist das nur für die Delphi-Innereien (wenn er sich aus der DFM ein Formular zusammenbastelt) interessant?

DeddyH 28. Okt 2013 10:38

AW: Wozu haben Komponenten Namen?
 
Über den Namen kannst Du eine Komponente gezielt und ohne viel Gedöns direkt ansprechen.
Delphi-Quellcode:
lblName.Caption := 'Hanswurst';
ist nunmal deutlich komfortabler als
Delphi-Quellcode:
(Components[21] as TLabel).Caption := 'Hanswurst';
Zumal sich die Position im Components-Array ja auch noch verschieben kann, da wird es dann ganz eklig. Der Name ist eben eindeutig, da muss man sich um solche Dinge keinen Kopf machen.

Perlsau 28. Okt 2013 11:06

AW: Wozu haben Komponenten Namen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Namen dienen grundsätzlich der Identifizierbarkeit.

Vor allem aber machen Komponentenbezeichner einen Quellcode lesbarer und verständlicher, insbesondere wenn es sich um Fremdcode handelt. Natürlich brauchst du keine Namen, wenn du eine Komponente zusammen mit anderen Komponenten zu einem Objekt verbindest, das du in einer Objektliste Record verbindest und alles in einem Array verwaltest, wie ich das z.B. in einer SoftCash-Anwendung mache:
Delphi-Quellcode:
Type
  PArtikel = ^TArtikel;
  TArtikel = Record
               A_Index  : Integer; // Artikelindex in DB
               A_Num    : String;  // Artikelnummer
               A_Name   : String;  // Artikelname
               A_Einkauf : Currency; // Einkaufspreis
               A_Verkauf : Currency; // Verkaufspreis
               A_Icon   : TImage;  // Artikelbild klein
               A_Anzeige : Boolean; // Artikel wird als Shortcut angezeigt
               A_X      : Integer; // X-Position der linken oberen Ecke
               A_Y      : Integer; // Y-Position der linken oberen Ecke
             End;
Zum Auffinden bzw. Identifizieren des gesuchten Objekts benötige ich kein Namensproperty in der TImage-Komponente, das läuft über Artikelnummer oder Artikelindex, je nachdem. Das sieht dann z.B. so aus:

DeddyH 28. Okt 2013 11:08

AW: Wozu haben Komponenten Namen?
 
Ohne Namen dürfte es auch zur Designtime zumindest schwierig werden, einer Komponente eine andere per OI zuzuweisen (z.B. die FocusControl-Property von TLabel oder die Dataset/Datasource-Beziehungen).

Der schöne Günther 28. Okt 2013 11:14

AW: Wozu haben Komponenten Namen?
 
Zitat:

Zitat von DeddyH (Beitrag 1233401)
Über den Namen kannst Du eine Komponente gezielt und ohne viel Gedöns direkt ansprechen.
Delphi-Quellcode:
lblName.Caption := 'Hanswurst';

Ich verstehe nicht. Wenn ich bsp. nun einen Button erzeuge
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
   newButton := TButton.Create(self);
   newButton.Name := 'Testbutton';
   newButton.Parent := self;
end;
Dann ermöglicht mir das doch später nicht zu sagen
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
   testButton.Click();
end;
Die Referenz "Button1" die automatisch von der IDE zu meiner Klasse TForm1 hinzugefügt wird, hat doch (zumindest nach der Erstellung des Formulars) nichts mit dem tatsächlichen Namen der Komponente zu tun?

Natürlich möchte man zur Designzeit den Komponenten schöne Namen geben können und damit auch steuern, wie die Referenzen genannt werden. Aber wozu brauche ich das zur Laufzeit noch?

Perlsau 28. Okt 2013 11:19

AW: Wozu haben Komponenten Namen?
 
Sorry, aber ich verstehe deine Frage nicht. Was soll das sein: der "tatsächliche Name" einer Komponente? Sowas wie "die Essenz der Dinge"? Wenn dir das mit den Bezeichnern nicht gefällt, solltest du auf Assembler umsatteln, aber auch da gibt es Bezeichner, jedoch längst nicht so komfortabel wie in einer Visual-Design-Umgebung.

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. Daher solltest du auch nicht bei Button1 bleiben, sondern in der Tat "schönere" oder auch häßlichere, vor allem aber aussagekräftige Komponenten- und Variablenbezeichner wählen.

stahli 28. Okt 2013 11:33

AW: Wozu haben Komponenten Namen?
 
Über die Komponentennamen kann der Compiler erkennen, welche Formularcontrols Du im Quelltext oder Objektinspektor adressieren willst.

Auch nach dem Laden einer Anwendungen können die Bezüge wieder hergestellt werden (die eigentlichen Objekte liegen dann an einem anderen Speicherplatz und die Zuordnungen müssen neu aufgelöst werden).

Nachtrag: Die Komponentennamen ermöglichen die Beziehungen zwischen Quelltext und Formular. Zur Laufzeit sind sie nicht mehr erforderlich, ermöglichen aber weiterhin das Finden von Controls anhand deren Namen.

Meflin 28. Okt 2013 11:36

AW: Wozu haben Komponenten Namen?
 
Zitat:

Zitat von Perlsau (Beitrag 1233414)
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?

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.

Daniel 28. Okt 2013 11:37

AW: Wozu haben Komponenten Namen?
 
Die Frage ist, welchen Nutzen der Name einer Komponente zur Laufzeit hat.

Der Nutzen besteht genau dann, wenn man eine Komponente über ihren Namen auffinden möchte. Siehe hierzu auch "FindComponent()". Wenn man all das nicht tut, dann hält sich der Nutzen eines Komponenten-Name zur Laufzeit in Grenzen.

Union 28. Okt 2013 11:37

AW: Wozu haben Komponenten Namen?
 
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:
Delphi-Quellcode:
  object Label1: TLabel
hiermit verknüpft werden soll:
Delphi-Quellcode:
TForm1 = class(TForm)
  Label1: TLabel;


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:46 Uhr.
Seite 1 von 3  1 23      

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