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/)
-   -   Delphi Maus "einsperren" (https://www.delphipraxis.net/89581-maus-einsperren.html)

Codewalker 2. Apr 2007 19:46


Maus "einsperren"
 
Hallo zusammen.

Delphi bietet über ClipRect eine Möglichkeit, die Maus in einem Viereck einzusperren. Das Problem: Ich brauche es aber für ein Sechseck. Gibt es da auch eine Möglichkeit?

Cöster 2. Apr 2007 19:59

Re: Maus "einsperren"
 
Dass es ne einfache Möglichkeit gibt, glaub ich nicht. Aber du könntest im MouseMove prüfen, ob die Maus einen bestimmten Bereich verlassen hat und sie Mittels MousePos ggf. zurücksetzen.

SirThornberry 2. Apr 2007 20:09

Re: Maus "einsperren"
 
ClipRect ist eine Windowsfunktion (also nichts Delphieigenes). Und soweit ich weiß bietet das Betriebssystem keine Funktion für Sechseckiges "einsperren". Zudem kann man die Sperre mit "Strg + Alt + Entf" aufheben.

dino 2. Apr 2007 20:37

Re: Maus "einsperren"
 
hmm ich denke, keiner von uns hätte gerne, dass wir die MAus selbst dann einsperren, wenn Strg+Alt+Entf gedrückt wurde

zurücksetzen ergibt immer so nen blöden ruckel
ich würde eher dass Rechteck jenachdem wo die Maus gerade ist verändern

Christian Seehase 2. Apr 2007 22:00

Re: Maus "einsperren"
 
Moin Thomas,

Du könntest mal schauen, ob es etwas vergleichbares wie ClipRect auch für MSDN-Library durchsuchenRegions gibt.

Hawkeye219 2. Apr 2007 22:31

Re: Maus "einsperren"
 
Hallo,

hier werden zwei Dinge vermischt. Zur Einschränkung der Mausbewegung stellt Windows (nach meinem Wissen) nur eine Funktion zur Verfügung: MSDN-Library durchsuchenClipCursor gestattet die Angabe eines Begrenzungsrechtecks. Über das Delphi-Referenz durchsuchenClipRect werden Zeichenoperationen auf ein Rechteck beschränkt. Hier wären Regionen tatsächlich ein geeignetes Mittel zur Definition beliebig geformter Bereiche.

Gruß Hawkeye

Codewalker 3. Apr 2007 09:14

Re: Maus "einsperren"
 
Also erstmal Danke für die vielen Antworten. Ich hab mich jetzt mal duch die MSDN gewühlt (finden kann man da nicht :mrgreen: ). Leider haben alle Funktionen, die ich dafür gefunden habe als Parameter ein RECT.

@Hawkeye219: Ich hab leider dort nichts über Regions gefunden und das sagt mir auch nur im Zusammenhang mit runden Fenstern etwas.

Ich werds also jetzt doch über das MouseMove-Event machen (nicht schön und bei Sechsecken auch recht aufwendig). Falls doch noch einer eine Lösung mit Regions oder ähnlichem findet, würd ich mich freuen :wink:

himitsu 3. Apr 2007 13:17

Re: Maus "einsperren"
 
Christian meintewohl auch nich direkt Regions, sondern das du mal schauen könntest, ob es nicht sowas in der Art (wo man halt auch andere Formen übergeben kann) auch für ClipCursor gibt.

Aber mir is bislang och nichts derartiges untergekommen.

Man könnte da jetzt wohl höchstens (da MSDN/PSDK nichts ausspuckt) mal sehn ob/was ClipCursor intern aufruft/nutzt und dann nach anderen Funktionen suchen welche ebenfalls derartige Dinge aufruft/nutzt.

Aber ich denke einfach mal, daß in Windows dann nur die Grenzwerte Werte für X und Y festgelegt/verglichen werden und demnach wären halt nur Rechtecke möglich.



Ansonsten: wie sieht es mit MausHooks aus?
werden die vorm "sichtbaren" Verschieben des Mauszeigers aufgerufen, so das man da eventuell vor dem "sichtbaren" Verschieben die Werte bei Überschreitung der gewünschten Grenzen zurücksetzt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:31 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