Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Laufzeit Label wird nicht angezeigt (https://www.delphipraxis.net/73761-laufzeit-label-wird-nicht-angezeigt.html)

Balu der Bär 23. Jul 2006 18:28

Re: Laufzeit Label wird nicht angezeigt
 
Bei mir gehts auch ohne Probleme mit dem Quelltext aus dem ersten Beitrag.

Btw:
Zitat:

Der Label wird aber anscheinent ertellt, da wenn ich ein 2. mal auf den
Button klicke, wird angezigt das der Name Test schon vorhanden ist.
Irgendwas stimmt doch da nicht, "Test" ist doch die Caption, normalerweise müsste eine Meldung kommen das es myLabel1 bereits gibt.

mkinzler 23. Jul 2006 18:29

Re: Laufzeit Label wird nicht angezeigt
 
Poste mal die Unit (pas/dfm)

Hawkeye219 23. Jul 2006 18:29

Re: Laufzeit Label wird nicht angezeigt
 
Hallo Alexander,

so geht es:

Delphi-Quellcode:
var myLabel: TLabel;
begin
  myLabel := TLabel.Create(self); // self für die automatische Freigabe
//  myLabel.Name := 'myLabel1';   // kein Name -> vermeidet Fehlermeldung
  myLabel.Caption := 'Test';
  myLabel.Left := 100;
  myLabel.Top := 100;
  myLabel.Parent := MainFrm;
  myLabel.Visible := true;
end;
Wie möchtest du die erstellten Labels eigentlich ansprechen?

Gruß Hawkeye

Zacherl 23. Jul 2006 18:32

Re: Laufzeit Label wird nicht angezeigt
 
Zitat:

kein Name -> vermeidet Fehlermeldung
Und verhindert zudem, dass die Komponente z.B. mit FindComponent über ihren Namen angesprochen werdem kann. Oder wird dann automatisch Label1, Label2, etc verwendet?

Hawkeye219 23. Jul 2006 18:40

Re: Laufzeit Label wird nicht angezeigt
 
Zitat:

Zitat von Florian Bernd
Und verhindert zudem, dass die Komponente z.B. mit FindComponent über ihren Namen angesprochen werdem kann.

Es ist aber nicht möglich, mehreren Controls eines Owners denselben Namen zu geben.

Zitat:

Oder wird dann automatisch Label1, Label2, etc verwendet?
Die VCL vergibt keine automatischen Namen, das ist Aufgabe des Programmierers, wenn er zur Laufzeit Controls erstellt. In Alexanders Fall würde ich die Referenzen auf die Labels allerdings in einem (dynamischen) Array oder eine TList sammeln.

Gruß Hawkeye

SirThornberry 23. Jul 2006 18:42

Re: Laufzeit Label wird nicht angezeigt
 
@citrybreaker: Ohne neue Anhaltspunkte können wir nur raten. Wenn du wirklich nur ein leeres Form mit einem Button hast könntest du das Projekt doch einfach mal posten.

Khabarakh 23. Jul 2006 18:56

Re: Laufzeit Label wird nicht angezeigt
 
Zitat:

Zitat von Florian Bernd
Zitat:

kein Name -> vermeidet Fehlermeldung
Und verhindert zudem, dass die Komponente z.B. mit FindComponent über ihren Namen angesprochen werdem kann.

Ich hoffe, das ist positiv gemeint :gruebel: .

Delphi-Quellcode:
myLabel := TLabel.Create(self);
  [...]
  myLabel.Parent := MainFrm;
Diese Zeilen machen keinen Sinn (und könnten bei mehreren Instanzen einer Form auch die Fehlerursache sein):
Soll MainForm = Self sein, solltest du auch überall Self verwenden.
Wenn das nicht der Fall ist, solltest du auch als Owner den Parent (also MainForm) setzen. Ich würde jedenfalls keiner Form das Entfernen von Komponenten auf einem anderen Formular überlassen ;) .

Meflin 23. Jul 2006 19:21

Re: Laufzeit Label wird nicht angezeigt
 
Zitat:

Zitat von Khabarakh
Ich hoffe, das ist positiv gemeint :gruebel: .

Was soll daran positiv sein :gruebel:


3_of_8 23. Jul 2006 19:32

Re: Laufzeit Label wird nicht angezeigt
 
Ich denke mal, Names sollte man verwenden.

Auch wenn FindComponent keine sonderlich saubere Methode dafür ist, eine Komponente zu finden, sind Names eine nützliche Sache.

Khabarakh 23. Jul 2006 19:45

Re: Laufzeit Label wird nicht angezeigt
 
Zitat:

Zitat von Meflin
Zitat:

Zitat von Khabarakh
Ich hoffe, das ist positiv gemeint :gruebel: .

Was soll daran positiv sein :gruebel:

Die Tatsache, dass FindComponent für dynamisch erzeugte Komponenten der absolute Schmarrn ist :gruebel: ?
Was werde ich mit eine Murmel machen, wenn ich sie wiederfinden will? Werde ich sie in ein Register legen, in dem ich sie durch einen eindeutigen Index mit einem Aufwand von O(1) wiederfinden kann, oder werde ich sie mit einem Namen bekritzeln und sie in einen großen, mit anderen Murmeln gefüllten Topf werfen?
Selbst für einen Anfänger wäre der Topf nicht ratsam, denn wann man weiß, wie man eine Komponente erzeugt, wird man auch wissen, wie man sie in ein Array oder eine Liste einfügt. Und bei nur einer dynamischen Komponente wird es noch leichter, da reicht schon ein kleines Feld in der Form-Klasse.

Für per Designer erstellte Komponenten mag FindComponent noch annehmbar sein, auch wenn man dann sehr wahrscheinlich schon beim Layout ein oder zwei Schnitzer eingebaut hat. Aber wenn schon, dann bitte wenigstens sofort die Komponenten in ein Array kopieren ;) .
Zitat:

Zitat von 3_of_8
Ich denke mal, Names sollte man verwenden.

Jupp, zur Designtime ;) . Dazu sind sie da.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:58 Uhr.
Seite 2 von 3     12 3      

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