Delphi-PRAXiS
Seite 2 von 3     12 3      

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)

CreativeMD 26. Sep 2014 18:35

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

Zitat von DeddyH (Beitrag 1274006)
Ob mit der Form was nicht stimmt, kannst Du ja testen, indem Du ohne Thread mal einfach in einem ButtonClick oder so die Beschriftung änderst.

Guter Tipp :D

OnClick:
Delphi-Quellcode:
procedure TOverviewF.btn1Click(Sender: TObject);
begin
  lblTaskBackground.Caption := '';
  editLabel;
end;
Die editLabel funktion befindet sich in einer anderen Unit:
Delphi-Quellcode:
procedure editLabel;
begin
  OverviewF.lblTaskBackground.Caption := 'Test';
end;
Das Label zeigt keinen Text an, obwohl Test dort stehen müsste, es liegt also nicht am Thread sondern irgendetwas wird da blockiert :(

EDIT
hier mal mein Sourcecode, die Dateien heißen Overview.pas und Task.pas

DeddyH 26. Sep 2014 19:01

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.

CreativeMD 26. Sep 2014 19:04

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

Zitat von DeddyH (Beitrag 1274016)
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.

Jaja tut es, auch der Wert wird geändert und bleibt auch so (alles schon überprüft), aber die Anzeige ändert sich nicht :(.

DeddyH 26. Sep 2014 19:20

AW: Label Text ändern aus einem Thread heraus
 
Dann gehen mir auch die Ideen aus :(

himitsu 26. Sep 2014 19:27

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.

Sir Rufo 26. Sep 2014 19:31

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.

himitsu 26. Sep 2014 19:57

AW: Label Text ändern aus einem Thread heraus
 
Oder greift er überhaupt auf die richtige Form zu? :stupid:

CreativeMD 26. Sep 2014 21:59

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

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

Ja das tue ich :D, ach man mir sind schon alle Ideen ausgegangen :(

Medium 27. Sep 2014 03:16

AW: Label Text ändern aus einem Thread heraus
 
Was passiert, wenn du in deinem Test editLabel so änderst?
Delphi-Quellcode:
procedure editLabel;
begin
  if GetForegroundWindow() = OverviewF.Handle then
    ShowMessage('Ja, wirklich das richtige Formular.');
end;
Wenn die MessageBox nicht kommt, dann steht in deiner globalen Variablen "OverviewF" nicht das Fenster mit dem Label.

Wenn doch, dann mal Neuzeichnen erzwingen:
Delphi-Quellcode:
procedure TOverviewF.btn1Click(Sender: TObject);
begin
   lblTaskBackground.Caption := '';
   editLabel;
   Invalidate;
end;
Mit deiner originalen editLabel Prozedur.

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.

CreativeMD 27. Sep 2014 09:46

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:
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;
Auf OverviewF, da bin ich mir sicher. Aber wo ist dann der Fehler :O


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.
Seite 2 von 3     12 3      

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