Maustasten abfragen ohne Initmouse???

Für allgemeine Fragen zur Programmierung mit PureBasic.
Agent
Beiträge: 296
Registriert: 13.09.2004 11:28
Kontaktdaten:

Maustasten abfragen ohne Initmouse???

Beitrag von Agent »

Hallo Leute.

Kann ich die Maustasten auch ohne initmouse abfragen? Initmouse funzt ja nur über directX. Ich brauche es aber ohne directX, da es sich um ein System-/Hilfs-Tool handelt.

Danke.
Agent_Sasori
It's not a bug - it's a feature!
http://www.StephenKalisch.de | http://www.ria-tec.com | http://www.dirsync.de
Benutzeravatar
ChaOsKid
Beiträge: 66
Registriert: 29.08.2004 15:07
Wohnort: Oktoberfest

Beitrag von ChaOsKid »

hi Agent,

Code: Alles auswählen

OpenWindow(0, 0, 0, 300 , 200, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered, "oink") 
Repeat 
  Event = WaitWindowEvent() 
  Select Event
    Case #WM_RBUTTONDOWN ; rechte Maustaste
      Debug "#WM_RBUTTONDOWN"
    Case #WM_MBUTTONDOWN ; mittlere Maustaste
      Debug "#WM_MBUTTONDOWN"
    Case #WM_LBUTTONDOWN ; linke Maustaste
      Debug "#WM_LBUTTONDOWN"
  EndSelect 
Until Event = #PB_EventCloseWindow
mfG
Tobi
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag von Laurin »

Und wie bekommt man mit, wo die Maus geklickt hat?
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Leo
Beiträge: 420
Registriert: 26.10.2004 18:26

Beitrag von Leo »

Code: Alles auswählen

Procedure DebugMouse()
  Debug WindowMouseX()
  Debug WindowMouseY()
EndProcedure
OpenWindow(0, 0, 0, 300 , 200, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered, "oink") 
Repeat 
  Event = WaitWindowEvent() 
  Select Event 
    Case #WM_RBUTTONDOWN ; rechte Maustaste 
      Debug "#WM_RBUTTONDOWN" 
      DebugMouse()
    Case #WM_MBUTTONDOWN ; mittlere Maustaste 
      Debug "#WM_MBUTTONDOWN" 
      DebugMouse()
    Case #WM_LBUTTONDOWN ; linke Maustaste 
      Debug "#WM_LBUTTONDOWN" 
      DebugMouse()
  EndSelect 
Until Event = #PB_EventCloseWindow
Einfach mit WindowMouseX() und WindowMouseY()
Agent
Beiträge: 296
Registriert: 13.09.2004 11:28
Kontaktdaten:

Beitrag von Agent »

OOOHHH Mann...

DAS ist mir jetzt peinlich.

Kenn ich alles schon. Da stand ich (mal wieder) extrem auf der langen Leitung. LOL


Admin:
Topic bitte löschen *kopfschüttel*

sorry folks für die arbeit....peitscht-mich.
Agent_Sasori
It's not a bug - it's a feature!
http://www.StephenKalisch.de | http://www.ria-tec.com | http://www.dirsync.de
Agent
Beiträge: 296
Registriert: 13.09.2004 11:28
Kontaktdaten:

Beitrag von Agent »

hm...ganz so einfach ists dann im meinem prog doch nicht, weil

hier mal aus'm kopf was passiert (das ganze coding wäre zuviel)

repeat...

select windowevent()
case #pb_event_menu
select eventmenuid()
case ...
default <--- hier wirds interessant, jemand hat im menu was ausgewählt
### An dieser Stelle möchte ich wissen, ob er User, wenn er die linke Maustaste drückt, auch die rechte gedrückt hatte
ODER
### Ob der User z.b. die linke Shift gedrückt hatte

endselect
endselect....

Natürlich frage ich in der schleife viele case's ab, hier nur die Grobstruktur. Leider geht das mit

default
If WindowEvent()=#WM_RBUTTONDOWN And WindowEvent()=#WM_LBUTTONDOWN
RunProgram(clipboarddata(clipboard_set))
EndIf

nicht. Warum? Kann ich nicht abfragen ob 2 Tasten zugleich gedrückt wurden? Cool wäre auch, wenn RunProgramm ebenfalls gestartet wird, wenn der User eine bestimmte Taste gedrückt hat. keyboardreleased() geht ja wieder nur mit initkeyboard und directx... :(

Also, wie frag ich ab, ob ein User, wenn er in einem PopUpMenü eine Auswahl trifft (mit linker Maustaste - standart), die rechte gerade gedrückt hatte? Das Programm soll in diesem Fall etwas anderes machen.
Agent_Sasori
It's not a bug - it's a feature!
http://www.StephenKalisch.de | http://www.ria-tec.com | http://www.dirsync.de
Leo
Beiträge: 420
Registriert: 26.10.2004 18:26

Beitrag von Leo »

Tastendruck geht entweder mit GetAsyncState_(taste) oder so (guck auf www.microsoft.com unter msdn) oder mit AddKeyboardShurtcut (guck in der hilfe..)

Und ein WindowEvent kann doch nicht gleichzeitig zwei sachen zurück geben du kannst dir zwei variablen anlegen, lbutton und rbutton, jetzt setzt du lbutton auf 1, wenn das event #WM_LBUTTONDOWN ist und rbutton auf 1, wenn das event #WM_RBUTTONDOWN ist, und lbutton auf 0 wenn das event #WM_LBUTTONUP ist und rbutton auf 0, wenn das event #WM_RBUTTONUP ist, also:

Code: Alles auswählen

hWnd=OpenWindow(0,0,0,400,300,#PB_Window_ScreenCentered|#PB_Window_SystemMenu,"lbutton,rbutton")
lbutton.l:rbutton.l

Repeat
  Select WaitWindowEvent()
    Case #WM_LBUTTONDOWN : lbutton = 1
    Case #WM_LBUTTONUP   : lbutton = 0
    Case #WM_RBUTTONDOWN : rbutton = 1
    Case #WM_RBUTTONUP   : rbutton = 0
    Case #WM_CLOSE : Quit = #True 
  EndSelect
  
  If lbutton = 1 And rbutton = 1
    Debug "Beide Maustasten gedrückt"
  EndIf
  
Until Quit = #True 
Agent
Beiträge: 296
Registriert: 13.09.2004 11:28
Kontaktdaten:

Beitrag von Agent »

Danke Leo. Ich probiers mal. hab aber auch was gefunden:


If GetAsyncKeyState_(#VK_RBUTTON)
runprog...
endif
Agent_Sasori
It's not a bug - it's a feature!
http://www.StephenKalisch.de | http://www.ria-tec.com | http://www.dirsync.de
Antworten