Définit les paramètres d'une barre de défilement
#include <GuiScrollBars.au3>
_GUIScrollBars_SetScrollInfo ( $hWnd, $iBar, $tSCROLLINFO [, $bRedraw = True] )
$hWnd | Le handle de la fenêtre |
$iBar | Spécifie le type de barre de défilement. Ce paramètre peut prendre l'une des valeurs suivantes: $SB_CTL - Définit les paramètres pour un contrôle de barre de défilement. Le paramètre $hWnd doit être le handle du contrôle de la barre de défilement. $SB_HORZ - Définit les paramètres de la barre de défilement horizontale standard de la fenêtre. $SB_VERT - Définit les paramètres de la barre de défilement verticale standard de la fenêtre. |
$tSCROLLINFO | Structure de type $tagSCROLLINFO |
$bRedraw | [optionnel] Spécifie si la barre de défilement est redessinée pour refléter les modifications apportées à la barre de défilement |
Succès: | Retourne la position actuelle du curseur de défilement. |
Échec: | Retourne -1. |
_GUIScrollBars_GetScrollInfo, _GUIScrollBars_SetScrollInfoMax, _GUIScrollBars_SetScrollInfoMin, _GUIScrollBars_SetScrollInfoPage, _GUIScrollBars_SetScrollInfoPos
Consultez SetScrollInfo dans la librairie MSDN.
#include <GUIConstantsEx.au3> #include <GuiScrollBars.au3> #include <StructureConstants.au3> #include <WindowsConstants.au3> Example() Func Example() Local $idFileMenu, $idExititem, $hGUIMsg, $hGUI, $h_GUIC, $h_GUIC2 Local $idListview, $idButton $hGUI = GUICreate("ScrollBar Example", 400, 400, -1, -1, BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU, $WS_SIZEBOX)) GUISetBkColor(0x88AABB) $idFileMenu = GUICtrlCreateMenu("File") $idExititem = GUICtrlCreateMenuItem("Exit", $idFileMenu) $idListview = GUICtrlCreateListView("col1 |col2|col3 ", 10, 10, 200, 150) ; , $LVS_SORTDESCENDING) $idButton = GUICtrlCreateButton("Value?", 75, 170, 70, 20) GUICtrlSetResizing($idButton, $GUI_DOCKALL) For $x = 1 To 30 GUICtrlCreateListViewItem("item" & $x & "|col2|col3", $idListview) Next GUICtrlSetResizing($idListview, $GUI_DOCKALL) $h_GUIC = GUICreate("Child GUI", 200, 200, 10, 200, $WS_CHILD, $WS_EX_CLIENTEDGE, $hGUI) GUICtrlCreateButton("a button", 10, 10, 90, 20) GUISetBkColor(0X006400) GUISetState(@SW_SHOW) GUICtrlSetResizing($h_GUIC, $GUI_DOCKALL) GUISwitch($hGUI) $h_GUIC2 = GUICreate("Child GUI", 200, 200, 215, 10, $WS_CHILD, $WS_EX_CLIENTEDGE, $hGUI) GUICtrlCreateButton("a button", 10, 10, 90, 20) GUISetBkColor(0X006400) GUISetState(@SW_SHOW) GUICtrlSetResizing($h_GUIC2, $GUI_DOCKALL) GUISwitch($hGUI) GUIRegisterMsg($WM_SIZE, "WM_SIZE") GUIRegisterMsg($WM_VSCROLL, "WM_VSCROLL") GUIRegisterMsg($WM_HSCROLL, "WM_HSCROLL") GUISetState(@SW_SHOW) _GUIScrollBars_Init($hGUI) _GUIScrollBars_Init($h_GUIC) Do $hGUIMsg = GUIGetMsg() Until $hGUIMsg = $GUI_EVENT_CLOSE Or $hGUIMsg = $idExititem Exit EndFunc ;==>Example Func WM_SIZE($hWnd, $iMsg, $wParam, $lParam) #forceref $iMsg, $wParam Local $iIndex = -1, $iCharY, $iCharX, $iClientMaxX, $iClientX, $iClientY, $iMax For $x = 0 To UBound($__g_aSB_WindowInfo) - 1 If $__g_aSB_WindowInfo[$x][0] = $hWnd Then $iIndex = $x $iClientMaxX = $__g_aSB_WindowInfo[$iIndex][1] $iCharX = $__g_aSB_WindowInfo[$iIndex][2] $iCharY = $__g_aSB_WindowInfo[$iIndex][3] $iMax = $__g_aSB_WindowInfo[$iIndex][7] ExitLoop EndIf Next If $iIndex = -1 Then Return 0 Local $tSCROLLINFO = DllStructCreate($tagSCROLLINFO) ; Ontient les dimensions de l'espace client. $iClientX = BitAND($lParam, 0x0000FFFF) $iClientY = BitShift($lParam, 16) $__g_aSB_WindowInfo[$iIndex][4] = $iClientX $__g_aSB_WindowInfo[$iIndex][5] = $iClientY ; Définit la plage de défilement vertical et la taille de page DllStructSetData($tSCROLLINFO, "fMask", BitOR($SIF_RANGE, $SIF_PAGE)) DllStructSetData($tSCROLLINFO, "nMin", 0) DllStructSetData($tSCROLLINFO, "nMax", $iMax) DllStructSetData($tSCROLLINFO, "nPage", $iClientY / $iCharY) _GUIScrollBars_SetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO) ; Définit la plage de défilement horizontal et la taille de page DllStructSetData($tSCROLLINFO, "fMask", BitOR($SIF_RANGE, $SIF_PAGE)) DllStructSetData($tSCROLLINFO, "nMin", 0) DllStructSetData($tSCROLLINFO, "nMax", 2 + $iClientMaxX / $iCharX) DllStructSetData($tSCROLLINFO, "nPage", $iClientX / $iCharX) _GUIScrollBars_SetScrollInfo($hWnd, $SB_HORZ, $tSCROLLINFO) Return $GUI_RUNDEFMSG EndFunc ;==>WM_SIZE 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 ; Obtient toutes les informations de la barre de défilement horizontale Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_HORZ) $iMin = DllStructGetData($tSCROLLINFO, "nMin") $iMax = DllStructGetData($tSCROLLINFO, "nMax") $iPage = DllStructGetData($tSCROLLINFO, "nPage") ; Sauvegarde la position pour comparaison ultérieure $iPosX = DllStructGetData($tSCROLLINFO, "nPos") $iPos = $iPosX $iTrackPos = DllStructGetData($tSCROLLINFO, "nTrackPos") #forceref $iMin, $iMax Switch $iScrollCode Case $SB_LINELEFT ; L'utilisateur a cliqué sur la flèche gauche DllStructSetData($tSCROLLINFO, "nPos", $iPos - 1) Case $SB_LINERIGHT ; L'utilisateur a cliqué sur la flèche droite DllStructSetData($tSCROLLINFO, "nPos", $iPos + 1) Case $SB_PAGELEFT ; L'utilisateur a cliqué sur la zone de défilement à gauche du curseur DllStructSetData($tSCROLLINFO, "nPos", $iPos - $iPage) Case $SB_PAGERIGHT ; L'utilisateur a cliqué sur la zone de défilement à droite du curseur DllStructSetData($tSCROLLINFO, "nPos", $iPos + $iPage) Case $SB_THUMBTRACK ; L'utilisateur fait glisser le curseur de défilement DllStructSetData($tSCROLLINFO, "nPos", $iTrackPos) EndSwitch ; Définit la position puis la récupére. En raison des ajustements ; effectués par Windows, elle peut ne pas être la même que la valeur définie. DllStructSetData($tSCROLLINFO, "fMask", $SIF_POS) _GUIScrollBars_SetScrollInfo($hWnd, $SB_HORZ, $tSCROLLINFO) _GUIScrollBars_GetScrollInfo($hWnd, $SB_HORZ, $tSCROLLINFO) ; Si la position a changé, fait défiler la fenêtre et l'actualise $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, $iMsg, $wParam, $lParam) #forceref $iMsg, $wParam, $lParam Local $iScrollCode = BitAND($wParam, 0x0000FFFF) Local $iIndex = -1, $iCharY, $iPosY 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 $iCharY = $__g_aSB_WindowInfo[$iIndex][3] ExitLoop EndIf Next If $iIndex = -1 Then Return 0 ; Obtient toutes les informations de la barre de défilement vertical Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_VERT) $iMin = DllStructGetData($tSCROLLINFO, "nMin") $iMax = DllStructGetData($tSCROLLINFO, "nMax") $iPage = DllStructGetData($tSCROLLINFO, "nPage") ; Sauvegarde la position pour une comparaison ultérieure $iPosY = DllStructGetData($tSCROLLINFO, "nPos") $iPos = $iPosY $iTrackPos = DllStructGetData($tSCROLLINFO, "nTrackPos") Switch $iScrollCode Case $SB_TOP ; L'utilisateur a appuyé sur la touche du clavier HOME DllStructSetData($tSCROLLINFO, "nPos", $iMin) Case $SB_BOTTOM ; L'utilisateur a appuyé sur la touche du clavier END DllStructSetData($tSCROLLINFO, "nPos", $iMax) Case $SB_LINEUP ; L'utilisateur a cliqué sur la flèche du haut DllStructSetData($tSCROLLINFO, "nPos", $iPos - 1) Case $SB_LINEDOWN ; L'utilisateur a cliqué sur la flèche du bas DllStructSetData($tSCROLLINFO, "nPos", $iPos + 1) Case $SB_PAGEUP ; L'utilisateur a cliqué sur la zone de défilement au dessus du curseur DllStructSetData($tSCROLLINFO, "nPos", $iPos - $iPage) Case $SB_PAGEDOWN ; L'utilisateur a cliqué sur la zone de défilement au dessous du curseur DllStructSetData($tSCROLLINFO, "nPos", $iPos + $iPage) Case $SB_THUMBTRACK ; L'utilisateur fait glisser le curseur de défilement DllStructSetData($tSCROLLINFO, "nPos", $iTrackPos) EndSwitch ; Définit la position et le récupére. En raison des ajustements ; effectués par Windows, elle peut ne pas être la même que la valeur définie. DllStructSetData($tSCROLLINFO, "fMask", $SIF_POS) _GUIScrollBars_SetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO) _GUIScrollBars_GetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO) ; Si la position a changé, fait défiler la fenêtre et l'actualise $iPos = DllStructGetData($tSCROLLINFO, "nPos") If ($iPos <> $iPosY) Then _GUIScrollBars_ScrollWindow($hWnd, 0, $iCharY * ($iPosY - $iPos)) $iPosY = $iPos EndIf Return $GUI_RUNDEFMSG EndFunc ;==>WM_VSCROLL