Einzelnen Beitrag anzeigen

hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: TImage ohne Ruckeln auf einem Form bewegen

  Alt 11. Mai 2010, 08:06
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
Heiko
  Mit Zitat antworten Zitat