Jump to content
Melba23

Scrollbars Made Easy - New version 13 May 18

Recommended Posts

tatane,

Using _GUIScrollbars_Restore to reset the scrollbars is indeed the right way - that is why the function is there!

Quote

Could you have a look at the commented stuff please

I wondered when you would get round to that!

M23


Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

Sorry I didn't find any sort of example in the forum. Is it complicated ?

Share this post


Link to post
Share on other sites

tatane,

I have not even looked at the code yet - be patient!

M23


Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

tatane,

The buttons seems to work well - if you disable the label so that they fire and use the correct maths to regenerate the scrollbars:

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <MsgBoxConstants.au3>
#include <GUIScrollbars_Ex_Test.au3>

Global $iGUI_1_MinX = 300, $iGUI_1_MinY = 200
Global $iGUI_1_MaxX, $iGUI_1_MaxY

Global $diviseur = 1

Local $iMax_Scroll = 600

Local $hGUI = GUICreate("Resizeable Test ", 400, 400, Default, Default, $WS_SIZEBOX)
GUISetBkColor(0xCCFFCC)

Local $cStart = GUICtrlCreateDummy()
GUICtrlCreateLabel("", 0, 0, $iMax_Scroll, $iMax_Scroll)
GUICtrlSetBkColor(-1, 0xFFCCCC)
GUICtrlSetState(-1, $GUI_DISABLE) ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< So buttons work
GUICtrlCreateLabel("Use me to check that the scrolled position" & @CRLF & "is maintained if possible during resizing", 50, 50, 300, 50)
GUICtrlSetBkColor(-1, 0xCCCCFF)
GUICtrlCreateLabel("", 0, 0, 10, 10)
GUICtrlSetBkColor(-1, 0xFF0000)
GUICtrlCreateLabel("", 0, $iMax_Scroll- 10, 10, 10)
GUICtrlSetBkColor(-1, 0xFF0000)
GUICtrlCreateLabel("", $iMax_Scroll - 10, 0, 10, 10)
GUICtrlSetBkColor(-1, 0xFF0000)
GUICtrlCreateLabel("", 590, 590, 10, 10)
GUICtrlSetBkColor(-1, 0xFF0000)
Local $cEnd = GUICtrlCreateDummy()
For $i = $cStart To $cEnd
    GUICtrlSetResizing($i, $GUI_DOCKALL)
Next
$b_testminus = GUICtrlCreateButton("zoom -", 5, 5)
$b_testplus = GUICtrlCreateButton("zoom +", 55, 5)

; Generate initial scrollbars - required scrollbar handlers registered
_GUIScrollbars_Generate($hGUI, $iMax_Scroll, $iMax_Scroll)
; Intialise for resizing
Local $aMaxSize = _GUIScrollbars_ReSizer($hGUI, $iMax_Scroll, $iMax_Scroll, False)

GUISetState(@SW_SHOW)

$iGUI_1_MaxX = $aMaxSize[0]
$iGUI_1_MaxY = $aMaxSize[1]

ConsoleWrite("Max Size: " & $iGUI_1_MaxX & " - " & $iGUI_1_MaxY & @CRLF)

GUIRegisterMsg($WM_GETMINMAXINFO, "_WM_GETMINMAXINFO")

While 1
    $nmsg = GUIGetMsg()
    Switch $nmsg
        Case $b_testplus
            $diviseur = $diviseur * 2
            ConsoleWrite('Plus - $diviseur = ' & $diviseur & @CRLF)
            _GUIScrollbars_Generate($hGUI, $iMax_Scroll * $diviseur, $iMax_Scroll * $diviseur)

        Case $b_testminus
            If $diviseur > 1 Then
                $diviseur = $diviseur / 2
                ConsoleWrite('Minus - $diviseur = ' & $diviseur & @CRLF)
                _GUIScrollbars_Generate($hGUI, $iMax_Scroll * $diviseur, $iMax_Scroll * $diviseur) ; Note using * and not /
            EndIf

        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
    ;Sleep(10) ; <<<<<<<<<<<<<<<<<<<<<< Not needed with GUIGetMsg
WEnd

GUIRegisterMsg($WM_GETMINMAXINFO, "")
GUIDelete($hGUI)


