Aus reiner Effekthascherei hatte ich vor ein Formular einzublenden. Der ganze Effekt sollte ca 1 Sekunde dauern.
Relaisiert habe ich das ganze so:
Delphi-Quellcode:
procedure Delay(Milliseconds: Integer);
var
Tick: DWord;
Event: THandle;
begin
Event := CreateEvent(nil, False, False, nil);
try
Tick := GetTickCount + DWord(Milliseconds);
while (Milliseconds > 0) and
(MsgWaitForMultipleObjects(1, Event, False, Milliseconds, QS_ALLINPUT) <> WAIT_TIMEOUT) do
begin
Application.ProcessMessages;
Milliseconds := Tick - GetTickcount;
end;
finally
CloseHandle(Event);
end;
end;
procedure TForm2.FadeIn2;
var
zeitabschnitt: Integer;
n: Integer;
firstt: Cardinal;
begin
firstt:=gettickcount;
zeitabschnitt:=1000 div 255 ;
AlphaBlendValue:=0;
show;
if zeitabschnitt>0 then
begin
for n := 0 to 255 do
begin
delay(zeitabschnitt);
AlphaBlendValue:=n;
update;
end;
end;
caption:=Format('Zeit für Fadein 2: %d ms',[gettickcount-firstt]);
end;
Die Delay Funktion kommt hier aus dem
Forum. Unter Vista funktionierte das ganze wie erwartet. Ich hatte als Zeit ca 764 ms. Unter XP dauert das ganze 2700ms und unter Windows 2000 ca 8000 ms.
Daraufhin habe ich mich hier ein bischen umgesehen und folgende Funktion in der
Codelibary gefunden
Delphi-Quellcode:
procedure TForm2.FadeIn;
var
n: Integer;
firstt: Cardinal;
Pause: Boolean;
begin
firstt:=gettickcount;
AlphaBlendValue:=0;
show;
pause:=true;
//langsam sichtbar machen
for n := 1 to 8 do
begin
Pause := not Pause;
if Pause then
begin
AlphaBlendValue := n*32-1;
end;
if n<8 then
Refresh;
sleep(5);
end;
caption:=Format('Zeit für Fadein: %d ms',[gettickcount-firstt]);
end;
Hier kamen folgende Zeiten Zustande:
Win 2000: 312 ms
Vista : 47 ms
XP : 200 ms
Für mich stellen sich jetzt zwei Fragen.
1. Wieso ist das Laufzeitverhalten so unterschiedlich ?
2. Gibt es eine Möglichkeit diesen Einblendeffekt zeitlich zu steuern ?
Ich habe das ganze auch mal als Delphi 6 Projekt hier angehängt. Der gleiche Effekt tritt aber auch bei Delphi 2010 auf.