FreeOnTerminate + Resume ist ganz böse... wenn Execute zu schnell durch ist, ist der Thread schon freigegeben, wenn du versuchst auf dem freigegebenen Objekt Resume auszuführen.
Lass den Thread doch gleich loslaufen (False als Parameter an den Konstruktor) statt den überhaupt angehalten zu erzeugen.
Zudem machst du ein ShowMessage aus einem Thread heraus. Noch böser.
Dass man auf visuelle Sachen nicht zugreifen sollte, steht sogar im Quelltext als Warnung, wenn du über den Assistenten einen Thread anlegst...
Am saubersten sieht das so aus:
Delphi-Quellcode:
TTestThread = class(TThread)
private
FTest: Integer;
procedure ShowMyTest;
public
constructor Create(const ATest: Integer); reintroduce;
property Test: Integer read FTest write FTest;
end;
procedure TFormMain.ButtonClick(Sender: TObject);
begin
TTestThread.Create(StrToInt(Edit1.Text));
end;
constructor TTestThread.Create(const ATest: Integer); reintroduce;
begin
inherited Create(False);
FTest := ATest;
end;
procedure TTestThread.Execute;
begin
Synchronize(ShowMyTest);
end;
procedure TTestthread.ShowMyTest;
begin
ShowMessage(IntToStr(FTest));
end;