Func _WM_GETMINMAXINFO($hWnd, $iMsg, $wParam, $lParam)
    Local $tagMaxinfo = DllStructCreate("int;int;int;int;int;int;int;int;int;int", $lParam)
    DllStructSetData($tagMaxinfo, 7, $iGUI_1_MinX)  ; min X
    DllStructSetData($tagMaxinfo, 8, $iGUI_1_MinY)   ; min Y
    DllStructSetData($tagMaxinfo, 9, $iGUI_1_MaxX) ; max X
    DllStructSetData($tagMaxinfo, 10, $iGUI_1_MaxY) ; max Y
    Return 0
EndFunc   ;==>_WM_GETMINMAXINFO

M23


Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

Thank you Melba23.

Just a last thing. When your start the script, enlarge at max the GUI, zoom+ one or several time, then zoom- to get back to $diviseur = 1, the scrollbars stay visible. They should be hide. If I hide them manually, it works but i can still scroll while it is at max size.

Edited by tatane

Share this post


Link to post
Share on other sites

tatane,

Try amending the script like this:

Case $b_testminus
    If $diviseur > 1 Then
        $diviseur = $diviseur / 2
        ConsoleWrite('Minus - $diviseur = ' & $diviseur & @CRLF)
        _GUIScrollbars_Generate($hGUI, $iMax_Scroll * $diviseur, $iMax_Scroll * $diviseur) ; Note using * and not /
        If $diviseur = 1 Then
            _GUIScrollbars_ReSizer($hGUI, $iMax_Scroll, $iMax_Scroll, True, False)
        EndIf
    EndIf

That cures the problem  as far as I can see.

M23


Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

tatane,

I think you are trying to do too much with the Scrollbars_Ex  UDF. As I mentioned above, trying to program scrollbars in resizable GUIs is the hardest thing I have ever tried to do in AutoIt given the amount of "behind the scenes" stuff Windows does when resizing and hiding/showing scrollbars - the client area size changes, the main content changes magnification to fit into the new sized area, etc, etc. Further testing of the changes that I made in the Beta code above has shown me that they could already lead to problems in other circumstances, so I am not prepared to incorporate them - let alone make further alterations.

However, I think we might be able to do something with the Scrollbars_Size UDF - I will see what I can come up with as an example over the next few days.

M23


Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

tatane,

Not as difficult as I imagined - take a look at this:

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
#include <GUIScrollbars_Size_Test.au3>

Global $iMag = 1
Global $iMax_HScroll = 600, $iMax_VScroll = 600
Global $iGUI_MinX = 200, $iGUI_MinY = 200
Global $iGUI_MaxX = 600, $iGUI_MaxY = 600

Global $iVSize = _WinAPI_GetSystemMetrics(2) ; Width of VScrollbar:  SM_CXVSCROLL
Global $iHSize = _WinAPI_GetSystemMetrics(3) ; Height of HScrollbar: SM_CYHSCROLL
Global $iH_Pos, $iV_Pos

Global $aLabels[5]

$hGUI = GUICreate("Resizeable Test - Mag: 1", 400, 400, Default, Default, $WS_SIZEBOX)
GUISetBkColor(0xCCFFCC)

Local $cStart = GUICtrlCreateDummy()

_DrawLimits($iMax_HScroll, $iMax_HScroll)

Local $cEnd = GUICtrlCreateDummy()
For $i = $cStart To $cEnd
    GUICtrlSetResizing($i, $GUI_DOCKALL)
Next

$cZoom_Minus = GUICtrlCreateButton("Zoom -", 10, 10, 80, 30)
$cZoom_Plus = GUICtrlCreateButton("Zoom +", 110, 10, 80, 30)

GUISetState(@SW_SHOW)

_GUIScrollBars_Init($hGUI)

_Set_Scroll_Params($hGUI)

GUIRegisterMsg($WM_HSCROLL, "_WM_HSCROLL")
GUIRegisterMsg($WM_VSCROLL, "_WM_VSCROLL")
GUIRegisterMsg($WM_MOUSEWHEEL, "_WM_MOUSEWHEEL")
GUIRegisterMsg($WM_MOUSEHWHEEL, "_WM_MOUSEHWHEEL")
GUIRegisterMsg($WM_ENTERSIZEMOVE, "_WM_ENTERSIZEMOVE")
GUIRegisterMsg($WM_EXITSIZEMOVE, "_WM_EXITSIZEMOVE")
GUIRegisterMsg($WM_GETMINMAXINFO, "_WM_GETMINMAXINFO")

