Seite 1 von 2

Mausklick-Abfrage

Verfasst: 06.03.2009 15:13
von Sunny
Ich mal wieder...

Ich wollte mal wissen, mit welchem befehl man abfragt, ob eine Maustaste gedrückt wurde??? Aber ohne dafür nen Screen oder nen WindowedScreen öffnen zu müssen???

Verfasst: 06.03.2009 15:15
von Kaeru Gaman
ich wollte mal wissen, ob dein Fragezeichen klemmt?

Verfasst: 06.03.2009 15:21
von Kaeru Gaman
also, ernsthafte Antwort:

du kannst innerhalb deiner Eventverarbeitung den Eventtype prüfen,
auf Gadgets die das unterstützen.
http://www.purebasic.com/german/documen ... ttype.html


oder

über Win-API kannst du den Virtual Key für die Maustaste abfragen,
das ist dann Gadgetunabhängig, aber auch Fensterübergreifend.
GetAsyncKeyState_(#VK_LBUTTON)

Verfasst: 09.03.2009 01:32
von Sunny
OK, Danke für die Antwort, das mit WinAPI sieht schonmal ganz gut aus, aber eins versteh ich nicht:

Code: Alles auswählen

Repeat
Delay(10)
  
Until GetAsyncKeyState_(#VK_LBUTTON)
End
Wieso endet das Programm automatisch nach dem Start, wobei dieses Programm

Code: Alles auswählen

Repeat
Delay(10)
  
Until GetAsyncKeyState_(#VK_LBUTTON)
End
erst endet, nachdem ich die Esc-Taste drücke?

Verfasst: 09.03.2009 01:38
von Kiffi
@Sunny: Das sind beides identische Codes.

Grüße ... Kiffi

Verfasst: 09.03.2009 04:18
von Sunny
Verzeihung, mein Fehler...
Hier nochmal die Codes (jetzt aber richtig):

Also Dieser Code hier funktioniert nicht, wenn ich die linke Maustaste drücke:

Code: Alles auswählen

Repeat
Delay(10)
 
Until GetAsyncKeyState_(#VK_LBUTTON)
End
Dieser Code hier allerdings Funktioniert, wenn ich die Escapetaste drücke:

Code: Alles auswählen

Repeat
Delay(10)
 
Until GetAsyncKeyState_(#VK_ESCAPE)
End
Woran liegt das?

Verfasst: 09.03.2009 04:20
von Kaeru Gaman
keine Ahnung, was du da verbuchselt hast...

probier mal sowas:

Code: Alles auswählen

CreateImage(0,16,16)
  StartDrawing(ImageOutput(0))
    Line( 0,  0, 16, 16,$00FFFF)
    Line( 0, 16, 16,-16,$00FFFF)
  StopDrawing()
OpenWindow(0, #PB_Ignore,0, 400,300,"Bla")
  ImageGadget(0,16,16,16,16,ImageID(0))
Repeat
  Event = WaitWindowEvent()
  If GetAsyncKeyState_(#VK_LBUTTON)
    ResizeGadget(0,WindowMouseX(0),WindowMouseY(0),#PB_Ignore,#PB_Ignore)
  EndIf
Until Event = #PB_Event_CloseWindow

Verfasst: 09.03.2009 04:48
von Sunny
Hmm...
Das Funktioniert seltsamerweise.

Verfasst: 09.03.2009 05:46
von Kaeru Gaman
nein, das funktioniert logischerweise...



> Also Dieser Code hier funktioniert nicht, wenn ich die linke Maustaste drücke:

da scheint noch was in der queue zu hängen, frag mich nicht wieso...
so gehts:

Code: Alles auswählen

GetAsyncKeyState_(#VK_LBUTTON)
Repeat
Delay(10)
 
Until GetAsyncKeyState_(#VK_LBUTTON)
End 

Verfasst: 09.03.2009 16:06
von Sunny
Ok, ich hab zwar keine Ahnung, warum das so sein muss aber es funktionert...

Vielen Dank