Ho creato un form che funge da "alert popup" (alla google desktop o msn messenger). All'evento OnShow, viene creato un Thread che dopo 10 secondi dovrebbe far chiudere la popup. E funge bene. Ora il problema è che, all'evento OnClose del popup bisognerebbe distruggere il thread. Il fatto è che se non lo distruggo, il thread continua ad eseguirsi (sballandomi i valori al successivo riavvio del popup), mentre se lo distruggo alla chiusura del popup mi si pianta l'applicazione.
codice:
procedure TThreadTimer.Dissolve;
var i : byte;
begin
 Timer.Terminate;
 for i:=255 downto 0 do
  Popup.AlphaBlendValue := i; // effetto dissolvenza
 Popup.Close;
end;


procedure TThreadTimer.Execute;
var i: integer;
begin
 i := 0;
 while true do
  begin
   sleep(1000);
   i := i + 1000;
   Popup.LblInfo.Caption := IntToStr(10-(i div 1000));
   if i = 10000 then
    Synchronize(Dissolve);
  end;
end;

procedure TPopup.FormShow(Sender: TObject);
begin
 AlphaBlendValue := 0;
 Timer := TThreadTimer.Create(false);
 Timer.FreeOnTerminate := true;
end;

procedure TPopup.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Timer.Destroy;
end;
Cosa c'è che non va in questo codice?