Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Objekte bewegen

  Alt 14. Feb 2014, 23:46
Und hier die Erklärung, warum hier ein Timer genutzt werden soll/muss:

Zunächst einmal Terminologie: Diese "Objekte" heißen Controls (die Basis dafür ist Delphi-Referenz durchsuchenTControl).

Das VCL-Framework arbeitet wie folgt:

Ändert sich etwas an einem Control, dass für die Darstellung relevant ist, dann wird dieses Control für das erneute Zeichnen vorgemerkt (Delphi-Referenz durchsuchenTControl.Invalidate).
Dieses Neuzeichnen erfolgt genau dann, wenn die Anwendung in den Idle-Zustand kommt.
Der Idle-Zustand wird immer dann erreicht, wenn die Nachrichten-Warteschlange komplett abgearbeitet wurde.

Beim Aufruf einer Routine wird diese Warteschlange nicht abgearbeitet.
Man kann dieses erzwingen durch den Aufruf von Application.ProcessMessages (Delphi-Referenz durchsuchenTApplication.ProcessMessages) innerhalb der Routine.

Ein Neuzeichnen kann man auch direkt erzwingen durch den Aufruf von Delphi-Referenz durchsuchenTControl.Repaint.

Das ist aber alles insgesamt nicht zu empfehlen, denn die Anwendung reagiert entweder evtl. unkontrolliert durch Application.ProcessMessages (Mehrfachaufruf der Bewegungsroutine) oder reagiert auf gar nichts mehr, bis die Routine abgearbeitet ist.

Eine Anwendung soll aber in keinem Fall unkontrolliert oder eingefroren wirken.
Generell soll eine Anwendung im UI (User Interface) immer reagieren können und bei Bedarf nur gewisse Aktionen verbieten.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat