Seite 1 von 1

Maus+Key-Befehle für Ubuntu im Screen (Aktuell:05.02.2010)

Verfasst: 01.09.2009 22:50
von MarkusOhm
Hier mal ein Code der den SDL-Faulen(also jemanden wie mir) weiter helfen soll.

Der Code ist für den MouseX() und MouseY() "Bug" ab PureBasic 4.3+ geschrieben worden
Wichtig gemeint ist der Bug für MouseX() und MouseY() im zusammenhang mit Screen die Rückgabe war immer 0.

Auf Ubuntu "Koala" auch nicht auch hier war im Screen die Rückgabe sowohl bei MousX() als auch bei MouseDeltaX() die Rückgabe immer 0.
auch Locate() hatte keine Wirkung.

Bitte beachtet das dann auch die Tastaturabfrage über SDL erfolgen muss.(linux[Eingebunden])
(für Windows als Gegenstück damit man nicht den ganzen Code umschreiben muss bei zwei Systemen)

Code: Alles auswählen

CompilerSelect #PB_Compiler_OS
  CompilerCase #PB_OS_Linux
  ;---Linux--
    #Ohm_Key_Escape=#SDLK_ESCAPE
    ;---F_Tasten--
    #Ohm_Key_F1=#SDLK_F1
    #Ohm_Key_F2=#SDLK_F2
    #Ohm_Key_F3=#SDLK_F3
    #Ohm_Key_F4=#SDLK_F4
    #Ohm_Key_F5=#SDLK_F5
    #Ohm_Key_F6=#SDLK_F6
    #Ohm_Key_F7=#SDLK_F7
    #Ohm_Key_F8=#SDLK_F8
    #Ohm_Key_F9=#SDLK_F9
    #Ohm_Key_F10=#SDLK_F10
    #Ohm_Key_F11=#SDLK_F11
    #Ohm_Key_F12=#SDLK_F12
    ;--Nummern--
    #Ohm_Key_1=#SDLK_1
    #Ohm_Key_2=#SDLK_2
    #Ohm_Key_3=#SDLK_3
    #Ohm_Key_4=#SDLK_4
    #Ohm_Key_5=#SDLK_5
    #Ohm_Key_6=#SDLK_6
    #Ohm_Key_7=#SDLK_7
    #Ohm_Key_8=#SDLK_8
    #Ohm_Key_9=#SDLK_9
    #Ohm_Key_0=#SDLK_0
    ;---Alphabet--
    #Ohm_Key_Q=#SDLK_q
    #Ohm_Key_W=#SDLK_w
    #Ohm_Key_E=#SDLK_e
    #Ohm_Key_R=#SDLK_r
    #Ohm_Key_T=#SDLK_t
    #Ohm_Key_Z=#SDLK_z
    #Ohm_Key_U=#SDLK_u
    #Ohm_Key_I=#SDLK_i
    #Ohm_Key_O=#SDLK_o
    #Ohm_Key_P=#SDLK_p
    #Ohm_Key_A=#SDLK_a
    #Ohm_Key_S=#SDLK_s
    #Ohm_Key_D=#SDLK_d
    #Ohm_Key_F=#SDLK_f
    #Ohm_Key_G=#SDLK_g
    #Ohm_Key_H=#SDLK_h
    #Ohm_Key_J=#SDLK_j
    #Ohm_Key_K=#SDLK_k
    #Ohm_Key_L=#SDLK_l
    #Ohm_Key_Y=#SDLK_y
    #Ohm_Key_X=#SDLK_x
    #Ohm_Key_C=#SDLK_c
    #Ohm_Key_V=#SDLK_v
    #Ohm_Key_B=#SDLK_b
    #Ohm_Key_N=#SDLK_n
    #Ohm_Key_M=#SDLK_m
    ;----Richtung-----
    #Ohm_Key_Up=#SDLK_UP
    #Ohm_Key_Down=#SDLK_DOWN
    #Ohm_Key_Left=#SDLK_LEFT
    #Ohm_Key_Right=#SDLK_RIGHT
    #Ohm_Key_Space=#SDLK_SPACE
    #Ohm_Key_LeftControl=#SDLK_LCTRL
    #Ohm_Key_RightControl=#SDLK_RCTRL
    #Ohm_Key_Delete=#SDLK_BACKSPACE
    #Ohm_Key_Enter=#SDLK_RETURN
    #Ohm_Key_Entfernen=#SDLK_DELETE
    #Ohm_Key_Pause=#SDLK_PAUSE
    #Ohm_Key_Komma=#SDLK_COMMA
    #Ohm_Key_Minus=#SDLK_MINUS
    #Ohm_Key_Plus=#SDLK_PLUS
   ;---Numpad-
    #Ohm_NumPad_1=#SDLK_KP1
    #Ohm_NumPad_2=#SDLK_KP2
    #Ohm_NumPad_3=#SDLK_KP3
    #Ohm_NumPad_4=#SDLK_KP4
    #Ohm_NumPad_5=#SDLK_KP5
    #Ohm_NumPad_6=#SDLK_KP6
    #Ohm_NumPad_7=#SDLK_KP7
    #Ohm_NumPad_8=#SDLK_KP8
    #Ohm_NumPad_9=#SDLK_KP9
    #Ohm_NumPad_0=#SDLK_KP0
    #Ohm_NumPad_Enter=#SDLK_KP_ENTER
    #Ohm_NumPad_Komma=#SDLK_KP_EQUALS
    #Ohm_NumPad_Minus=#SDLK_KP_MINUS
    #Ohm_NumPad_Plus=#SDLK_KP_PLUS
    #Ohm_NumPad_Mal=#SDLK_KP_MULTIPLY
    #Ohm_NumPad_Geteilt=#SDLK_KP_DIVIDE
    
  CompilerCase #PB_OS_Windows_XP Or #PB_OS_Windows_7 Or #PB_OS_Windows_Vista
  ;---Windows--
    #Ohm_Key_Escape=#PB_Key_Escape
    ;---F_Tasten--
    #Ohm_Key_F1=#PB_Key_F1
    #Ohm_Key_F2=#PB_Key_F2
    #Ohm_Key_F3=#PB_Key_F3
    #Ohm_Key_F4=#PB_Key_F4
    #Ohm_Key_F5=#PB_Key_F5
    #Ohm_Key_F6=#PB_Key_F6
    #Ohm_Key_F7=#PB_Key_F7
    #Ohm_Key_F8=#PB_Key_F8
    #Ohm_Key_F9=#PB_Key_F9
    #Ohm_Key_F10=#PB_Key_F10
    #Ohm_Key_F11=#PB_Key_F11
    #Ohm_Key_F12=#PB_Key_F12
    ;--Nummern--
    #Ohm_Key_1=#PB_Key_1
    #Ohm_Key_2=#PB_Key_2
    #Ohm_Key_3=#PB_Key_3
    #Ohm_Key_4=#PB_Key_4
    #Ohm_Key_5=#PB_Key_5
    #Ohm_Key_6=#PB_Key_6
    #Ohm_Key_7=#PB_Key_7
    #Ohm_Key_8=#PB_Key_8
    #Ohm_Key_9=#PB_Key_9
    #Ohm_Key_0=#PB_Key_0
    ;---Alphabet--
    #Ohm_Key_Q=#PB_Key_Q
    #Ohm_Key_W=#PB_Key_W
    #Ohm_Key_E=#PB_Key_E
    #Ohm_Key_R=#PB_Key_R
    #Ohm_Key_T=#PB_Key_T
    #Ohm_Key_Z=#PB_Key_Z
    #Ohm_Key_U=#PB_Key_U
    #Ohm_Key_I=#PB_Key_I
    #Ohm_Key_O=#PB_Key_O
    #Ohm_Key_P=#PB_Key_P
    #Ohm_Key_A=#PB_Key_A
    #Ohm_Key_S=#PB_Key_S
    #Ohm_Key_D=#PB_Key_D
    #Ohm_Key_F=#PB_Key_F
    #Ohm_Key_G=#PB_Key_G
    #Ohm_Key_H=#PB_Key_H
    #Ohm_Key_J=#PB_Key_J
    #Ohm_Key_K=#PB_Key_K
    #Ohm_Key_L=#PB_Key_L
    #Ohm_Key_Y=#PB_Key_Y
    #Ohm_Key_X=#PB_Key_X
    #Ohm_Key_C=#PB_Key_C
    #Ohm_Key_V=#PB_Key_V
    #Ohm_Key_B=#PB_Key_B
    #Ohm_Key_N=#PB_Key_N
    #Ohm_Key_M=#PB_Key_M
    ;----Richtung----
    #Ohm_Key_Up=#PB_Key_Up
    #Ohm_Key_Down=#PB_Key_Down
    #Ohm_Key_Left=#PB_Key_Left
    #Ohm_Key_Right=#PB_Key_Right
    #Ohm_Key_Space=#PB_Key_Space
    #Ohm_Key_LeftControl=#PB_Key_LeftControl
    #Ohm_Key_RightControl=#PB_Key_RightControl
    #Ohm_Key_Delete=#PB_Key_Back
    #Ohm_Key_Enter=#PB_Key_Return
    #Ohm_Key_Entfernen=#PB_Key_Delete
    #Ohm_Key_Pause=#PB_Key_Pause
    #Ohm_Key_Komma=#PB_Key_Comma
    #Ohm_Key_Minus=#PB_Key_Minus
    #Ohm_Key_Plus=#PB_Key_Capital
     ;---Numpad-
    #Ohm_NumPad_1=#PB_Key_Pad1
    #Ohm_NumPad_2=#PB_Key_Pad2
    #Ohm_NumPad_3=#PB_Key_Pad3
    #Ohm_NumPad_4=#PB_Key_Pad4
    #Ohm_NumPad_5=#PB_Key_Pad5
    #Ohm_NumPad_6=#PB_Key_Pad6
    #Ohm_NumPad_7=#PB_Key_Pad7
    #Ohm_NumPad_8=#PB_Key_Pad8
    #Ohm_NumPad_9=#PB_Key_Pad9
    #Ohm_NumPad_0=#PB_Key_Pad0
    #Ohm_NumPad_Enter=#PB_Key_PadEnter
    #Ohm_NumPad_Komma=#PB_Key_PadComma
    #Ohm_NumPad_Minus=#PB_Key_Subtract
    #Ohm_NumPad_Plus=#PB_Key_Add
    #Ohm_NumPad_Mal=#PB_Key_Multiply
    #Ohm_NumPad_Geteilt=#PB_Key_Divide
    
