Initialise les barres de d�filement d'une fen�tre
#include <GuiScrollBars.au3>
_GUIScrollBars_Init ( $hWnd [, $iMaxH = -1 [, $iMaxV = -1]] )
$hWnd | Le handle de la fen�tre |
$iMaxH | [optionnel] Taille maximale de la barre de d�filement horizontale |
$iMaxV | [optionnel] Taille maximale de la barre de d�filement verticale |
#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