AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

"Ruckeln" bei bewegten Shapes abstellen

Ein Thema von Delphi-Narr · begonnen am 20. Okt 2009 · letzter Beitrag vom 21. Dez 2010
 
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.557 Beiträge
 
Delphi 12 Athens
 
#8

Re: "Ruckeln" bei bewegten Shapes abstellen

  Alt 20. Okt 2009, 18:18
Zitat von Delphi-Narr:
Die Timer laufen meines Wissens nach parallel...
Die Timer laufen vielleicht paralell, aber Ereignis-Prozeduren laufen sequentiell


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;
      if Application.Terminated then Exit;
      Milliseconds := Tick - GetTickcount;
    end;
  finally
    CloseHandle(Event);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Timer1.Interval := 100;
  Timer2.Interval := 1000;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Memo1.Text := Memo1.Text + '*';
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
  Memo1.Text := Memo1.Text + 's';
  Sleep(900);
  Memo1.Text := Memo1.Text + 'e';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Timer1.Enabled := not Timer1.Enabled;
  Timer2.Enabled := not Timer2.Enabled;
end;
Ausgabe mit Sleep:
die Timer1Proc arbeitet nicht, wärend Timer2Proc aktiv ist = sequentiell
Code:
*********se**se**se**se**se**se*se
Ausgabe mit Delay:
hier ist zwar auch noch alles "sequentiell", außer das Delay (oder besser gesagt Application.ProcessMessages) hier zwischendurch mal die Anfragen abarbeitet.

Wenn etwas wärend wärend Delay länger braucht, dann wird Delay/Timer2Timer auch länger brauchen, bis dieses feritg ist ... eben, da alles nur sequentiell abgearbeitet wird.
(paralell geht mit Threads)
Code:
*********s********e*s********e*s********e*s********e*s********e*s*********es*********e
das sind übriges Beides die Ergebnisse von je 7 Sekunden
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz