Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Label Text ändern aus einem Thread heraus (https://www.delphipraxis.net/182040-label-text-aendern-aus-einem-thread-heraus.html)

himitsu 27. Sep 2014 10:51

AW: Label Text ändern aus einem Thread heraus
 
Zitat:

Ja das tue ich
Dann wohl doch nicht. ;)

Wenn jetzt noch jemand den anderen Thread findet, wo schonmal jemand genau das gleiche Problem hatte .........



Das erste Fenster wird zur Mainform und Visible auf True umgestellt
und das zweite Fenster wird als Letztes in die böse gloable Variable geschrieben.

CreativeMD 27. Sep 2014 11:02

AW: Label Text ändern aus einem Thread heraus
 
Zitat:

Zitat von himitsu (Beitrag 1274058)
Zitat:

Ja das tue ich
Dann wohl doch nicht. ;)

Wenn jetzt noch jemand den anderen Thread findet, wo schonmal jemand genau das gleiche Problem hatte .........



Das erste Fenster wird zur Mainform und Visible auf True umgestellt
und das zweite Fenster wird als Letztes in die böse gloable Variable geschrieben.

Ja, das Problem ist echt echt böse, wer kommt den auf so etwas? Das war Rainer Zufall (:D), dass ich es gesehen habe.

Nochmal Danke für die Hilfe :thumb:

Medium 27. Sep 2014 13:53

AW: Label Text ändern aus einem Thread heraus
 
Und exakt genau das ist der Grund, weswegen diese globalen Formularvariablen echt gefährlich sein können. Andere globale auch, aber hier noch mehr, da Automatismen der IDE greifen, die man nicht bewusst selbst implementiert hat. Ich habe mir die Benutzung dieser Variablen komplett abgewöhnt. In der Form-Klasse gehört "self" genutzt (extrem wichtig, gerade in so fällen wie hier passiert sind!), und alles externe bekommt genau die Parameter mit, an denen es etwas ändern soll. Sei es ein Label, ein Canvas, oder im Zweifel gleich ein Form-Handle.

In deinem Fall wäre z.B. folgendes einigermaßen sauber:
Delphi-Quellcode:
procedure TOverviewF.btn1Click(Sender: TObject);
begin
    lblTaskBackground.Caption := '';
    ChangeLabelCaption(lblTaskBackground);
end;

procedure ChangeLabelCaption(aLabel: TLabel);
begin
  aLabel.Caption := 'Hallo zusammen!';
end;
So wäre immer sicher gestellt, dass das Label der Instanz geändert wird, auf der auch der Button liegt, der tatsächlich geklickt wurde. Komplett ohne diese gräßliche gloabele Form-Variable.

himitsu 27. Sep 2014 14:30

AW: Label Text ändern aus einem Thread heraus
 
Genau deswegen sollte man mit diesen Variablen vorsichtig sein.
Schlimm und vorallem grob fahrlässig ist die Verwenddung dieser Variablen innerhalb der eigenen Klasse.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Form1.Label1.Caltion := 'Fehler, wenn Form1 nicht die eigene Instanz enthält';
  Self.Label1.Caltion := 'OK, auch wenn nicht unbedingt nötig';
  Label1.Caltion := 'OK';
end;
Und das betrifft nicht nur Form-Variablen.



Zitat:

Zitat von himitsu (Beitrag 1274019)
Ein gutes Beispiel für böse globale Variablen. :stupid:

An deiner Stelle würde ich mal in die Projektoptionen > Formulare schauen (oder in die DPR).
Ich wette fast da versteckt sich der "doppelte" Fehler.

Zitat:

Zitat von Sir Rufo (Beitrag 1274020)
Die Hautfrage ist hier, wird auch das Label von der Form geändert, die gerade betrachtet wird?

Ich vermute mal eben nicht.

Zitat:

Zitat von himitsu (Beitrag 1274023)
Oder greift er überhaupt auf die richtige Form zu? :stupid:

Zitat:

Zitat von CreativeMD (Beitrag 1274061)
Ja, das Problem ist echt echt böse, wer kommt den auf so etwas? Das war Rainer Zufall (:D), dass ich es gesehen habe.

Nochmal Danke für die Hilfe :thumb:

Bitte.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 Uhr.
Seite 3 von 3     123   

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