Hallo PBler,
hab grad ein Phänomen.
Folgender Schnipsel läuft unter Linux ohne Probleme
aber unter Windows ist es so, als würde
MouseButton(#PB_MouseButton_Right) den Wert 1 dauerhaft
ausgeben nachdem man einmal die Rechte Maustaste gedrückt hat.
Habt Ihr ne Idee?
Hab grad leider kein HomePage-Verzeichnis wo ich denn Code mit den Programmdateien ablegen kann.
Wenn sich jemand von euch das Problem angucken möchte würde ich eine mail zukommen lassen.
;{ Rechtsklick Abfrage
ExamineMouse()
rklick = MouseButton(#PB_MouseButton_Right)
If rklick=1
creat$=""
Debug("Rechts Klick")
ReleaseMouse(#True)
InputReleased = 1
msa=0
SetGadgetText(mausrel,"Win-Mode") ; "Rightclick to release"
EndIf ;rklick
;}
mfg
Dieter
Problem mit MouseButton(#PB_MouseButton_Right)
Problem mit MouseButton(#PB_MouseButton_Right)
Ich progge PureBasic weil Jägermeister nen dicken Kopf macht.
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
* diese MouseLib ist nur für Arbeit mit einem Screen.
* ExamineMouse darf nut 1x pro Hauptschleifendurchlauf aufgerufen werden.
dein codeschnüppsel ist mehr als unzureichend, da sieht man garnichts.
zumindest die komplette Hauptschleife müßte man sehen, um festzustellen,
ob du irgendwelche Flags falsch durchschleifst, wie du wo mit dem ReleaseMouse umgehst usw.usf.
und denk bitte in Zukunft beim Code posten an die Code-Tags.
* ExamineMouse darf nut 1x pro Hauptschleifendurchlauf aufgerufen werden.
dein codeschnüppsel ist mehr als unzureichend, da sieht man garnichts.
zumindest die komplette Hauptschleife müßte man sehen, um festzustellen,
ob du irgendwelche Flags falsch durchschleifst, wie du wo mit dem ReleaseMouse umgehst usw.usf.
und denk bitte in Zukunft beim Code posten an die Code-Tags.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
ohne Screen immer GetAsyncKeyState_(#Button) verwenden.
(Linke Maustaste: #VK_LBUTTON, rechte: #VK_RBUTTON)
geht übrigens auch als Ersatz für die Keyboardbefehle. (#VK_A, usw.)
Durch die Mauslib müsste aber doch eigentlich der Cursor verschwinden, oder?
(Linke Maustaste: #VK_LBUTTON, rechte: #VK_RBUTTON)
geht übrigens auch als Ersatz für die Keyboardbefehle. (#VK_A, usw.)
Durch die Mauslib müsste aber doch eigentlich der Cursor verschwinden, oder?
Ich verkaufe Rechtschreibfehler und jede menge GROßBUCHSTABEN. Alles unbegrenzt zu haben.
Sorry falls ich nerve.
Hab nun das Beispiel WindowedScreen.pb genommen und es dahin modifiziert das man mit der Rechten Maustaste die Maus wieder freigeben kann.
Unter Linux läuft der Code
Und unter Windows scheint es so als würde nach dem ersten Rechtsklick permant die Rechte Maustaste gedrückt werden.
Ich weiß nicht was ich da falsch mache. Für mich ist der Code logisch und richtig.
Zum Probieren muß der Code im Example Ordner gespeichert werden, damit der Pfad zum BMP passt.
Vielen Dank schonmal.
GreyEnt
Hab nun das Beispiel WindowedScreen.pb genommen und es dahin modifiziert das man mit der Rechten Maustaste die Maus wieder freigeben kann.
Unter Linux läuft der Code
Und unter Windows scheint es so als würde nach dem ersten Rechtsklick permant die Rechte Maustaste gedrückt werden.
Ich weiß nicht was ich da falsch mache. Für mich ist der Code logisch und richtig.
Zum Probieren muß der Code im Example Ordner gespeichert werden, damit der Pfad zum BMP passt.
GetAsyncKeyState_(#Button) möchte ich nicht verwenden weil der Code auch unter Linux laufen sollohne Screen immer GetAsyncKeyState_(#Button) verwenden.
(Linke Maustaste: #VK_LBUTTON, rechte: #VK_RBUTTON)
geht übrigens auch als Ersatz für die Keyboardbefehle. (#VK_A, usw.)
Vielen Dank schonmal.
GreyEnt
Code: Alles auswählen
;
; ------------------------------------------------------------
;
; PureBasic - Windowed Screen example file
; edit by GreyEnt
;
; (c) Fantaisie Software
;
; ------------------------------------------------------------
;
; Konstanten für Linux
;#Red=255
;#slash="/"
; Konstanten für Windows
#slash="\"
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
MessageRequester("Error", "Can't open the sprite system", 0)
End
EndIf
If OpenWindow(0, 0, 0, 340, 285, "Gadget and sprites!", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
ButtonGadget(1, 10, 10, 100, 25, "Grab input")
ButtonGadget(2, 120, 10, 100, 25, "Button 2")
ButtonGadget(3, 230, 10, 100, 25, "Button 3")
TextGadget (4, 10, 40, 300, 30, "Press 'LeftMouse Button' to ungrab keyboard and mouse")
If OpenWindowedScreen(WindowID(0), 10, 70, 320, 200, 0, 0, 0)
LoadSprite(0, "Data"+#slash+"PureBasicLogo.bmp")
Else
MessageRequester("Error", "Can't open windowed screen!", 0)
End
EndIf
EndIf
direction = 1
playerX = 1
playerY = 1
Repeat
Repeat
; Always process all the events to flush the queue at every frame
Event = WindowEvent()
Select Event
Case #PB_Event_CloseWindow
Quit = 1
Case #PB_Event_Gadget
; Do the normal application management here
Gadget = EventGadget()
Select Gadget
Case 1
InputReleased = 0
ReleaseMouse(#False)
SetGadgetText(4, "Press 'LeftMouse Button' to ungrab keyboard and mouse")
Case 2, 3
SetGadgetText(4, "Button "+Str(Gadget)+" pressed.")
EndSelect
EndSelect
Until Event = 0 ; Quit the event loop only when no more events are available
If InputReleased = 0
ExamineMouse()
If MouseButton(#PB_MouseButton_Right)=1
ReleaseMouse(#True)
InputReleased = 1
SetGadgetText(4, "Press Button to grab keyboard and mouse")
EndIf
; do the sprite & screen management at every frame
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Up) And playerY > 0 : playerY -3 : EndIf
If KeyboardPushed(#PB_Key_Down) And playerY < 280 : playerY +3 : EndIf
If KeyboardPushed(#PB_Key_Left) And playerX > 0 : playerX -3 : EndIf
If KeyboardPushed(#PB_Key_Right) And playerX < 300 : playerX +3 : EndIf
If KeyboardPushed(#PB_Key_F1)
ReleaseMouse(#True)
InputReleased = 1
SetGadgetText(4, "Press Button to grab keyboard and mouse")
EndIf
EndIf
; Clear the screen and draw our sprites
ClearScreen(RGB(0,0,0))
ClipSprite(0, 0, 0, x, x/8)
DisplaySprite(0, x, 100)
DisplaySprite(0, x, x)
DisplaySprite(0, 300-x, x)
DisplaySprite(0, playerX, playerY)
StartDrawing(ScreenOutput())
Line(MouseX()-5,MouseY(),10,0,#Red)
Line(MouseX(),MouseY()-5,0,10,#Red)
StopDrawing()
x + direction
If x > 300 : direction = -1 : EndIf ; moving back to the left with negative value
If x < 0 : direction = 1 : EndIf ; moving to the right with positive value
FlipBuffers() ; Inverse the buffers (the back become the front (visible)... and we can do the rendering on the back
Until Quit Or KeyboardPushed(#PB_Key_Escape)
Ich progge PureBasic weil Jägermeister nen dicken Kopf macht.