Maus aussperren

Für allgemeine Fragen zur Programmierung mit PureBasic.
Sven
Beiträge: 374
Registriert: 23.09.2004 12:01

Maus aussperren

Beitrag von Sven »

Es gibt doch eine Möglichkeit, die Maus in einem Fenster oder Screen einzufangen. Nicht möchte ich genau das Gegenteil: die Maus von einem Bildschirmbereich aussperren.

Ich habe zwei Desktops und will verhindern, dass die Maus vom ersten auf den zweiten verschoben werden kann. Einfach Abschalten ist nicht, weil die Maus dann trotzdem weiterwandert, sie soll aber am rechten Rand des ersten Desktops hängenbleiben, als wäre der zweite nicht da.

Sven
Cadogan
Beiträge: 22
Registriert: 27.05.2005 13:32
Kontaktdaten:

Beitrag von Cadogan »

Vielleicht hilft dir das hier ja weiter?

Code: Alles auswählen

Structure ApiPoint
	x.l
	y.l
EndStructure

Global Maus.ApiPoint


Repeat
	Delay(1)
	GetCursorPos_(@Maus)
	Debug Maus\x
	Debug Maus\y
	
	x.l= Maus\x
	y.l= Maus\y
	
	If Maus\x > 400
		mouse_event_(#MOUSEEVENTF_MOVE,-10,0,0,0)
	EndIf
	
	If Maus\y > 300
		mouse_event_(#MOUSEEVENTF_MOVE,0,-10,0,0)
	EndIf
	
	If Maus\x =0 And Maus\y=0
		End
	EndIf
	
ForEver

Das Programm lässt sich beenden, indem du die Maus ganz nach oben links fährst. Du müsstest halt das ganze so abändern, damit die Maus nicht die Grenzen des ersten Desktops verlassen kann. Geht ja Recht einfach mit ExamineDesktops() und dann den entsprechenden Funktionen. :)

Gruß,
Cadogan
Benutzeravatar
Hades
Beiträge: 100
Registriert: 21.05.2005 11:54

Beitrag von Hades »

Versuch es mal besser hiermit:

Code: Alles auswählen

Procedure MouseRestrict(left.l, top.l, width.l, height.l)
  Protected rect.RECT
  rect\left = left
  rect\top = top
  rect\right = width
  rect\bottom = height
  ClipCursor_(rect)
EndProcedure
Das brauchst Du nur ein mal aufrufen, dann verlässt die Maus den Bereich nicht mehr (kann dann also auch nicht mehr auf den anderen Desktop).
Sven
Beiträge: 374
Registriert: 23.09.2004 12:01

Beitrag von Sven »

@ Hades

Ja, so funktioniert es! Ich hab es erst mit

Code: Alles auswählen

ClipCursor_(*rect)
versucht, ging natürlich nicht.

Was passiert eigentlich, wenn ein anderes Programm auch glaubt, die Maus einfangen zu müssen? Dann gilt das zuletzt aufgerufene ClipCursor_(), nehme ich an?

Sven
Benutzeravatar
Hades
Beiträge: 100
Registriert: 21.05.2005 11:54

Beitrag von Hades »

Was spielst Du denn da? 'Catch The Mouse' ? :mrgreen:

Ich hab noch nicht ausprobiert was passiert wenn ein zweites Programm ClipCursor aufruft, aber ich gehe doch stark davon aus, dass der letzte ClipCursor Aufruf Vorrang hat. Wüsste nicht was sonst passieren sollte.

Das da oben hab ich nur eben schnell für Dich hingecoded und dabei ist mir mal wieder ein blöder Fehler passiert. Es muss natürlich right/bottom und nicht width/height heissen. Is mir echt peinlich. :oops:

Hier nochmal richtig:

Code: Alles auswählen

Procedure MouseRestrict(left.l, top.l, right.l, bottom.l) 
  Protected rect.RECT 
  rect\left = left 
  rect\top = top 
  rect\right = right 
  rect\bottom = bottom
  ClipCursor_(rect) 
EndProcedure 
Sven
Beiträge: 374
Registriert: 23.09.2004 12:01

Beitrag von Sven »

>>Was spielst Du denn da? 'Catch The Mouse' ?

Nanee, sperr die Maus aus. Nämlich vom zweiten Desktop, auf dem sie stören würde. Und da hätte ich gern, dass das während der Programmlaufzeit so bleibt und mir da kein anderes Program zwischenfunkt.

>>Das da oben hab ich nur eben schnell für Dich hingecoded und dabei ist mir mal wieder ein blöder Fehler passiert. Es muss natürlich right/bottom und nicht width/height heissen. Is mir echt peinlich.

Macht nix, soviel Umdenken ist gerade noch drin.

Sven
Antworten