Hallo,
jetzt nehme ich Delay aus
Delay
Aber.
Rufe ich Delay mit Werten größer 50 auf,
kommt es zu einem Integer-Überlauf.
Delphi-Quellcode:
procedure TForm2.Button_StartClick(Sender: TObject);
begin
while True do
begin
Image.Left:= Image.Left+1;
Delay(50);
if Image.Left+Image.Width>=Self.Width then break;
end;
MessageBox(0, 'stopped', '', 0);
end;
Ich habe das Delay mal ein bisschen "optimiert".
Delphi-Quellcode:
procedure Delay(Milliseconds: Integer);
var
Tick : DWord;
Event : THandle;
TickCount : Cardinal;
begin
Event := CreateEvent(nil, False, False, nil);
try
TickCount:= GetTickCount;
Tick := TickCount + DWord(Milliseconds);
while (Milliseconds > 0) and
(MsgWaitForMultipleObjects(1, Event, False, Milliseconds, QS_ALLINPUT) <> WAIT_TIMEOUT) do
begin
Application.ProcessMessages;
if Application.Terminated then Exit;
TickCount:= GetTickcount;
if Tick < TickCount then break;
Milliseconds := Tick - TickCount; // hier kommt der Überlauf, wenn TickCount<Tick
end;
finally
CloseHandle(Event);
end;
end;
Vielleicht liegt es ja auch an Delphi2010 ?.
Heiko