While 1
    Switch GUIGetMsg()
        Case $cZoom_Plus
            $iMag *= 2
            $iMax_HScroll *= 2
            $iMax_VScroll *= 2
            _DrawLimits($iMax_HScroll, $iMax_HScroll)
            _Set_Scroll_Params($hGUI)
            WinSetTitle($hGUI, "", "Resizeable Test - Mag: " & $iMag)

        Case $cZoom_Minus
            If $iMag > 1 Then
                $iMag /= 2
                $iMax_HScroll /= 2
                $iMax_VScroll /= 2
                _DrawLimits($iMax_HScroll, $iMax_HScroll)
                _Set_Scroll_Params($hGUI)
                WinSetTitle($hGUI, "", "Resizeable Test - Mag: " & $iMag)
            EndIf

        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

Func _Set_Scroll_Params($hWnd)
    Local $aClientSize = WinGetClientSize($hWnd)

    ; Check if scrollbars needed
    Local $iH_Aperture = 0, $iV_Aperture = 0, $iH_Reduction = 0, $iV_Reduction = 0
    ; Loop to check if client area reduced by scrollbars
    For $i = 1 To 2
        If $aClientSize[0] < $iMax_HScroll + $iH_Reduction Then
            $iH_Aperture = $iMax_HScroll + $iH_Reduction
            $iV_Reduction = $iHSize     ; Height of HScrollbar
        EndIf
        If $aClientSize[1] < $iMax_VScroll + $iV_Reduction Then
            $iV_Aperture = $iMax_VScroll + $iV_Reduction
            $iH_Reduction = $iVSize     ; Width of VScrollbar
        EndIf
    Next

    $aRet = _GUIScrollbars_Size($iMax_HScroll, $iMax_VScroll, $aClientSize[0], $aClientSize[1])
    If Not @error Then
        If $iMax_HScroll >= $aClientSize[0] Then
            ; Show scrollbar
            _GUIScrollBars_ShowScrollBar($hGUI, $SB_HORZ, True)
            ; Set new parameters
            _GUIScrollBars_SetScrollInfoPage($hGUI, $SB_HORZ, $aRet[0])
            _GUIScrollBars_SetScrollInfoMax($hGUI, $SB_HORZ, $aRet[1])
            ; Reset scrollbar positions
            If $iH_Aperture Then _GUIScrollBars_SetScrollInfoPos($hWnd, $SB_HORZ, $iH_Pos)
        EndIf
        If $iMax_VScroll >= $aClientSize[1] Then
            _GUIScrollBars_ShowScrollBar($hGUI, $SB_VERT, True)
            _GUIScrollBars_SetScrollInfoPage($hGUI, $SB_VERT, $aRet[2])
            _GUIScrollBars_SetScrollInfoMax($hGUI, $SB_VERT, $aRet[3])
            If $iV_Aperture Then _GUIScrollBars_SetScrollInfoPos($hWnd, $SB_VERT, $iV_Pos)
        EndIf
    EndIf

EndFunc   ;==>_Set_Scroll_Params

Func _DrawLimits($iMaxH, $iMaxV)

    For $i = 0 To 4
        GUICtrlDelete($aLabels[$i])
    Next

    $aLabels[0] = GUICtrlCreateLabel("", 0, 0, $iMaxH, $iMaxV)
    GUICtrlSetBkColor(-1, 0xFFCCCC)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $aLabels[1] = GUICtrlCreateLabel("", 0, 0, 10, 10)
    GUICtrlSetBkColor(-1, 0xFF0000)
    $aLabels[2] = GUICtrlCreateLabel("", 0, $iMaxV - 10, 10, 10)
    GUICtrlSetBkColor(-1, 0xFF0000)
    $aLabels[3] = GUICtrlCreateLabel("", $iMaxH - 10, 0, 10, 10)
    GUICtrlSetBkColor(-1, 0xFF0000)
    $aLabels[4] = GUICtrlCreateLabel("", $iMaxH - 10, $iMaxV - 10, 10, 10)
    GUICtrlSetBkColor(-1, 0xFF0000)

EndFunc   ;==>_DrawLimits