CompilerEndSelect

;-------Proceduren-Linux-Windows-----
;----OhmStudios----2009----------------
;---Zur-freien-Benutzung----------------
;-------PureBasic4.40beta5--------------
;-----Screen-ohne-OpenGL--------------


Global ExamiMauKey.b=0
CompilerSelect #PB_Compiler_OS
  ;--fuer_Linux_User-
  CompilerCase #PB_OS_Linux
   Structure ZweiAchsen
      X.l
      Y.l
   EndStructure
   Global Event.SDL_Event
   Global EventMaus.ZweiAchsen
    Procedure.b ScreenInit()
      If SDL_Init_(#SDL_INIT_VIDEO|#SDL_INIT_AUDIO)<0
        ProcedureReturn 0
      Else
        ProcedureReturn 1
      EndIf
    EndProcedure
    Procedure.b Examiniere()
    EndProcedure
    Procedure.l MausBew_X()
      Shared EventMaus
      SDL_PollEvent_(@Event.SDL_Event)
      If Event\motion\type=#SDL_MOUSEMOTION
        EventMaus\X=Event\motion\x
      EndIf
      ProcedureReturn EventMaus\X
    EndProcedure
    Procedure.l MausBew_Y()
      Shared EventMaus
      SDL_PollEvent_(@Event.SDL_Event)
      If Event\motion\type=#SDL_MOUSEMOTION
        EventMaus\Y=Event\motion\y
      EndIf
      ProcedureReturn EventMaus\Y
    EndProcedure
    Procedure.b MausButton(Flag.l)
      SDL_PollEvent_(@Event.SDL_Event)
        If Flag=Event\button\Button And Event\button\type=#SDL_MOUSEBUTTONDOWN
          ProcedureReturn 1
        Else
          ProcedureReturn 0
        EndIf
    EndProcedure
    Procedure.b MausWheel()
        SDL_PollEvent_(@Event.SDL_Event)
      If Event\button\button=#SDL_BUTTON_WHEELDOWN And Event\button\type=#SDL_MOUSEBUTTONDOWN
        ProcedureReturn -1
      ElseIf Event\button\button=#SDL_BUTTON_WHEELUP And Event\button\type=#SDL_MOUSEBUTTONDOWN
        ProcedureReturn 1
      Else
        ProcedureReturn 0
      EndIf
EndProcedure
Procedure.b DruckTaste(Taste.i)
        SDL_PollEvent_(@Event.SDL_Event)
    If Event\key\type=#SDL_KEYDOWN
      If Event\key\keysym\sym=Taste
        ProcedureReturn 1
      Else
        ProcedureReturn -1
      EndIf
     Else
     ProcedureReturn-1
     EndIf
    EndProcedure
    Procedure BeendeMauKey()
      SDL_Quit_()
    EndProcedure
 
  CompilerCase #PB_OS_Windows_XP Or #PB_OS_Windows_7 Or #PB_OS_Windows_Vista
  ;--fuer_windows_Nutzer-

    Procedure.b ScreenInit()
      If InitKeyboard()=0 Or InitMouse()=0
        ProcedureReturn 0
      Else
        ProcedureReturn 1
     EndIf
    EndProcedure
    Procedure.l Examiniere()
      ExamiMauKey.b=4
      ExamineKeyboard()
      ExamineMouse()
    EndProcedure
    Procedure.l MausBew_X()
      If ExamiMauKey.b<>4
        ExamineMouse()
      EndIf
      reture.l=MouseX()
      ProcedureReturn reture.l
    EndProcedure
    Procedure.l MausBew_Y()
      If ExamiMauKey.b<>4
        ExamineMouse()
      EndIf
      reture.l=MouseY()
      ProcedureReturn reture.l
    EndProcedure
    Procedure.b MausButton(Flag.l)
      If ExamiMauKey.b<>4
        ExamineMouse()
      EndIf
      If MouseButton(Flag)=0
        ProcedureReturn 0
      Else
        ProcedureReturn 1
      EndIf
    EndProcedure
    Procedure.b MausWheel()
      If ExamiMauKey.b<>4
        ExamineMouse()
      EndIf
      If MouseWheel()>0
        ProcedureReturn 1
      ElseIf MouseWheel()<0
        ProcedureReturn -1
      Else
        ProcedureReturn 0
      EndIf
    EndProcedure
    Procedure.b DruckTaste(Taste.l)
      If ExamiMauKey.b<>4
        ExamineKeyboard()
      EndIf
      If 0=KeyboardPushed(Taste)
        ProcedureReturn -1
      Else
        ProcedureReturn 1
      EndIf
    EndProcedure
    Procedure BeendeMauKey()
    EndProcedure

CompilerEndSelect
Um Doppelposts zu vermeiden, ändere ich in diesem zusammenhang nur diesen Eintrag, sollte sich der Code mal ändern.

Am 5.2.10 einen Bug behoben...

Hilft der Code weiter?

Verfasst: 02.09.2009 19:57
von tmjuk
Ähh ja,
kannst du vielleicht ein wenig genauer darauf eingehen, welcher Bug hiermit ausgehebelt werden soll.
Weil so ganz ohne Hintergrundinfo, mpfhh, ja....

Torsten

Verfasst: 02.09.2009 20:03
von MarkusOhm
Bei mir funzte MouseX() und MouseY() nicht richtig, die Ausgabe war immer Null. Außer bei SDL-Programmierung da geht es.
Habe Ubuntu Hardy und PureBasic 4.31

Verfasst: 04.09.2009 15:44
von tmjuk
Ah ja, danke.

Torsten

Verfasst: 05.09.2009 13:17
von Vermilion
Bei mir funzte MouseX() und MouseY() nicht richtig, die Ausgabe war immer Null. Außer bei SDL-Programmierung da geht es.
Ist es so zu verstehen, das MouseX() und MouseY() bei dir nicht gingen, wenn du nicht mit einem Screen gearbeitet hast?

Verfasst: 05.09.2009 22:55
von tmjuk
Das wurde von Markus schon mal im Bugforum gepostet.
Also ich gehe davon aus, dass er weiss, dies geht nur mit Screen. Allerdings geht dies aus seinem Posting im Bugforum auch nicht hervor. :?

Das Beispiel ist ja mit Screen.


Torsten

Re: Maus+Key-Befehle für Ubuntu im Screen (Aktuell:04.11.2009)

Verfasst: 29.11.2009 11:25
von MarkusOhm
Zum Thema ich habe den Code komplett umgeschrieben nur is noch ein wenig langsam.
A) Hat irgendjemand eine Idee wie ich die Performance-Probleme lösen kann.


Schon im vorfeld danke.

Re: Maus+Key-Befehle für Ubuntu im Screen (Aktuell:03.01.2010)

Verfasst: 03.01.2010 10:17
von MarkusOhm
Nun sind hoffendlich alle Fehler beseitigt. Stand:05.02.2010
Wenn noch Fehler, Probleme, oder anderes bei den Include auftreten sollte dann postet es bitte hier.

(Gehört dieses Thema überhaupt noch hierher??? Windows + Linux
Wenn NEIN dann bitte verschieben, Danke.)

Re:

Verfasst: 03.01.2010 12:19
von Shadow-Gamer
MarkusOhm hat geschrieben:Bei mir funzte MouseX() und MouseY() nicht richtig, die Ausgabe war immer Null. Außer bei SDL-Programmierung da geht es.
Habe Ubuntu Hardy und PureBasic 4.31
MouseX() und MouseY() funzten also nicht, funktionierte denn wenigstens MouseDelta u. Locate?