Показать сообщение отдельно
  #3  
Старый 21.01.2012, 14:44
Аватар для DelphiM0ZG
DelphiM0ZG DelphiM0ZG вне форума
Новичок
 
Регистрация: 22.10.2011
Сообщения: 62
Репутация: 666
По умолчанию

Предполагаю, что процедура procedure TIceThread.DoThawing; работает самостоятельно - независимо от потока, поскольку цикл запускается не в потоке (OnExecute), а в самой процедуре, и получается так, что поток запущен, и он не остановится, пока не выполнит процедуру. Вот этот цикл:

Код:
   i := 255;
   while not Terminated and (i > 0) do
   begin
     i := i - 0.00001;
     Synchronize(Ice);
   end;
должен быть на потоке, переменная i должна быть объявлена в экземпляре потока или глобально (попробуйте и так, и так). А вот процедура, которая и будет растворять форму (её надо синхронизировать):
Код:
Procedure TIceThread.Ice;
Begin
   FMain.AlphaBlendValue := trunc(i);
End;
Мне непонятно одно: зачем использовать переменную типа Double - используйте целую переменную (Byte), прибавляйте 1, а чтобы скорость регулировать, можно в цикле потока Sleep(Speed); написать, где Speed - целая переменная, регулирующая скорость.

Кстати, по таймеру растворять форму гораздо легче.
__________________
Чем больше знаешь, тем сильнее осознаёшь, что знаешь гораздо меньше, чем не знаешь!..
Ответить с цитированием