![]() |
Timer Anhalten Während Fenster Verschoben Wird
Hallo liebe DP-Gemeinde,
ich suche nach dem Befehl, mit dem ich feststellen kann, ob ich gerade das Fenster meiner Anwendungen in der Caption-Leiste mit dem Mauszeiger festhalte, um das Fenster zu verschieben / zu bewegen. NICHT die Größe des Fensters zu ändern! Weil in meiner Anwendung eine TTimer-Komponente läuft, die Enabled:=True ist, springt mir das Fenster immer wieder in die alte Position zurück, wenn der Timer1.Timer gerade ausgelöst wird :( Deshalb versuche ich festzustellen, ob ich das Fenster gerade "festhalte" um den Timer1.Enabled in dieser Zeit auf False zusetzen. MfG, terence |
AW: Timer Anhalten Während Fenster Verschoben Wird
Hallo
vielleicht musst du den Timer gar nicht deaktivieren. wie wärs damit:
Code:
und im Timer
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin Inc(nClickCount) end; procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Dec(nClickCount) end;
Code:
Gruß
procedure TForm1.Timer1Timer(Sender: TObject);
begin if nClickCount = 0 then begin // Tu was end; end; Christian |
AW: Timer Anhalten Während Fenster Verschoben Wird
@CGEu
Werd' ich gleich ausprobieren! Danke... MfG, terence |
AW: Timer Anhalten Während Fenster Verschoben Wird
Funktioniert aber doch nur beim Klick auf die Form, nicht aber beim bewegen mit der Leiste, oder?
|
AW: Timer Anhalten Während Fenster Verschoben Wird
Start der Bewegung erkennen:
Delphi-Quellcode:
Ende der Bewegung erkennen
procedure WMEnterSizeMove(var Message: TMessage) ; message WM_ENTERSIZEMOVE;
procedure TForm1.WMEnterSizeMove(var Message: TMessage) ; begin Timer1.enabled:= false; end;
Delphi-Quellcode:
procedure WMExitSizeMove(var Message: TMessage) ; message WM_EXITSIZEMOVE;
procedure TForm1.WMExitSizeMove(var Message: TMessage) ; begin Timer1.enabled:= true; end; |
AW: Timer Anhalten Während Fenster Verschoben Wird
Habe ein kleines Test Beispiel geschrieben,
funktioniert nur bei Klick in die Form, nicht aber beim Klick auf die Caption des Fensters, um es zu bewegen :( Anhang: PStopTimerOnWindowMoving_2013_01_14.zip - 226.238 Bytes @bernerbaer Das sieht verdächtig nach Lösung meines Problems aus... Dankeschön :) MfG, terence |
AW: Timer Anhalten Während Fenster Verschoben Wird
Oder in Kombination mit dem anderen Vorschlag oben:
Delphi-Quellcode:
type
TForm1 = class(TForm) ... private { Private-Deklarationen } FMovingOrSizing: Boolean; procedure WMEnterSizeMove(var Message: TMessage) ; message WM_ENTERSIZEMOVE; procedure WMExitSizeMove(var Message: TMessage) ; message WM_EXITSIZEMOVE; ... end; procedure TForm1.Timer1Timer(Sender: TObject); begin if not FMovingOrSizing then (* Timercode ausführen *) end; procedure TForm1.WMEnterSizeMove(var Message: TMessage); begin FMovingOrSizing := true; end; procedure TForm1.WMExitSizeMove(var Message: TMessage); begin FMovingOrSizing := false; end; |
AW: Timer Anhalten Während Fenster Verschoben Wird
Funktioniert doch prima, habs nur mal so getestet
Delphi-Quellcode:
Gruß
type
TForm1 = class(TForm) private { Private-Deklarationen } procedure WMEnterSizeMove(var Message: TMessage) ; message WM_ENTERSIZEMOVE; procedure WMExitSizeMove(var Message: TMessage) ; message WM_EXITSIZEMOVE; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.WMEnterSizeMove(var Message: TMessage) ; begin Form1.Color:= clGreen; Form1.Caption:=('hey, wo willste denn mit mir hin?'); end; procedure TForm1.WMExitSizeMove(var Message: TMessage) ; begin Form1.Color:= clRed; Form1.Caption:=('nu gut..'); end; end. Paul |
AW: Timer Anhalten Während Fenster Verschoben Wird
Zitat:
|
AW: Timer Anhalten Während Fenster Verschoben Wird
So, jetzt funktioniert es,
dank bernerbaer. Danke Paulman, danke DeddyH. Anhang: PStopTimerOnWindowMoving_2013_01_14_okay.zip - 227.422 Bytes MfG, terence |
AW: Timer Anhalten Während Fenster Verschoben Wird
Zitat:
[edit] Zitat:
Delphi-Quellcode:
das else braucht man dann nicht?
if not prvMouseOnFormularDown then begin
[/edit] |
AW: Timer Anhalten Während Fenster Verschoben Wird
Zitat:
a) es ist ein Testprogramm b) es ist mein Stil, es so umständlich zu machen :) MfG, terence |
AW: Timer Anhalten Während Fenster Verschoben Wird
Zitat:
|
AW: Timer Anhalten Während Fenster Verschoben Wird
Ich finde an der Stelle auch Exit ganz übersichtlich.
Bei Funktionen kann man sogar einen Wert mitgeben:
Delphi-Quellcode:
procedure xy;
begin if xyz then Exit; abc; end; function xy: Boolean; begin if xyz then Exit(False); Result := abc; end; |
AW: Timer Anhalten Während Fenster Verschoben Wird
"Exit" und "übersichtlich" geht IMO nur in seltenen Fällen zusammen. Aber ich will hier keinen Glaubenskrieg vom Zaun brechen.
|
AW: Timer Anhalten Während Fenster Verschoben Wird
Ich halte das mit den Exits so: Wenn ich sie nutze, dann nur ganz am Anfang einer Methode, mit einem kleinen Kommentar, dass hier Gültigkeitsprüfungen für Parameter etc. passieren.
Wenn es um komplexere Prüfungen geht, und Dinge, die dazu führen dass die Methode immerhin teilweise auch ausgeführt wird, arbeite ich lieber mit ein paar lokalen Variablen der Art "conditionIsValid" über die dann später verzweigt wird. Ein Exit mitten drin wird es bei mir also nicht geben, am Anfang z.B. zur Parametervalidierung helfen sie ein paar recht unübersichtliche if-Schachtelungstiefen zu vermeiden. Was ich auch gerne mache, sind Early-Out-Szenarien der Art:
Delphi-Quellcode:
Für sowas ist Exit einfach klasse schlank.
function TMyClass.IndexOfObject(someObject: TObject): Integer;
var i: Integer; begin result := -1; for i := Low(FArray) to High(FArray) do if FArray[i] = someObject then Exit(i); end; |
AW: Timer Anhalten Während Fenster Verschoben Wird
Zitat:
Das schöne am Programmieren ist doch, daß man (fast) unendlich viele Wege einschlagen kann, um eine Aufgabe zu meistern. Nun ist es an einem, eine übersichtliche und leicht pflegbare Methode zu finden. Fehler aus früheren Zeiten können helfen, oder Tipps von der DP-Gemeinde. MfG, terence |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:26 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