Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Label korrekt zur Laufzeit erzeugen? (https://www.delphipraxis.net/173119-label-korrekt-zur-laufzeit-erzeugen.html)

AlexII 7. Feb 2013 21:10

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;

Bummi 7. Feb 2013 21:42

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.

AlexII 7. Feb 2013 21:49

AW: Label korrekt zur Laufzeit erzeugen?
 
Das ist doch dasselbe... hab's auch mit else versucht, und das bringt leider nichts.

Sir Rufo 7. Feb 2013 21:49

AW: Label korrekt zur Laufzeit erzeugen?
 
Zitat:

Zitat von Bummi (Beitrag 1202502)
Du hast keinen else Zweig für

Delphi-Quellcode:
if TLabel(FindComponent('test1')) = nil then
in dem MyLabel gesetzt würde.

Der
Delphi-Quellcode:
else
Zweig ist ja auch überflüssig ... allerdings ist
Delphi-Quellcode:
MyLabel
entweder
Delphi-Quellcode:
nil
oder sogar undefiniert, wenn schon ein Label besteht und dann soll darauf zugegriffen werden ;)

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;

Bummi 7. Feb 2013 21:54

AW: Label korrekt zur Laufzeit erzeugen?
 
@Sir Rufo wir meinen das gleiche, allerdings ist Deine Beschreibung sicher besser.

AlexII 7. Feb 2013 21:55

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?

Sir Rufo 7. Feb 2013 22:01

AW: Label korrekt zur Laufzeit erzeugen?
 
Zitat:

Zitat von AlexII (Beitrag 1202507)
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?

Ähhm, es so schreiben, dass diese Eigenschaften immer gesetzt werden, also nicht in den
Delphi-Quellcode:
if ... then
Teil?
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;

AlexII 7. Feb 2013 22:09

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:

Sir Rufo 7. Feb 2013 22:13

AW: Label korrekt zur Laufzeit erzeugen?
 
Zitat:

Zitat von AlexII (Beitrag 1202509)
Und wie und wo vernichte ich das Label wenn den Autor nicht mehr gibt? :gruebel:

Also ein wenig nachdenken ist ja manchmal nicht schlecht ... und etwas mehr Information, wie du erkennst, dass es da was nicht mehr geben soll ...

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;

AlexII 7. Feb 2013 22:18

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 18:53 Uhr.
Seite 1 von 2  1 2      

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