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:
Der Label wird aber anscheinent ertellt, da wenn ich ein 2. mal auf den
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; Button klicke, wird angezigt das der Name Test schon vorhanden ist. |
Re: Laufzeit Label wird nicht angezeigt
Geht es vielleicht mit
Delphi-Quellcode:
Florian
TLabel.Create(nil);
|
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);
|
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).
|
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? |
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. |
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. |
Re: Laufzeit Label wird nicht angezeigt
Zitat:
|
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 |
Re: Laufzeit Label wird nicht angezeigt
Bei mir gehts ohne Probleme, muss nicht mal die Größe des Labels verändern ;)
|
Re: Laufzeit Label wird nicht angezeigt
Bei mir gehts auch ohne Probleme mit dem Quelltext aus dem ersten Beitrag.
Btw: Zitat:
|
Re: Laufzeit Label wird nicht angezeigt
Poste mal die Unit (pas/dfm)
|
Re: Laufzeit Label wird nicht angezeigt
Hallo Alexander,
so geht es:
Delphi-Quellcode:
Wie möchtest du die erstellten Labels eigentlich ansprechen?
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; Gruß Hawkeye |
Re: Laufzeit Label wird nicht angezeigt
Zitat:
|
Re: Laufzeit Label wird nicht angezeigt
Zitat:
Zitat:
Gruß Hawkeye |
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.
|
Re: Laufzeit Label wird nicht angezeigt
Zitat:
Delphi-Quellcode:
Diese Zeilen machen keinen Sinn (und könnten bei mehreren Instanzen einer Form auch die Fehlerursache sein):
myLabel := TLabel.Create(self);
[...] myLabel.Parent := MainFrm; 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 ;) . |
Re: Laufzeit Label wird nicht angezeigt
Zitat:
|
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. |
Re: Laufzeit Label wird nicht angezeigt
Zitat:
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:
|
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 |
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 |
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