AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Label korrekt zur Laufzeit erzeugen?

Ein Thema von AlexII · begonnen am 7. Feb 2013 · letzter Beitrag vom 8. Feb 2013
Antwort Antwort
Seite 1 von 2  1 2      
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#1

Label korrekt zur Laufzeit erzeugen?

  Alt 7. Feb 2013, 22:10
Delphi-Version: 2010
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;
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!

Geändert von AlexII ( 7. Feb 2013 um 22:12 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: Label korrekt zur Laufzeit erzeugen?

  Alt 7. Feb 2013, 22:42
Du hast keinen else Zweig für

if TLabel(FindComponent('test1')) = nil then

in dem MyLabel gesetzt würde.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)

Geändert von Bummi ( 7. Feb 2013 um 22:44 Uhr)
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Label korrekt zur Laufzeit erzeugen?

  Alt 7. Feb 2013, 22:49
Das ist doch dasselbe... hab's auch mit else versucht, und das bringt leider nichts.
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Label korrekt zur Laufzeit erzeugen?

  Alt 7. Feb 2013, 22:49
Du hast keinen else Zweig für

if TLabel(FindComponent('test1')) = nil then in dem MyLabel gesetzt würde.
Der else Zweig ist ja auch überflüssig ... allerdings ist MyLabel entweder 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;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#5

AW: Label korrekt zur Laufzeit erzeugen?

  Alt 7. Feb 2013, 22:54
@Sir Rufo wir meinen das gleiche, allerdings ist Deine Beschreibung sicher besser.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Label korrekt zur Laufzeit erzeugen?

  Alt 7. Feb 2013, 22:55
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?
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!

Geändert von AlexII ( 7. Feb 2013 um 22:57 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Label korrekt zur Laufzeit erzeugen?

  Alt 7. Feb 2013, 23:01
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 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;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Label korrekt zur Laufzeit erzeugen?

  Alt 7. Feb 2013, 23:09
Und wie und wo vernichte ich das Label wenn den Autor nicht mehr gibt?

Mit MyLabel.Free; verschwindet mein ganzes Programm.
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Label korrekt zur Laufzeit erzeugen?

  Alt 7. Feb 2013, 23:13
Und wie und wo vernichte ich das Label wenn den Autor nicht mehr gibt?
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;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Label korrekt zur Laufzeit erzeugen?

  Alt 7. Feb 2013, 23:18
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.
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:26 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