Fade не будет работать со стандартными таймерами, потому что цикл приложения не будет функционировать до тех пор, пока вы не вызовете Application.Run (как сказал Мейсон), а таймеры являются обертками для механизма API таймера на основе сообщений.
Нельзя использовать таймеры на основе потоков, поскольку для работы с пользовательским интерфейсом потребуется синхронизация, а синхронизация - это механизм на основе сообщений.
Но вы можете тратить время, необходимое для постепенного появления / исчезновения, так что вы можете запустить модное приложение, и если вы ищете это, я свободно считаю, что вы не беспокоитесь о том, чтобы терять немного времени Я могу объяснить намного лучше с (работающим и проверенным) примером кода, так что это будет работать для вас:
USplashForm.pas:
//...
interface
//...
type
TSplashForm = class(TForm)
//...
public
procedure FadeIn;
procedure FadeOut;
//...
end;
//...
implementation
//...
procedure TSplashForm.FadeIn;
begin
AlphaBlend := True;
AlphaBlendValue := 0;
Show;
Update;
repeat
AlphaBlendValue := AlphaBlendValue + 5;
Update;
Sleep(20);
until AlphaBlendValue >= 255;
end;
procedure TSplashForm.FadeOut;
begin
repeat
AlphaBlendValue := AlphaBlendValue - 5;
Update;
Sleep(20);
until AlphaBlendValue <= 5;
Hide;
end;
//...
YourProject.dpr
var
Splash: TSplashForm;
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Splash := TSplashForm.Create(nil);
try
Splash.FadeIn;
//any initialization code here!!!
Application.CreateForm(TMainForm, MainForm);
MainForm.Show;
MainForm.Update;
//more code
Sleep(500); //I used it to delay a bit, because I only create one form and I have not initialization code at all!
Splash.FadeOut;
finally
Splash.Free;
end;
Application.Run;
end.
Мои 5 центов, наслаждайтесь.