Func _WM_HSCROLL($hWnd, $iMsg, $wParam, $lParam)
    #forceref $iMsg, $lParam
    Local $iScrollCode = BitAND($wParam, 0x0000FFFF)

    Local $iIndex = -1, $iCharX, $iPosX
    Local $iMin, $iMax, $iPage, $iPos, $iTrackPos

    For $x = 0 To UBound($__g_aSB_WindowInfo) - 1
        If $__g_aSB_WindowInfo[$x][0] = $hWnd Then
            $iIndex = $x
            $iCharX = $__g_aSB_WindowInfo[$iIndex][2]
            ExitLoop
        EndIf
    Next
    If $iIndex = -1 Then Return 0

    ; ; Get all the horizontal scroll bar information
    Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_HORZ)
    $iMin = DllStructGetData($tSCROLLINFO, "nMin")
    $iMax = DllStructGetData($tSCROLLINFO, "nMax")
    $iPage = DllStructGetData($tSCROLLINFO, "nPage")
    ; Save the position for comparison later on
    $iPosX = DllStructGetData($tSCROLLINFO, "nPos")
    $iPos = $iPosX
    $iTrackPos = DllStructGetData($tSCROLLINFO, "nTrackPos")
    #forceref $iMin, $iMax
    Switch $iScrollCode

        Case $SB_LINELEFT     ; user clicked left arrow
            DllStructSetData($tSCROLLINFO, "nPos", $iPos - 1)

        Case $SB_LINERIGHT     ; user clicked right arrow
            DllStructSetData($tSCROLLINFO, "nPos", $iPos + 1)

        Case $SB_PAGELEFT     ; user clicked the scroll bar shaft left of the scroll box
            DllStructSetData($tSCROLLINFO, "nPos", $iPos - $iPage)

        Case $SB_PAGERIGHT     ; user clicked the scroll bar shaft right of the scroll box
            DllStructSetData($tSCROLLINFO, "nPos", $iPos + $iPage)

        Case $SB_THUMBTRACK     ; user dragged the scroll box
            DllStructSetData($tSCROLLINFO, "nPos", $iTrackPos)
    EndSwitch

    ; // Set the position and then retrieve it.  Due to adjustments
    ; //   by Windows it may not be the same as the value set.

    DllStructSetData($tSCROLLINFO, "fMask", $SIF_POS)
    _GUIScrollBars_SetScrollInfo($hWnd, $SB_HORZ, $tSCROLLINFO)
    _GUIScrollBars_GetScrollInfo($hWnd, $SB_HORZ, $tSCROLLINFO)
    ;// If the position has changed, scroll the window and update it
    $iPos = DllStructGetData($tSCROLLINFO, "nPos")
    If ($iPos <> $iPosX) Then _GUIScrollBars_ScrollWindow($hWnd, $iCharX * ($iPosX - $iPos), 0)
    Return $GUI_RUNDEFMSG
EndFunc   ;==>_WM_HSCROLL

Func _WM_VSCROLL($hWnd, $Msg, $wParam, $lParam)

    #forceref $Msg, $wParam, $lParam
    Local $nScrollCode = BitAND($wParam, 0x0000FFFF)
    Local $iIndex = -1, $yChar, $yPos
    Local $Min, $Max, $Page, $Pos, $TrackPos

    For $x = 0 To UBound($__g_aSB_WindowInfo) - 1
        If $__g_aSB_WindowInfo[$x][0] = $hWnd Then
            $iIndex = $x
            $yChar = $__g_aSB_WindowInfo[$iIndex][3]
            ExitLoop
        EndIf
    Next
    If $iIndex = -1 Then Return 0

    Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_VERT)
    $Min = DllStructGetData($tSCROLLINFO, "nMin")
    $Max = DllStructGetData($tSCROLLINFO, "nMax")
    $Page = DllStructGetData($tSCROLLINFO, "nPage")
    $yPos = DllStructGetData($tSCROLLINFO, "nPos")
    $Pos = $yPos
    $TrackPos = DllStructGetData($tSCROLLINFO, "nTrackPos")

    Switch $nScrollCode
        Case $SB_TOP
            DllStructSetData($tSCROLLINFO, "nPos", $Min)
        Case $SB_BOTTOM
            DllStructSetData($tSCROLLINFO, "nPos", $Max)
        Case $SB_LINEUP
            DllStructSetData($tSCROLLINFO, "nPos", $Pos - 1)
        Case $SB_LINEDOWN
            DllStructSetData($tSCROLLINFO, "nPos", $Pos + 1)
        Case $SB_PAGEUP
            DllStructSetData($tSCROLLINFO, "nPos", $Pos - $Page)
        Case $SB_PAGEDOWN
            DllStructSetData($tSCROLLINFO, "nPos", $Pos + $Page)
        Case $SB_THUMBTRACK
            DllStructSetData($tSCROLLINFO, "nPos", $TrackPos)
    EndSwitch

    DllStructSetData($tSCROLLINFO, "fMask", $SIF_POS)
    _GUIScrollBars_SetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO)
    _GUIScrollBars_GetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO)

    $Pos = DllStructGetData($tSCROLLINFO, "nPos")
    If ($Pos <> $yPos) Then
        _GUIScrollBars_ScrollWindow($hWnd, 0, $yChar * ($yPos - $Pos))
        $yPos = $Pos
    EndIf

    Return $GUI_RUNDEFMSG

