Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Durchklickbares Fenster soll verschoben werden können (https://www.delphipraxis.net/173446-durchklickbares-fenster-soll-verschoben-werden-koennen.html)

lbccaleb 25. Feb 2013 16:46

Durchklickbares Fenster soll verschoben werden können
 
Hey, bei mir haperts gerade wieder nen bischen -.-

Also ich habe ein Fenster mit der Windows Funktion SetWindowLong die Eigenschaft "WS_EX_TRANSPARENT" verpasst.

Das ist nun also alles so wie es sein soll.

Nun fehlt mir aber gerade ne Idee, wie ich das ganze trotzdem noch mit der Maus verschieben kann.
Also man soll in eine Freie Stelle des Fenster klicken, und dann trotzdem das Fenster verschieben können.

Nun ist also das Problem, ich muss Feststellen, das der Anwender auch wirklich das Fenster "verschieben" will und nicht nur durchklicken möchte. Jemand ne Idee, wie man das realisieren könnte?


Vllt mit einem Timer, der 5s wartet wenn der Mauscursor auf dem Fenster ist und dann die Funktion freigibt?

Oder könnte man die Verschiebe Funktion noch anders aufrufen? Bei älteren Windows Versionen war doch das "Fenster verschieben" immer in diesem kleinen PopUp-Menü, welches zu erreichen war in dem man oben links auf das kleine Fenster Symbol klickte. Aber das gibt es ja nun unter Windows 7 auch nicht mehr?!

Oder denk ich gerade zu kompliziert?

Namenloser 25. Feb 2013 17:52

AW: Durchklickbares Fenster soll verschoben werden können
 
Für mich ist das ein Widerspruch in sich... es ist unmöglich, die wirkliche Intention des Anwenders zu erraten.

Timer find ich nicht optimal, denn ich würde als Anwender nicht gerne unter Zeitdruck beim Anklicken von Steuerelementen im Hintergrund stehen. Falls das Timeout andererseits sehr großzügig gewählt ist, besteht wiederum das Problem, dass man lange warten muss, um das Fenster zu verschieben, was ebenfalls für Frust sorgen dürfte. Stopp mal mit einem Timer die Zeit, wie lange 5 Sekunden sind. Stell dir mal vor, du müsstest jedes mal so lange warten, wenn du ein Fenster verschieben willst... mich würde das wahnsinnig machen.

Mach es doch einfach so, dass der User eine bestimmte (z.B. Strg) Taste gedrückt halten muss, um das Fenster anklickbar zu machen.

Dalai 25. Feb 2013 18:06

AW: Durchklickbares Fenster soll verschoben werden können
 
MobileMeter hat ebenfalls ein (optional) durchklickbares Fenster. Man kommt dennoch an das Programm selbst ran, weil es mit einem Symbol im Tray sitzt. Man sollte zwar nicht jedes Programm mit einem solchen Symbol ausstatten (zumal heutzutage jedes Furzprogramm sowas hat, was letztlich den Tray zumüllt), aber je nach Wichtigkeit eines Programms kann man das ja - ggf. optional - anbieten.

MfG Dalai

Popov 25. Feb 2013 18:49

AW: Durchklickbares Fenster soll verschoben werden können
 
Nur so als Brainstorming Beitrag: dein Fenster hat einen Rect Bereich auf dem Desktop. Das ist weniger interessant, aber daraus kannst du den Rect-Bereich deiner Titel-Liste ermitteln. Nun über Message die globale Mausposition ermitteln und immer wieder prüfen ob sich der Mauszeiger im Rect-Bereich befindet. Wenn ja, dann Durchklickbarkeit abschalten, sonst wieder einschalten.

lbccaleb 25. Feb 2013 18:57

AW: Durchklickbares Fenster soll verschoben werden können
 
OK, danke aber konnte es Mitlerweile selber lösen.

Habe in meinem Konfigurations Tab nen neuen Button erstellt (Fenstposition anpassen)

Diesen habe ich gesubclassed und dann den WM_LBUTTONDOWN direkt an das Fenster weiter geleitet.
Dann den Mauscursor auf der linken oberen Ecke vom Fenster positioniert.

Wenn mann jetzt also auf den Button klickt, kann man so direkt das Fenster verschieben.
Funktioniert wunderbar ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz