Fenster mit vertikaler Scrollbar

  • Hab nun den halben Nachmittag damit verbracht herauszufinden wie ich solch eine Scrollbar einbaue und diese dynamisch an die Gesamthöhe anpasse. Muss man erstmal drauf kommen, dass _GUIScrollBars_Init die Gesamthöhe gerne noch durch 16 geteilt haben möchte. In der Hilfe stand dazu jedenfalls nichts. Nun gut soweit funktioniert meine Scrollbar nun, aber ich bräuchte noch einen Tipp wie man erreicht, dass das Fenster auch per Mausrad gescrollt werden kann. Derzeit funktioniert das bei mir nur durch klick auf die Leiste selbst oder die beiden hoch/runter Buttons.

    Einmal editiert, zuletzt von misterspeed (13. März 2011 um 22:57)

  • Da müh ich mich so ab mit rechnen und dann gibts da so ne schöne UDF die den Unsinn selbst erledigt :D
    Hab nun aber trotzdem nur die Mousewheel Funktion aus der UDF gemoppst und den Rest belassen.

    Da mir die Mousewheel Funktion aus der UDF zu langsam war habe ich ausserdem noch eine kleine Modifikation vorgenommen wodurch nun 7 Zeilen anstatt einer gescrollt werden.
    Wer das ganze auch bei sich einbauen will ohne die komplette UDF zu includen:

    [autoit]


    #include <SendMessage.au3>

    [/autoit][autoit][/autoit][autoit]

    ; hier dann natürlich noch sämtlichen anderen includes und eure funktionierende Scrollbar
    ; Danach noch die Mousewheel Funktion registrieren

    [/autoit][autoit][/autoit][autoit]

    GUIRegisterMsg($WM_MOUSEWHEEL, "_Scrollbars_WM_MOUSEWHEEL")

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ; #INTERNAL_USE_ONLY#============================================================================================================
    ; Name...........: _Scrollbars_WM_MOUSEWHEEL
    ; Description ...: GUIRegisterMsg procedure for vertical mouse wheel scroll
    ; Syntax ........: _Scrollbars_WM_MOUSEWHEEL($hWnd, $iMsg, $wParam, $lParam)
    ; Return values .: None
    ; Author ........: Based on code from MrCreator & Malkey
    ; Remarks .......: This function is used internally by _Scrollbars_Generate
    ; ===============================================================================================================================
    Func _Scrollbars_WM_MOUSEWHEEL($hWnd, $iMsg, $wParam, $lParam)

    [/autoit][autoit][/autoit][autoit]

    #forceref $hWnd, $iMsg, $lParam
    Local $iDirn, $iDelta = BitShift($wParam, 16) ; Mouse wheel movement

    [/autoit][autoit][/autoit][autoit]

    If BitAND($wParam, 0x0000FFFF) Then ; If Ctrl or Shft pressed move Horz scrollbar
    $iDirn = $SB_LINERIGHT
    If $iDelta > 0 Then $iDirn = $SB_LINELEFT
    For $i = 1 To 7
    _SendMessage($hWnd, $WM_HSCROLL, $iDirn)
    Next
    Else ; Move Vert scrollbar
    $iDirn = $SB_LINEDOWN
    If $iDelta > 0 Then $iDirn = $SB_LINEUP
    for $i = 1 to 7 ; Schleife regelt die Scroll Geschwindigkeit, je mehr Durchläufe desto schneller
    _SendMessage($hWnd, $WM_VSCROLL, $iDirn)
    Next

    [/autoit][autoit][/autoit][autoit]

    EndIf

    [/autoit][autoit][/autoit][autoit]

    Return $GUI_RUNDEFMSG

    [/autoit][autoit][/autoit][autoit]

    EndFunc ;==>_Scrollbars_WM_MOUSEWHEEL

    [/autoit]