AW: Label Text ändern aus einem Thread heraus
Zitat:
OnClick:
Delphi-Quellcode:
Die editLabel funktion befindet sich in einer anderen Unit:
procedure TOverviewF.btn1Click(Sender: TObject);
begin lblTaskBackground.Caption := ''; editLabel; end;
Delphi-Quellcode:
Das Label zeigt keinen Text an, obwohl Test dort stehen müsste, es liegt also nicht am Thread sondern irgendetwas wird da blockiert :(
procedure editLabel;
begin OverviewF.lblTaskBackground.Caption := 'Test'; end; EDIT hier mal mein Sourcecode, die Dateien heißen Overview.pas und Task.pas |
AW: Label Text ändern aus einem Thread heraus
Das kann ich zwar in meinem Delphi nicht öffnen, aber setz doch mal einen Haltepunkt ins ButtonClick und steppe durch, ob editLabel auch tatsächlich dorthin springt, wo Du glaubst.
|
AW: Label Text ändern aus einem Thread heraus
Zitat:
|
AW: Label Text ändern aus einem Thread heraus
Dann gehen mir auch die Ideen aus :(
|
AW: Label Text ändern aus einem Thread heraus
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. |
AW: Label Text ändern aus einem Thread heraus
Die Hautfrage ist hier, wird auch das Label von der Form geändert, die gerade betrachtet wird?
Ich vermute mal eben nicht. |
AW: Label Text ändern aus einem Thread heraus
Oder greift er überhaupt auf die richtige Form zu? :stupid:
|
AW: Label Text ändern aus einem Thread heraus
Zitat:
|
AW: Label Text ändern aus einem Thread heraus
Was passiert, wenn du in deinem Test editLabel so änderst?
Delphi-Quellcode:
Wenn die MessageBox nicht kommt, dann steht in deiner globalen Variablen "OverviewF" nicht das Fenster mit dem Label.
procedure editLabel;
begin if GetForegroundWindow() = OverviewF.Handle then ShowMessage('Ja, wirklich das richtige Formular.'); end; Wenn doch, dann mal Neuzeichnen erzwingen:
Delphi-Quellcode:
Mit deiner originalen editLabel Prozedur.
procedure TOverviewF.btn1Click(Sender: TObject);
begin lblTaskBackground.Caption := ''; editLabel; Invalidate; end; Wenn alles nichts bringt, mache den Test bitte mal mit einem frischen, leeren Projekt. Wenn es dort geht, dann ist in deinem eigentlichen definitiv ein Fehler. |
AW: Label Text ändern aus einem Thread heraus
Hm, das ist verwirrend,
also es ist die gleiche Form, aber eine andere Instanz (nach meiner Vermutung), aber ich greife auf die richtige Variable zu:
Delphi-Quellcode:
Auf OverviewF, da bin ich mir sicher. Aber wo ist dann der Fehler :O
const
WM_AFTER_SHOW = WM_USER + 300; type ThreadClass = class of TThread; TOverviewF = class(TForm) lvInstances: TListView; mmMenu: TMainMenu; Settings1: TMenuItem; Logger1: TMenuItem; BugReport1: TMenuItem; MinecraftAccounts1: TMenuItem; Changelog1: TMenuItem; lblVersion: TLabel; N1: TMenuItem; CheckForUpdates1: TMenuItem; SendanEMail1: TMenuItem; lblInformation: TLabel; lblRetry: TLinkLabel; cmdProgressBackground: TCMDProgressBar; lblTaskBackground: TLabel; btn1: TButton; procedure Logger1Click(Sender: TObject); procedure FormShow(Sender: TObject); procedure WmAfterShow(var Msg: TMessage); message WM_AFTER_SHOW; procedure lblRetryClick(Sender: TObject); function createThread(thread : ThreadClass) : TThread; procedure setEnabled(Enabled : Boolean); procedure btn1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var OverviewF: TOverviewF; BackgroundThread : TBackgroundThread; EDIT In den Einstellungen (wo man das Hauptformular bestimmen kann) gibt es zwei Forms mit dem Namen OverviewF :O. Das Problem ist gelöst nach ein paar mal hin und her klicken funktioniert es nun endlich :D, die eine Form ist dann irgendwann verschwunden. Vielen Dank für eure Hilfe :D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:33 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