![]() |
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:
|
AW: Label korrekt zur Laufzeit erzeugen?
Zitat:
BTW: Wenn du die Caption von einem Label mit '' befüllst, dann sieht keine S** ob da ein Label ist oder nicht. Warum willst du also so eine Erzeugungs- und Vernichtungsorgie starten? Meinetwegen setze Visible vom Label auf true oder false ... so ist das Murks |
AW: Label korrekt zur Laufzeit erzeugen?
Weil anstelle dieses Labels ein anderes Label erstellt werden soll, mit anderen Infos.
|
AW: Label korrekt zur Laufzeit erzeugen?
Zitat:
erst kommt
Delphi-Quellcode:
und dann
// Label suchen
MyLabel := TLabel( FindComponent( 'test1' ) );
Delphi-Quellcode:
Bei dir sieht es wohl noch so aus
// Gibt es einen Autor?
if tb.FieldAsString( tb.FieldIndex['aname'] ) <> '' then begin ... end else // kein Autor, kein Label MyLabel.Free;
Delphi-Quellcode:
gelle ;)
// Gibt es einen Autor?
if tb.FieldAsString( tb.FieldIndex['aname'] ) <> '' then begin // Label suchen MyLabel := TLabel( FindComponent( 'test1' ) ); ... end else // kein Autor, kein Label MyLabel.Free; |
AW: Label korrekt zur Laufzeit erzeugen?
Zitat:
|
AW: Label korrekt zur Laufzeit erzeugen?
Thx... läuft alles!
|
AW: Label korrekt zur Laufzeit erzeugen?
Ich würde ja ein Label
Delphi-Quellcode:
fest anlegen und dann sieht der Code wie folgt aus:
Test1
Delphi-Quellcode:
// Gibt es einen Autor?
if tb.FieldAsString( tb.FieldIndex['aname'] ) <> '' then Test1.Caption := tb.FieldAsString( tb.FieldIndex['aname'] ) else Test1.Caption := 'Some other information with a DRY KISS'; |
AW: Label korrekt zur Laufzeit erzeugen?
Bzw. sich gleich darauf besinnen, das das Label eine bestimmte Information anzeigen soll. Nämlich den Namen des Autors, wenn der Name angegeben ist, bzw. etwas anderes, wenn der Autor nicht angegeben ist:
Delphi-Quellcode:
Alternativ (und vermutlich noch besser) wäre es, dem Dataset ein berechnetes Feld 'AuthorInfo' zu spendieren. Dann ist die Logik dort, wo sie vermutlich hingehört und man kann diese info überall anzeigen.
MyLabel.Caption := AuthorInfo(Tb);
... Function AuthorInfo (aDataSet : TDataset); Begin Result := aDataSet['aname']; if Result='' then Result := 'Something else'; End; |
AW: Label korrekt zur Laufzeit erzeugen?
Zitat:
|
AW: Label korrekt zur Laufzeit erzeugen?
Syntaktischer Natur!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:11 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