ExamineMouse() killt Mauszeiger!

Anfängerfragen zum Programmieren mit PureBasic.
PB42
Beiträge: 243
Registriert: 13.10.2005 03:21

ExamineMouse() killt Mauszeiger!

Beitrag von PB42 »

Hallo,

in folgendem (blöden) Testbeispiel soll die weiße Box immer dann erscheinen, wenn die linke Maustaste gedrückt wird und sich zugleich der Mauszeiger über der schwarzen Fläche befindet. Mit der Funktion Mousebutton(1) klappt das nicht und wenn ich ExamineMouse() einfüge, verschwindet nach dem Starten des Testbeispiels der Mauszeiger komplett vom Bildschirm!!! Der Code:

Code: Alles auswählen

InitSprite()
InitMouse()
OpenWindow(0,0,0,500,550,"",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget)
OpenWindowedScreen(WindowID(0), 0, 50, 450, 450, 0, 0, 0)
CreateGadgetList(WindowID(0))

Repeat
Event = WaitWindowEvent(20) 
EventGadget     = EventGadget() 
  
  If Mousebutton(1) And WindowMouseX(0) > 0 And WindowMouseY(0) > 0
  StartDrawing(ScreenOutput())
  Box(50,200,50,200,RGB(220,220,220))
  StopDrawing()
  FlipBuffers()
  Else 
  StartDrawing(ScreenOutput())
  Box(50,200,50,200,RGB(0,0,0))
  StopDrawing()
  FlipBuffers()
  EndIf   

Until event = #PB_Event_CloseWindow
Als Alternative habe ich versucht:

Code: Alles auswählen

InitSprite()
InitMouse()
OpenWindow(0,0,0,500,550,"",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget)
OpenWindowedScreen(WindowID(0), 0, 50, 450, 450, 0, 0, 0)
CreateGadgetList(WindowID(0))

Repeat
Event = WaitWindowEvent(20) 
EventGadget     = EventGadget() 
ExamineMouse()   
  
  If event = #WM_lbuttondown And WindowMouseX(0) > 0 And WindowMouseY(0) > 0
  StartDrawing(ScreenOutput())
  Box(50,200,50,200,RGB(220,220,220))
  StopDrawing()
  FlipBuffers()
  Else 
  StartDrawing(ScreenOutput())
  Box(50,200,50,200,RGB(0,0,0))
  StopDrawing()
  FlipBuffers()
  EndIf
   

Until event = #PB_Event_CloseWindow
Geht aber auch nicht, weil dann die weiße Box nur kurz aufblitzt. Wie muß der Code lauten, damit die linke Maustaste erfolgreich eingebunden werden kann? Danke.

Edit: #WM_lbuttondown funktioniert, wenn man bei Event = WaitWindowEvent(20) die 20 aus den Klammern rausläßt, aber mit Mousebutton(1) muß das doch auch irgendwie gehen.

Edit: Ich habe die Fassung PureBasic 4.0
PB42
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ExamineMouse() ist für den Screenmode.

das zweite ist schon auf dem richtigen weg

> Geht aber auch nicht, weil dann die weiße Box nur kurz aufblitzt.

das ist auch richtig so, weil das Event #WM_lbuttondown
nur im allerersten frame stattfindet, wenn du drückst,
nicht wenn du gedrückt hältst.

du kannst das mit nem Flag lösen:

Code: Alles auswählen

If WindowMouseX(0) > 0       ; genügt, weil -1 wenn zeiger außerhalb
  If event = #WM_lbuttondown 
    Da = 1
  EndIf
  If event = #WM_lbuttonup 
    Da = 0
  EndIf
EndIf

  StartDrawing(ScreenOutput())
    If Da
      Frontcolor($DCDCDC)
    Else
      Frontcolor(0)
    EndIf 
    Box(50,200,50,200) 
  StopDrawing() 
FlipBuffers() 
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
PB42
Beiträge: 243
Registriert: 13.10.2005 03:21

Beitrag von PB42 »

Das klappt. Danke!
Antworten