Autor Beitrag
stifflersmom
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 194

XP /XP PRO/ SuSE div.
D1 - D7, BDS 2006
BeitragVerfasst: Mo 11.07.05 08:49 
Hallo,

ich bin gerade über eine sonderbare Eigenschaft von Delphi gestoßen,
die mir so noch nicht bekannt gewesen ist.
Also, jeder kennt das:
Man platziert in der IDE eine Komponente auf sein Formular und
vergibt dann einen Namen, den es schon gibt und prompt macht es
BING und ein Fenster poppt auf und teilt einem mit, daß der Name
bereits vergeben sei, so weit so gut.
(Ich denke mal das liegt daran, weil in der IDE alle Komponenten als
Owner die Form zugewiesen bekommen)

Allerdings kann man zur Laufzeit, Komponenten erstellen und einen Namen mehrfach vergeben.

Also in der IDE malt man zwei Panels auf sein Formular, und packt folgenden Schnippsel auf
einen Button

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
MySubPanel := TPanel.Create(Panel1);
With MySubpanel do
 Begin
  Parent := Panel1;  //oder war's owner?
  Left := 12;
  Top := 12;
  Width := 50;
  Name := 'doppelname';
 End;

MySubPanel := TPanel.Create(Panel2);
With MySubpanel do
 Begin
  Parent := Panel2;  //oder war's owner?
  Left := 12;
  Top := 12;
  Width := 50;
  Name := 'doppelname';
 End;

Und zack, ich habe zweimal den Namen vergeben.

Wem ist das nicht neu und kann mir was dazu sagen?

Moin
maxk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: Mo 11.07.05 09:12 
Die resultierenden Komponenten kannst du jedoch auch nicht mit ihrem Namen ansprechen. Wenn du in der IDE eine Komponente erstellt, wird eine Objekt mit diesem Name vereinbart (siehe Quellcode). Ein (Variablen-)Name ist jedoch global nur einmal belegbar. Wie du deine zur Entwicklungszeit erstellten Komponenten nennst oder ob du ihnen überhaupt Namen gibst, bleibt dir überlassen ;)


Gruß,
maxk

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
Stefan.Buchholtz
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 612

WIN 2000, WIN XP, Mac OS X
D7 Enterprise, XCode, Eclipse, Ruby On Rails
BeitragVerfasst: Mo 11.07.05 09:37 
Die Einschränkung ist, dass keine zwei Komponenten mit dem gleichen Owner den gleichen Namen haben dürfen. Folgender Code würde also zu einem Laufzeitfehler führen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
MySubPanel := TPanel.Create(Panel1);  
With MySubpanel do  
 Begin  
  Parent := Panel1; 
  Left := 12;  
  Top := 12;  
  Width := 50;  
  Name := 'doppelname';  
 End;  

 
MySubPanel := TPanel.Create(Panel1);  
With MySubpanel do  
 Begin  
  Parent := Panel2; 
  Left := 12;  
  Top := 12;  
  Width := 50;  
  Name := 'doppelname';  
 End;


Wenn du dich selbst draum kümmerst, deine zur Laufzeit erzeugten Komponenten freizugeben, kannst du auch einfach nil als Owner übergeben.

Stefan