Erweiterte Mouse-Funktionen

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Erweiterte Mouse-Funktionen

Beitrag von Scarabol »

Hi Leute,

ich hab mal ein Include geschrieben, dass die PB eigenen Mouse Funktionen erweitert.

Währe super wenn ihr es mal in einige eurer Codes einsetzen könntet und mir melden könntet ob es zu Fehlern kommt. Eigentlich sollte es keine geben...

Informationen zu den neuen Funktionen findet ihr im Code selber.

Code: Alles auswählen

;
; ------------------------------------------------------------
;
;   PureBasic - Advance-Mouse-Functions-Include-File
;
;    (c) 2007 - Scarabol
;     Version - 1.00
;        Date - 01.10.2007
;
; ------------------------------------------------------------
;

; +---ACHTUNG------------------------------------------------------------------------------------------------------+
; |                                                                                                                |
; | Der Code enthält Konstanten, Strukturen und Variabeln, die nicht oder nur mit bedacht geändert werden dürfen!  |
; | Konstanten:                                                                                                    |
; |   #AdvPB_MouseButton_Free                                                                                      |
; |   #AdvPB_MouseButton_Active                                                                                    |
; |   #AdvPB_MouseButton_Pushed                                                                                    |
; |   #AdvPB_MouseButton_Released                                                                                  |
; | Strukturen:                                                                                                    |
; |   ADVPB_MOUSEBUTTON                                                                                            |
; |   ADVPB_MOUSE                                                                                                  |
; | Variabeln:                                                                                                     |
; |   AdvPB_MouseVar.ADVPB_MOUSE                                                                                   |
; |   AdvPB_MouseDelayTimer.l                                                                                      |
; |                                                                                                                |
; +----------------------------------------------------------------------------------------------------------------+


; hier eine Liste der Macros & Funktionen mit Erläuterung

