AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

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

Registriert seit: 6. Mär 2013
6.196 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.656 Beiträge
 
Delphi 12 Athens
 
#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
Der schöne Günther

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

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
 
#4

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.352 Beiträge
 
Delphi 11 Alexandria
 
#5

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 Union
Union

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

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
Benutzerbild von Meflin
Meflin

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

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
Perlsau
(Gast)

n/a Beiträge
 
#8

AW: Wozu haben Komponenten Namen?

  Alt 28. Okt 2013, 11: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
 
#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
Popov
(Gast)

n/a Beiträge
 
#10

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

  Alt 28. Okt 2013, 11: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
Antwort Antwort
Seite 1 von 2  1 2   

 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:57 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