Delphi-PRAXiS

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)

citybreaker 23. Jul 2006 18:07


Laufzeit Label wird nicht angezeigt
 
Hallo!

Aus irgend einem Grund wird mein Label den ich zur Laufzeit nicht angezeigt.
Leider kann ich mir nicht erklären warum.

Delphi-Quellcode:
var myLabel: TLabel;
begin
  myLabel := TLabel.Create(self);
  myLabel.Name := 'myLabel1';
  myLabel.Caption := 'Test';
  myLabel.Left := 100;
  myLabel.Top := 100;
  myLabel.Parent := MainFrm;
  myLabel.Visible := true;
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.

Zacherl 23. Jul 2006 18:09

Re: Laufzeit Label wird nicht angezeigt
 
Geht es vielleicht mit
Delphi-Quellcode:
TLabel.Create(nil);
Florian

mkinzler 23. Jul 2006 18:13

Re: Laufzeit Label wird nicht angezeigt
 
Wo wird dieser Code aufgerufen i einer Methode von MainFrm? sonst könntest du es so versuchen:

Delphi-Quellcode:
myLabel := TLabel.Create( MainFrm);

Dax 23. Jul 2006 18:16

Re: Laufzeit Label wird nicht angezeigt
 
Setz mal AutoSize auf True, oder setz die Größe des Labels manuell. Ich vermute, das Label hat die Größe (0,0).

Meflin 23. Jul 2006 18:17

Re: Laufzeit Label wird nicht angezeigt
 
evtl. braucht man auch ein Repaint der Form... einen Versuch ists wert ;)
Und bist du ganz sicher dass an der Position nichts anderes ist was das Label verdecken könnte?


Christian Seehase 23. Jul 2006 18:18

Re: Laufzeit Label wird nicht angezeigt
 
Moin Alexander,

kann es sein, dass an der Stelle schon ein anderes Control liegt, und dadurch das Label verdeckt wird?
Da TLabel ein GraphicControl ist, und kein WinControl wird es von letzterem verdeckt.

@Florian:
Der Owner hat damit nichts zu tun.
Dieser bestimmt nur, wer für das spätere Zerstören der Komponenten zuständig ist.
Wird hier nil angegeben, muss man sich selber um die Freigabe kümmern, ansonsten wird es automatisch bei der Freigabe der als Owner angegeben Komponente zerstört.

Wo die Komponente angezeigt wird, bestimmt immer Parent.

citybreaker 23. Jul 2006 18:20

Re: Laufzeit Label wird nicht angezeigt
 
@Florian Nein, klappt leider auch nicht. Jetzt kommt nicht mal mehr der Fehler. ;)
@mkinzler Geht leider auch nicht.
@Christian Seehase Nein, dort ist keine andere Komponente.

mkinzler 23. Jul 2006 18:22

Re: Laufzeit Label wird nicht angezeigt
 
Zitat:

@Christian Seehase Nein, dort ist keine andere Komponente.
Auch kein Panel o.ä.?

citybreaker 23. Jul 2006 18:24

Re: Laufzeit Label wird nicht angezeigt
 
Nein, die Form ist komplett leer, ausser ein Button mit dem man das Label erstellt.
Und der hat die Position: Left = 10 // Top = 10

Dax 23. Jul 2006 18:27

Re: Laufzeit Label wird nicht angezeigt
 
Bei mir gehts ohne Probleme, muss nicht mal die Größe des Labels verändern ;)

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.

citybreaker 23. Jul 2006 20:07

Re: Laufzeit Label wird nicht angezeigt
 
Irgendwie klappts wieder, mit vohin der Pc abgestürzt und hab ihn neugestartet.
Kein Plan, ob das jetzt irgend nen Fehler von Delphi war. Aber es klappt nun die
Labels sind jetzt sichtbar wenn ich sie erzeuge. oO

citybreaker 24. Jul 2006 09:49

Re: Laufzeit Label wird nicht angezeigt
 
Liste der Anhänge anzeigen (Anzahl: 1)
So habe das Projekt mal angehangen hoffe es findet sich jemand zurecht, indem Code wir war.
Ist inzwischen schon was mehr geworden. Um das Prohjekt zu öffnen braucht man die TBX Toolbar
geschichte.

Die Labels werden bei OnMouse Down der MainFrm erzeugt. Der erzeugen Code ist in der funktion.pas

--- Edit ---
Anhang vergessen

mkinzler 24. Jul 2006 10:14

Re: Laufzeit Label wird nicht angezeigt
 
Ich würde die dynamsich erzeugten Labels in einem Array verwalten. das Auslagern der dyn. Erzeugung in eigene Funktion ist sehr unubersichtlich, auch die mehrfache Anlage verschiedener Variablen mit dem selben Namen und die Verwendung von gloablen Zählvariablen wirkt etwas verwirrend.

Delphi-Quellcode:
procedure TMainFrm.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
//var MyLabel: TMyLabel; //Überflüssig
begin
  if ListBox1.ItemIndex >= 1 then
  begin
    CreateModel(MainFrm,MouseX,MouseY,
                ListBox1.Items.Strings[ListBox1.ItemIndex]);
    MainFrm.Update();
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:09 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