; InitMouse()
; -> ersetzt den PB eigenen Befehl
; 
; ExamineMouse()
; -> ersetzt den PB eigenen Befehl
; 
; MouseX()
; -> ersetzt den PB eigenen Befehl
; 
; MouseY()
; -> ersetzt den PB eigenen Befehl
; 
; MouseWheel()
; -> ersetzt den PB eigenen Befehl
; 
; MouseLocate()
; -> ersetzt den PB eigenen Befehl
; 
; SetMouseSpeed(var.f)
; -> Erwartet eine Float Variable die später mit dem Delta Wert multipliziert wird.
; -> Dieser Befehl ändert sowohl die Geschwindigkeit in x- als auch in y-Richtung.
; 
; SetMouseSpeedX(var.f)
; -> Dieser Befehl ändert nur die Geschwindigkeit in x-Richtung
; 
; GetMouseSpeedX()
; -> Dieser Befehl gibt den aktuellen Wert für die Geschwindigekeit in x-Richtung zurück
; 
; SetMouseSpeedY(var.f)
; -> Dieser Befehl ändert nur die Geschwindigkeit in y-Richtung
; 
; GetMouseSpeed()
; -> Dieser Befehl gibt den aktuellen Wert für die Geschwindigkeit in y-Richtung zurück
; 
; MouseButton(Button)
; -> ersetzt den PB eigenen Befehl
; -> es können ebenfalls die Konstanten
;    (#PB_MouseButton_Left, #PB_MouseButton_Right, #PB_MouseButton_Middle) verwendet werden.
; -> Rückgabewerte:
;     - #AdvPB_MouseButton_Free     (0)
;     - #AdvPB_MouseButton_Active   (1)
;     - #AdvPB_MouseButton_Pushed   (2)
;     - #AdvPB_MouseButton_Released (3)
; 
; MouseButtonLast(Button)
; -> gibt den letzten Status des Button zurück
; -> auch dieser Befehl unterstützt die PB-Konstanten
; 
; MouseActiveX(Button)
; -> gibt die x-Koordinate zurück als der Button den Status #AdvPB_MouseButton_Active hatte.
; 
; MouseActiveY(Button)
; -> gibt die y-Koordinate zurück als der Button den Status #AdvPB_MouseButton_Active hatte.
; 
; MouseReleasedX(Button)
; -> gibt die x-Koordinate zurück als der Button den Status #AdvPB_MouseButton_Released hatte.
; 
; MouseReleasedY(Button)
; -> gibt die y-Koordinate zurück als der Button den Status #AdvPB_MouseButton_Released hatte.
; 
; MouseDelay(Button)
; -> gibt die Zeit zurück die der Button zuletzt gedrückt war.
; 
; SetWheelSpeed(var.f)
; -> ändert die Geschwindigkeit des Mausrades
; 
; GetWheelSpeed(var.f)
; -> gibt die Geschwindigkeit des Mausrades zurück

Enumeration
  #AdvPB_MouseButton_Free
  #AdvPB_MouseButton_Active
  #AdvPB_MouseButton_Pushed
  #AdvPB_MouseButton_Released
EndEnumeration

Structure ADVPB_MOUSEBUTTON
  state.l
  laststate.l
  delaystart.l
  delay.l
  activex.f
  activey.f
  releasedx.f
  releasedy.f
EndStructure

Structure ADVPB_MOUSE
  DelayTimer.l
  ScreenX.f
  ScreenY.f
  WheelY.f
  SpeedX.f
  SpeedY.f
  SpeedWheel.f
  B.ADVPB_MOUSEBUTTON[3]
EndStructure

Define AdvPB_MouseVar.ADVPB_MOUSE

Procedure AdvPB_InitMouse()
  Protected i
  Shared AdvPB_MouseVar.ADVPB_MOUSE
  If InitMouse() = 0
    ProcedureReturn 0
  EndIf
  With AdvPB_MouseVar
    For i = 0 To 2
      \B[i]\state = #AdvPB_MouseButton_Free
      \B[i]\delaystart = ElapsedMilliseconds()
    Next
  EndWith
  AdvPB_MouseVar\SpeedX = 1
  AdvPB_MouseVar\SpeedY = 1
EndProcedure

Procedure AdvPB_ExamineMouse()
  Protected i
  Shared AdvPB_MouseVar.ADVPB_MOUSE
  Shared AdvPB_MouseVar\DelayTimer
  AdvPB_MouseVar\DelayTimer = ElapsedMilliseconds()
  ExamineMouse()
  With AdvPB_MouseVar
    \ScreenX + MouseDeltaX() * AdvPB_MouseVar\SpeedX
    \ScreenY + MouseDeltaY() * AdvPB_MouseVar\SpeedY
    \WheelY  + MouseWheel()  * AdvPB_MouseVar\SpeedWheel
    For i = 0 To 2
      \B[i]\laststate = \B[i]\state
      Select \B[i]\laststate
      Case #AdvPB_MouseButton_Active, #AdvPB_MouseButton_Pushed
        If MouseButton(i+1)
          \B[i]\state = #AdvPB_MouseButton_Pushed
        Else
          \B[i]\state = #AdvPB_MouseButton_Released
          \B[i]\releasedx = \ScreenX
          \B[i]\releasedy = \ScreenY
        EndIf
        \B[i]\delay = AdvPB_MouseVar\DelayTimer - \B[i]\delaystart
      Case #AdvPB_MouseButton_Released, #AdvPB_MouseButton_Free
        If MouseButton(i+1)
          \B[i]\state = #AdvPB_MouseButton_Active
          \B[i]\delay = 0
          \B[i]\delaystart = AdvPB_MouseVar\DelayTimer
          \B[i]\activex = \ScreenX
          \B[i]\activey = \ScreenY
        Else
          \B[i]\state = #AdvPB_MouseButton_Free
        EndIf
      EndSelect
    Next
  EndWith
EndProcedure

Macro InitMouse()
  AdvPB_InitMouse()
EndMacro

Macro ExamineMouse()
  AdvPB_ExamineMouse()
EndMacro

Macro MouseX()
  AdvPB_MouseVar\ScreenX
EndMacro

Macro MouseY()
  AdvPB_MouseVar\ScreenY
EndMacro

Macro SetMouseSpeed(s)
  AdvPB_MouseVar\SpeedX = s
  AdvPB_MouseVar\SpeedY = s
EndMacro

Macro SetMouseSpeedX(s)
  AdvPB_MouseVar\SpeedX = s
EndMacro

Macro GetMouseSpeedX()
  AdvPB_MouseVar\SpeedX
EndMacro

Macro SetMouseSpeedY(s)
  AdvPB_MouseVar\SpeedY = s
EndMacro

Macro GetMouseSpeedY()
  AdvPB_MouseVar\SpeedY
EndMacro

Macro MouseButton(Button)
  AdvPB_MouseVar\B[Button-1]\state
EndMacro

Macro MouseButtonLast(Button)
  AdvPB_MouseVar\B[Button-1]\laststate
EndMacro

Macro MouseActiveX(Button)
  AdvPB_MouseVar\B[Button-1]\activex
EndMacro

Macro MouseActiveY(Button)
  AdvPB_MouseVar\B[Button-1]\activey
EndMacro

Macro MouseReleasedX(Button)
  AdvPB_MouseVar\B[Button-1]\releasedx
EndMacro

Macro MouseReleasedY(Button)
  AdvPB_MouseVar\B[Button-1]\releasedy
EndMacro

Macro MouseDelay(Button)
  AdvPB_MouseVar\B[Button-1]\delay
EndMacro

Macro SetWheelSpeed(s)
  AdvPB_MouseVar\SpeedWheel = s
EndMacro

Macro GetWheelSpeed()
  AdvPB_MouseVar\SpeedWheel
EndMacro

Macro MouseWheel()
  AdvPB_MouseVar\WheelY
EndMacro

Macro MouseLocate(x, y)
  AdvPB_MouseVar\ScreenX = x
  AdvPB_MouseVar\ScreenY = y
EndMacro
Gruß
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag von Thomas »

Nur ne Frage:

seit wann kann man nach MACRO die normalen PB befehle schreiben?; was macht das für einen Sinn ? :?
(hab das noch nie gesehen, kann mir das mal jemand erklären :oops: ?)

Code: Alles auswählen

Macro MouseLocate(x, y) 
  AdvPB_MouseVar\ScreenX = x 
  AdvPB_MouseVar\ScreenY = y 
EndMacro
v6.00
xperience2003
Beiträge: 972
Registriert: 04.10.2004 18:42
Computerausstattung: Amiga, LinuxMint, Windows7
Wohnort: gotha
Kontaktdaten:

Beitrag von xperience2003 »

was macht das für einen Sinn ?
wenn man zb den purebefehlen eine bessere handlungsfaehigkeit verpassen will, aber keine extraproceduren schreiben will und damit seine saemtlichen codes umschreiben muss?
amiga rulez...
Rebirth Software
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag von Scarabol »

Sonst währ das Include ja gar nicht so einfach zu benutzen...

Die Macros haben auch nix mit den Proceduren zu tun, diese werden ja vor dem kompilieren ausgeführt...

Gruß
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag von Thomas »

also wird hier nicht mehr der PB-Befehl verwendet, sondern das, was dann innerhalb MACRO steht, oder?
v6.00
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag von Scarabol »

Genau :allright:

Gruß
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Antworten