Frage

Ich bin mit dem OnIdle-Ereignisse für einige einfache Animationen, und es funktioniert gut. Das Problem ist jedoch, wenn der Benutzer beginnt, um das Fenster zu verschieben oder die Größe, die OnIdle-Ereignis stoppt Brennen, bis der Zug / die Größe-Operation abgeschlossen ist.

Ich muss erkennen, wenn dies geschieht, so dass ich alle Animationen anhalten kann. Aber wie erkenne ich die Bewegung des Fensters?

War es hilfreich?

Lösung

ich gehen würde mit mghie Kommentar:. Einen Timer für die Animation verwenden, und aktivieren / deaktivieren Sie es mit Nachrichtenhandler

In Ihrem Fall können Sie die folgende Meldung Handler hinzufügen möchten:

//fired when starting/ending a "move" or "size" window
procedure WMEnterSizeMove(var Message: TMessage) ; message WM_ENTERSIZEMOVE;
procedure WMExitSizeMove(var Message: TMessage) ; message WM_EXITSIZEMOVE;


  procedure TForm.WMEnterSizeMove(var msg: TMessage);
  begin
    AnimationTimer.Enabled := false;
    inherited;
  end;

  procedure TForm.WMExitSizeMove(var msg: TMessage);
  begin
    AnimationTimer.Enabled := true;
    inherited;
  end;

Andere Tipps

Ich habe nicht versucht, aber ich würde sagen, dass Sie wahrscheinlich WM_WINDOWPOSCHANGING verwenden könnten zu sagen, wenn das Fenster bewegt wird. http://msdn.microsoft.com/en-us /library/ms632653(VS.85).aspx

Delphi-Code wäre:

TSomeForm = class(TForm)
protected
  ...
  procedure WindowPosChanging(var Msg : TMessage); message WM_WINDOWPOSCHANGING;
  ...
end;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top