EndFunc   ;==>_WM_VSCROLL

Func _WM_MOUSEWHEEL($hWnd, $iMsg, $wParam, $lParam)

    #forceref $hWnd, $iMsg, $lParam
    Local $iDirn, $iDelta = BitShift($wParam, 16) ; Mouse wheel movement
    If $hWnd = $hGUI Then
        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
                _SendMessage($hWnd, $WM_VSCROLL, $iDirn)
            Next
        EndIf
    EndIf

    Return $GUI_RUNDEFMSG

EndFunc   ;==>_WM_MOUSEWHEEL

Func _WM_MOUSEHWHEEL($hWnd, $iMsg, $wParam, $lParam)

    #forceref $hWnd, $iMsg, $lParam
    Local $iDirn = $SB_LINERIGHT
    If BitShift($wParam, 16) > 0 Then $iDirn = $SB_LINELEFT ; Mouse wheel movement
    If $hWnd = $hGUI Then
        For $i = 1 To 7
            _SendMessage($hWnd, $WM_HSCROLL, $iDirn)
        Next
    EndIf

    Return $GUI_RUNDEFMSG

EndFunc   ;==>_WM_MOUSEHWHEEL

Func _WM_ENTERSIZEMOVE($hWnd, $iMsg, $wParam, $lParam)

    #forceref $hWnd, $iMsg, $wParam, $lParam

    If $hWnd = $hGUI Then
        ; Store current scrollbar positions
        $iH_Pos = _GUIScrollBars_GetScrollInfoPos($hWnd, $SB_HORZ)
        $iV_Pos = _GUIScrollBars_GetScrollInfoPos($hWnd, $SB_VERT)
        ; Reset scrollbar positions to 0
        _GUIScrollBars_SetScrollInfoPos($hWnd, $SB_HORZ, 0)
        _GUIScrollBars_SetScrollInfoPos($hWnd, $SB_VERT, 0)
        ; Hide scrollbars
        _GUIScrollBars_ShowScrollBar($hWnd, $SB_BOTH, False)
    EndIf

EndFunc   ;==>_WM_ENTERSIZEMOVE

Func _WM_EXITSIZEMOVE($hWnd, $iMsg, $wParam, $lParam)

    #forceref $hWnd, $iMsg, $wParam, $lParam

    ; Check if handle matches
    If $hWnd = $hGUI Then
        _Set_Scroll_Params($hWnd)
    EndIf

EndFunc   ;==>_WM_EXITSIZEMOVE

Func _WM_GETMINMAXINFO($hWnd, $iMsg, $wParam, $lParam)
    Local $tagMaxinfo = DllStructCreate("int;int;int;int;int;int;int;int;int;int", $lParam)
    DllStructSetData($tagMaxinfo, 7, $iGUI_MinX)     ; min X
    DllStructSetData($tagMaxinfo, 8, $iGUI_MinY)     ; min Y
    DllStructSetData($tagMaxinfo, 9, $iGUI_MaxX)     ; max X
    DllStructSetData($tagMaxinfo, 10, $iGUI_MaxY)     ; max Y
    Return 0
EndFunc   ;==>_WM_GETMINMAXINFO

Close enough to be worth pursuing further?

M23

Edited by Melba23
Added MouseWheel handlers

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

Thanks a lot.

I guess you change something in GUIScrollbars_Size_Test.au3 ? It's buggy with the "official" version.

Could you attach the code please ?

Share this post


Link to post
Share on other sites

tatane,

No,  I used the same version as in the current release - what do you see that makes you think "buggy"?

M23


Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

Hi,

No problem when I start the script.

As soon as I resize the GUI, a second GUI appears/disappears on my second screen. When the Gui is at max size, the scrollbars are still there and I can scroll down/right.

Sorry to bother you with that, if Windows scrollbars stuff is so messy, I will remove the resize Gui functionality and replace it by 3 differents resolutions.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...