Hi, keine Ahnung, ob das erwünscht ist, aber ich hätte ne Modifikation des Originaltutorials mit Fade-In /-Out. Und zwar wird dies über einen Thread gesteuert. Funktioniert, und es wird auch wie ich das sehen kann alles wieder ordnungsgemäß freigegeben.
DPR:
Delphi-Quellcode:
begin
SplashForm := TSplashForm.Create(Application);
try
SplashForm.Show;
SplashForm.Refresh;
FadeThread := TFadeThread.Create(False);
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
finally
SplashForm.InitializationDone := True;
end;
Application.Run;
end.
SplashUnit.pas (bei mir):
Delphi-Quellcode:
type
TSplashForm = class(TTntForm)
SplashImage: TImage;
SplashTimer: TTimer;
CloseBtn: TTntButton;
procedure SplashTimerTimer(Sender: TObject);
procedure TntFormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure TntFormClose(Sender: TObject; var Action: TCloseAction);
private
FInitializationDone: Boolean;
{ Private declarations }
procedure SetInitializationDone(const Value: Boolean);
public
{ Public declarations }
property InitializationDone: Boolean read FInitializationDone write SetInitializationDone;
end;
type
TFadeThread = class(TThread)
private
{ Private-Deklarationen }
protected
procedure Execute; override;
public
FadeActive: Boolean;
end;
var
SplashForm: TSplashForm;
FadeThread: TFadeThread;
implementation
{$R *.DFM}
procedure TFadeThread.Execute;
begin
FadeActive := True;
while (SplashForm <> nil) and not Terminated do
begin
if not SplashForm.InitializationDone or SplashForm.SplashTimer.Enabled then
begin
//Fade-In
if SplashForm.AlphaBlendValue < 255 then
SplashForm.AlphaBlendValue := SplashForm.AlphaBlendValue + 17
else
FadeActive := False;
end else
begin
//Fade-Out
if SplashForm.AlphaBlendValue > 0 then
SplashForm.AlphaBlendValue := SplashForm.AlphaBlendValue - 17
else
begin
FadeActive := False;
Terminate;
SplashForm.Close;
end;
end;
Sleep(40);
end;
end;
procedure TSplashForm.SetInitializationDone(const Value: Boolean);
begin
FInitializationDone := Value;
Close;
end;
procedure TSplashForm.SplashTimerTimer(Sender: TObject);
begin
SplashTimer.Enabled := False;
FadeThread.FadeActive := True;
end;
procedure TSplashForm.TntFormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
CanClose := FadeThread.Terminated;
end;
procedure TSplashForm.TntFormClose(Sender: TObject;
var Action: TCloseAction);
begin
FadeThread := nil;
Action := caFree;
SplashForm := nil;
end;
Warum 17? Weil 17*15=255. ^^ Das Form muss natürlich vorher mit AlphaBlend := True bestückt werden.
In diesem Sinne: Viel Spaß (und gute Nacht *aufdieuhrseh*)