![]() |
Delphi-Version: 2010
Label korrekt zur Laufzeit erzeugen?
Hallo,
hab hier ein kleines Problem. Wenn der Autor in der DB vorhanden ist und die Labelkomponente noch nicht existiert - wird diese erzeugt und der Name des Autors angezeigt. Klicke ich dann ein anderes Datensatz an, wo auch der Name vorhanden ist, wird dieser nicht mehr ausgegeben, der vorheriger Name des Autors bleibt für immer stehen. Mediatitle wird hingegen immer entsprechen angezeigt, also richtig. Was mache ich falsch? Danke!
Delphi-Quellcode:
DetailsTitleLabel.Caption := tb.FieldAsString(tb.FieldIndex['mediatitle']);
if tb.FieldAsString(tb.FieldIndex['aname']) <> '' then begin if TLabel(FindComponent('test1')) = nil then begin MyLabel := TLabel.Create(Self); MyLabel.Parent := MediaGroupBox; MyLabel.Name := 'test1'; MyLabel.WordWrap := True; MyLabel.Caption := tb.FieldAsString(tb.FieldIndex['aname']); MyLabel.Left := 8; MyLabel.Top := 178; MyLabel.Font.Style:=[fsItalic]; MyLabel.Width := MediaGroupBox.Width - 15; end; MyLabel.Caption := tb.FieldAsString(tb.FieldIndex['aname']); end; |
AW: Label korrekt zur Laufzeit erzeugen?
Du hast keinen else Zweig für
if TLabel(FindComponent('test1')) = nil then in dem MyLabel gesetzt würde. |
AW: Label korrekt zur Laufzeit erzeugen?
Das ist doch dasselbe... hab's auch mit else versucht, und das bringt leider nichts.
|
AW: Label korrekt zur Laufzeit erzeugen?
Zitat:
Delphi-Quellcode:
Zweig ist ja auch überflüssig ... allerdings ist
else
Delphi-Quellcode:
entweder
MyLabel
Delphi-Quellcode:
oder sogar undefiniert, wenn schon ein Label besteht und dann soll darauf zugegriffen werden ;)
nil
Besser so:
Delphi-Quellcode:
DetailsTitleLabel.Caption := tb.FieldAsString( tb.FieldIndex['mediatitle'] );
if tb.FieldAsString( tb.FieldIndex['aname'] ) <> '' then begin // Label suchen MyLabel := TLabel( FindComponent( 'test1' ) ); // Wenn kein Label gefunden wurde if MyLabel = nil then begin // dann müssen wir uns einen anlegen MyLabel := TLabel.Create( Self ); MyLabel.Parent := MediaGroupBox; MyLabel.Name := 'test1'; MyLabel.WordWrap := True; // MyLabel.Caption := tb.FieldAsString( tb.FieldIndex['aname'] ); MyLabel.Left := 8; MyLabel.Top := 178; MyLabel.Font.Style:=[fsItalic]; MyLabel.Width := MediaGroupBox.Width - 15; end; MyLabel.Caption := tb.FieldAsString( tb.FieldIndex['aname'] ); end; |
AW: Label korrekt zur Laufzeit erzeugen?
@Sir Rufo wir meinen das gleiche, allerdings ist Deine Beschreibung sicher besser.
|
AW: Label korrekt zur Laufzeit erzeugen?
Thx! Es funkt, nur die Label Eingenschaften sind mal so mal so, also nicht immer die gleichen. Wie kann ich die Eigenschaften in beiden Fällen gleich setzen?
|
AW: Label korrekt zur Laufzeit erzeugen?
Zitat:
Delphi-Quellcode:
Teil?
if ... then
Delphi-Quellcode:
DetailsTitleLabel.Caption := tb.FieldAsString( tb.FieldIndex['mediatitle'] );
if tb.FieldAsString( tb.FieldIndex['aname'] ) <> '' then begin // Label suchen MyLabel := TLabel( FindComponent( 'test1' ) ); // Wenn kein Label gefunden wurde if MyLabel = nil then begin // dann müssen wir uns einen anlegen MyLabel := TLabel.Create( Self ); MyLabel.Name := 'test1'; end; // und ab hier haben wir gesichert eine MyLabel Instanz MyLabel.Parent := MediaGroupBox; MyLabel.WordWrap := True; MyLabel.Left := 8; MyLabel.Top := 178; MyLabel.Font.Style:=[fsItalic]; MyLabel.Width := MediaGroupBox.Width - 15; MyLabel.Caption := tb.FieldAsString( tb.FieldIndex['aname'] ); end; |
AW: Label korrekt zur Laufzeit erzeugen?
Und wie und wo vernichte ich das Label wenn den Autor nicht mehr gibt?
Mit MyLabel.Free; verschwindet mein ganzes Programm. :gruebel: |
AW: Label korrekt zur Laufzeit erzeugen?
Zitat:
aber ich tippe mal darauf
Delphi-Quellcode:
DetailsTitleLabel.Caption := tb.FieldAsString( tb.FieldIndex['mediatitle'] );
// Label suchen MyLabel := TLabel( FindComponent( 'test1' ) ); // Gibt es einen Autor? if tb.FieldAsString( tb.FieldIndex['aname'] ) <> '' then begin // Wenn kein Label gefunden wurde if MyLabel = nil then begin // dann müssen wir uns einen anlegen MyLabel := TLabel.Create( Self ); MyLabel.Name := 'test1'; end; // und ab hier haben wir gesichert eine MyLabel Instanz MyLabel.Parent := MediaGroupBox; MyLabel.WordWrap := True; MyLabel.Left := 8; MyLabel.Top := 178; MyLabel.Font.Style:=[fsItalic]; MyLabel.Width := MediaGroupBox.Width - 15; MyLabel.Caption := tb.FieldAsString( tb.FieldIndex['aname'] ); end else // kein Autor, kein Label MyLabel.Free; |
AW: Label korrekt zur Laufzeit erzeugen?
Hm... hab ich so gemacht, und wenn es keinen Autor gibt wird das ganze Programm unsichtbar, es verschwindet irgendwohin, muss es dann über Task-Manager als Prozess beenden. :gruebel:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:49 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