Bei Delay hängen diese Gesamtzeiten vom
OS und dem PC ab, also von der Auflösung des internen Timers.
Und dann hängen sie auch noch von der Auslastung der CPU und des Programmes.
ein einfaches Beispiel:
benötigt: ein Button, Memo und ein Edit (für das Delay)
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
c, d, p, a: Cardinal;
begin
p := StrToInt(Edit1.Text);
a := 2000
div p;
// 2 sec
Memo1.Lines.Clear;
AlphaBlend := True;
c := GetTickCount;
while a > 0
do begin
d := GetTickCount;
Delay(p);
{start - irgendwas machen}
Memo1.Lines.Add(IntToStr(GetTickCount - d));
AlphaBlendValue := AlphaBlendValue + 1;
Repaint;
Application.ProcessMessages;
{ende - irgendwas machen}
Dec(a);
end;
Memo1.Lines.Add('
= ' + IntToStr(GetTickCount - c));
AlphaBlend := False;
end;
Bedenke jetzt noch, daß bei dir relativ viel gemacht wird (so Einiges muß ja neu berechnet und gezeichnet werden),
welches in deine Gesamtzeit mit einberechnet werden muß.
Probier das Beispiel einfach mal mit 100, 10 und 1 Millisekunde aus.
Seit Vista gibt es eine andere Desktopverwaltung, wobei der Desktopmanager alle Fenstern zwischenspeichert und demnach nur noch die "fertigen" Bilder verrechnen/überblenden muß, wärend die älteren
OS dafür gleich mal den ganzen Desktop und fast alle Fenster neu zeichnen lassen müssen.