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 1 von 3  1 23      
Der schöne Günther

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

Wozu haben Komponenten Namen?

  Alt 28. Okt 2013, 10:33
Delphi-Version: XE2
So wie es aussieht, kann man problemlos TComponent -Instanzen erzeugen und verwenden, ohne ihnen über ihre Name -Property jemals etwas zugewiesen zu haben. Gibt man ihnen allerdings einen, muss er für ihren 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?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Wozu haben Komponenten Namen?

  Alt 28. Okt 2013, 10:38
Über den Namen kannst Du eine Komponente gezielt und ohne viel Gedöns direkt ansprechen.
lblName.Caption := 'Hanswurst'; ist nunmal deutlich komfortabler als
(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.
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
Perlsau
(Gast)

n/a Beiträge
 
#3

AW: Wozu haben Komponenten Namen?

  Alt 28. Okt 2013, 11:06
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:
Miniaturansicht angehängter Grafiken
softcash.jpg  

Geändert von Perlsau (28. Okt 2013 um 11:14 Uhr) Grund: Nachtrag: keine Objektliste, sondern Array of Record
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Wozu haben Komponenten Namen?

  Alt 28. Okt 2013, 11:08
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).
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.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Wozu haben Komponenten Namen?

  Alt 28. Okt 2013, 11:14
Über den Namen kannst Du eine Komponente gezielt und ohne viel Gedöns direkt ansprechen.
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?
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#6

AW: Wozu haben Komponenten Namen?

  Alt 28. Okt 2013, 11:19
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.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.337 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Wozu haben Komponenten Namen?

  Alt 28. Okt 2013, 11:33
Ü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.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli (28. Okt 2013 um 11:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#8

AW: Wozu haben Komponenten Namen?

  Alt 28. Okt 2013, 11:36
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.
Leo S.
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

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

AW: Wozu haben Komponenten Namen?

  Alt 28. Okt 2013, 11:37
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.
Daniel R. Wolf
mit Grüßen aus Hamburg

Geändert von Daniel (28. Okt 2013 um 11:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#10

AW: Wozu haben Komponenten Namen?

  Alt 28. Okt 2013, 11:37
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;
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      

 

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 22:17 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