Generalmente, il thread termina quando l'esecuzione del metodo Execute si conclude, ma nel tuo caso ciò non avviene mai perché hai inserito in sostanza un ciclo infinito.
Per consentire al thread di concludersi correttamente, modifica il tuo ciclo in questo modo:
codice:
while not Terminated do
begin
// istruzioni del thread
end;
Per determinare la conclusione dei lavori del thread, è sufficiente impostare la proprietà Terminated al valore True. Prendendo il tuo esempio:
codice:
procedure TThreadTimer.Dissolve;
var i : byte;
begin
for i:=255 downto 0 do
Popup.AlphaBlendValue := i; // effetto dissolvenza
Popup.Close;
Self.Terminated := True;
end;
Ciao!