Einzelnen Beitrag anzeigen

Benutzerbild von CreativeMD
CreativeMD

Registriert seit: 11. Okt 2011
127 Beiträge
 
Delphi XE2 Architect
 
#9

AW: Label Text ändern aus einem Thread heraus

  Alt 26. Sep 2014, 18:55
Schnell zusammengetippt, kann noch Fehler enthalten:
Delphi-Quellcode:
type
  TOnSomethingHappenedEvent = procedure(var OldValue: string; const NewValue: string) of object;
  
  TMyThread = class(TThread)
  private
    FText: string;
    FOnSomethingHappened: TOnSomethingHappenedEvent;
    procedure DoOnSomethingHappened;
    ...
  public
    ...
    property OnSomethingHappened: TOnSomethingHappenedEvent read FOnSomethingHappened write FOnSomethingHappened;
  end;
  
procedure TMyThread.DoOnSomethingHappened;
var
  OldValue: string;
begin
  if Assigned(FOnSomethingHappened) then
    begin
      FOnSomethingHappened(OldValue, FText);
      Log('Changed from ' + OldValue + ' to ' + FText);
    end;
end;

procedure TMyThread.Execute;
begin
  ...
  Synchronize(DoOnSomethingHappened);
end;
Nun kannst Du dem Thread eine Methode vom Typ TOnSomethingHappenedEvent als Eventhandler für OnSomethingHappened zuweisen, der dann synchronisiert ausgeführt wird. Allerdings musst Du den Thread nun Suspended erzeugen, damit er nicht gleich losrennt, bevor die Property belegt wurde.
Aber das wird auch nichts an der Tatsache ändern, dass das Label nicht updatet

@Medium daran liegt es nicht hab, dass updaten klappt auch wenn das Thread leer ist nicht

Mit der Form stimmt etwas nicht
  Mit Zitat antworten Zitat