ohr nee ! .. jetzt hab ich ne etwas längere Antwort verfasst, und nun ist mein geschriebenes weg, weil ich bei der Vorschau den zurück Button des Browsers benutzt habe. Sch ...
Hab jetzt aber keine Lust, das nochmal zu schreiben.
ich machs jetzt kurz.
Das hier ist erstmal Mißt, da TOnlineThread schon ein Zeiger ist !!
new() ist doppelt gemoppelt. new(); weglassen.
Code:
type
POnlineThread = ^TOnlineThread;
TOnlineThread = class(TThread)
und dann
ändern auf
Code:
TOnlineThread = class(TThread)
private
{ Private-Deklarationen }
protected
procedure Execute; override;
public
URL: PURL;
Tree: TVirtualDrawTree;
selbst: TOnlineThread;
next: TOnlineThread;
prev: TOnlineThread;
constructor Create(CreateSuspended:boolean);
end;
die Variable Statusbar ändern auf FSTatusbar. der Syncrhonize Gedanke war richtig.
Aber noch viel besser wäre, ein Event schicken !!, anstatt die Statusbar selber zu ändern im Thread ! Was ist, wenn Du die Komnponente nochmal brauchst, und es dort keine Statusbar gibt ?
Der Thread schickt ein Event an ein Form, und das Form aktualisiert sich selber !
Wenn Du es aber dennoch so haben willst, dann hier besserer Code
Code:
procedure TControlThread.SetStatusbar;
begin
StatusBar.Panels[0].Caption := Format(TXT_ACTIVETHREADS,[ThreadCount])
end;
nach
Code:
procedure TControlThread.RefreschStatusbar;
begin
if assigned(FStatusbar)
then FStatusBar.Panels[0].Caption := Format(TXT_ACTIVETHREADS,[ThreadCount])
end;
und dann
Code:
private
proceudre SetStatusbar(value : TStatusbar);
public
property Statusbar : TStatusbar write SetStatusbar;
....
procedre TControlThread.SetStatusbar(value : Tstatusbar);
begin
FStatusbar := Value;
end;