GuiScrollBars.au3 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450
  1. #include-once
  2. #include "ScrollbarsConstants.au3"
  3. #include "StructureConstants.au3"
  4. ; #INDEX# =======================================================================================================================
  5. ; Title .........: ScrollBar
  6. ; AutoIt Version : 3.3.14.5
  7. ; Language ......: English
  8. ; Description ...: Functions that assist with ScrollBar management.
  9. ; A scroll bar consists of a shaded shaft with an arrow button at each end and a scroll box (sometimes called a thumb)
  10. ; between the arrow buttons. A scroll bar represents the overall length or width of a data object in a window's client
  11. ; area, the scroll box represents the portion of the object that is visible in the client area. The position of the
  12. ; scroll box changes whenever the user scrolls a data object to display a different portion of it. The system also adjusts
  13. ; the size of a scroll bar's scroll box so that it indicates what portion of the entire data object is currently visible
  14. ; in the window. If most of the object is visible, the scroll box occupies most of the scroll bar shaft. Similarly,
  15. ; if only a small portion of the object is visible, the scroll box occupies a small part of the scroll bar shaft.
  16. ; Author(s) .....: Gary Frost
  17. ; ===============================================================================================================================
  18. ; #VARIABLES# ===================================================================================================================
  19. ; 0 = hwnd;1 = xClientMax;2 cxChar;3 = cyChar;4 cxClient;5 = cyClient,6 = iHMax;7 = iVMax
  20. Global $__g_aSB_WindowInfo[1][8]
  21. ; ===============================================================================================================================
  22. ; #CURRENT# =====================================================================================================================
  23. ; _GUIScrollBars_EnableScrollBar
  24. ; _GUIScrollBars_GetScrollBarInfoEx
  25. ; _GUIScrollBars_GetScrollBarRect
  26. ; _GUIScrollBars_GetScrollBarRGState
  27. ; _GUIScrollBars_GetScrollBarXYLineButton
  28. ; _GUIScrollBars_GetScrollBarXYThumbTop
  29. ; _GUIScrollBars_GetScrollBarXYThumbBottom
  30. ; _GUIScrollBars_GetScrollInfo
  31. ; _GUIScrollBars_GetScrollInfoEx
  32. ; _GUIScrollBars_GetScrollInfoPage
  33. ; _GUIScrollBars_GetScrollInfoPos
  34. ; _GUIScrollBars_GetScrollInfoMin
  35. ; _GUIScrollBars_GetScrollInfoMax
  36. ; _GUIScrollBars_GetScrollInfoTrackPos
  37. ; _GUIScrollBars_GetScrollPos
  38. ; _GUIScrollBars_GetScrollRange
  39. ; _GUIScrollBars_Init
  40. ; _GUIScrollBars_ScrollWindow
  41. ; _GUIScrollBars_SetScrollInfo
  42. ; _GUIScrollBars_SetScrollInfoMin
  43. ; _GUIScrollBars_SetScrollInfoMax
  44. ; _GUIScrollBars_SetScrollInfoPage
  45. ; _GUIScrollBars_SetScrollInfoPos
  46. ; _GUIScrollBars_SetScrollRange
  47. ; _GUIScrollBars_ShowScrollBar
  48. ; ===============================================================================================================================
  49. ; #FUNCTION# ====================================================================================================================
  50. ; Author ........: Gary Frost
  51. ; Modified.......:
  52. ; ===============================================================================================================================
  53. Func _GUIScrollBars_EnableScrollBar($hWnd, $iSBflags = $SB_BOTH, $iArrows = $ESB_ENABLE_BOTH)
  54. If Not IsHWnd($hWnd) Then Return SetError(-2, -1, False)
  55. Local $aResult = DllCall("user32.dll", "bool", "EnableScrollBar", "hwnd", $hWnd, "uint", $iSBflags, "uint", $iArrows)
  56. If @error Then Return SetError(@error, @extended, False)
  57. Return $aResult[0]
  58. EndFunc ;==>_GUIScrollBars_EnableScrollBar
  59. ; #FUNCTION# ====================================================================================================================
  60. ; Author ........: Gary Frost
  61. ; Modified.......:
  62. ; ===============================================================================================================================
  63. Func _GUIScrollBars_GetScrollBarInfoEx($hWnd, $iObject)
  64. If Not IsHWnd($hWnd) Then Return SetError(-2, -1, 0)
  65. Local $tSCROLLBARINFO = DllStructCreate($tagSCROLLBARINFO)
  66. DllStructSetData($tSCROLLBARINFO, "cbSize", DllStructGetSize($tSCROLLBARINFO))
  67. Local $aResult = DllCall("user32.dll", "bool", "GetScrollBarInfo", "hwnd", $hWnd, "long", $iObject, "struct*", $tSCROLLBARINFO)
  68. If @error Then Return SetError(@error, @extended, 0)
  69. Return SetExtended($aResult[0], $tSCROLLBARINFO)
  70. EndFunc ;==>_GUIScrollBars_GetScrollBarInfoEx
  71. ; #FUNCTION# ====================================================================================================================
  72. ; Author ........: Gary Frost
  73. ; Modified.......:
  74. ; ===============================================================================================================================
  75. Func _GUIScrollBars_GetScrollBarRect($hWnd, $iObject)
  76. Local $aRect[4]
  77. If Not IsHWnd($hWnd) Then Return SetError(-2, -1, 0)
  78. Local $tSCROLLBARINFO = _GUIScrollBars_GetScrollBarInfoEx($hWnd, $iObject)
  79. If @error Then Return SetError(@error, @extended, 0)
  80. $aRect[0] = DllStructGetData($tSCROLLBARINFO, "Left")
  81. $aRect[1] = DllStructGetData($tSCROLLBARINFO, "Top")
  82. $aRect[2] = DllStructGetData($tSCROLLBARINFO, "Right")
  83. $aRect[3] = DllStructGetData($tSCROLLBARINFO, "Bottom")
  84. Return $aRect
  85. EndFunc ;==>_GUIScrollBars_GetScrollBarRect
  86. ; #FUNCTION# ====================================================================================================================
  87. ; Author ........: Gary Frost
  88. ; Modified.......:
  89. ; ===============================================================================================================================
  90. Func _GUIScrollBars_GetScrollBarRGState($hWnd, $iObject)
  91. Local $aRGState[6]
  92. If Not IsHWnd($hWnd) Then Return SetError(-2, -1, 0)
  93. Local $tSCROLLBARINFO = _GUIScrollBars_GetScrollBarInfoEx($hWnd, $iObject)
  94. If @error Then Return SetError(@error, @extended, 0)
  95. For $x = 0 To 5
  96. $aRGState[$x] = DllStructGetData($tSCROLLBARINFO, "rgstate", $x + 1)
  97. Next
  98. Return $aRGState
  99. EndFunc ;==>_GUIScrollBars_GetScrollBarRGState
  100. ; #FUNCTION# ====================================================================================================================
  101. ; Author ........: Gary Frost
  102. ; Modified.......:
  103. ; ===============================================================================================================================
  104. Func _GUIScrollBars_GetScrollBarXYLineButton($hWnd, $iObject)
  105. If Not IsHWnd($hWnd) Then Return SetError(-2, -1, -1)
  106. Local $tSCROLLBARINFO = _GUIScrollBars_GetScrollBarInfoEx($hWnd, $iObject)
  107. If @error Then Return SetError(@error, @extended, -1)
  108. Return DllStructGetData($tSCROLLBARINFO, "dxyLineButton")
  109. EndFunc ;==>_GUIScrollBars_GetScrollBarXYLineButton
  110. ; #FUNCTION# ====================================================================================================================
  111. ; Author ........: Gary Frost
  112. ; Modified.......:
  113. ; ===============================================================================================================================
  114. Func _GUIScrollBars_GetScrollBarXYThumbTop($hWnd, $iObject)
  115. If Not IsHWnd($hWnd) Then Return SetError(-2, -1, -1)
  116. Local $tSCROLLBARINFO = _GUIScrollBars_GetScrollBarInfoEx($hWnd, $iObject)
  117. If @error Then Return SetError(@error, @extended, -1)
  118. Return DllStructGetData($tSCROLLBARINFO, "xyThumbTop")
  119. EndFunc ;==>_GUIScrollBars_GetScrollBarXYThumbTop
  120. ; #FUNCTION# ====================================================================================================================
  121. ; Author ........: Gary Frost
  122. ; Modified.......:
  123. ; ===============================================================================================================================
  124. Func _GUIScrollBars_GetScrollBarXYThumbBottom($hWnd, $iObject)
  125. If Not IsHWnd($hWnd) Then Return SetError(-1, -1, -1)
  126. Local $tSCROLLBARINFO = _GUIScrollBars_GetScrollBarInfoEx($hWnd, $iObject)
  127. If @error Then Return SetError(-1, -1, -1)
  128. Return DllStructGetData($tSCROLLBARINFO, "xyThumbBottom")
  129. EndFunc ;==>_GUIScrollBars_GetScrollBarXYThumbBottom
  130. ; #FUNCTION# ====================================================================================================================
  131. ; Author ........: Gary Frost
  132. ; Modified.......:
  133. ; ===============================================================================================================================
  134. Func _GUIScrollBars_GetScrollInfo($hWnd, $iBar, ByRef $tSCROLLINFO)
  135. If Not IsHWnd($hWnd) Then Return SetError(-2, -1, False)
  136. Local $aResult = DllCall("user32.dll", "bool", "GetScrollInfo", "hwnd", $hWnd, "int", $iBar, "struct*", $tSCROLLINFO)
  137. If @error Then Return SetError(@error, @extended, False)
  138. Return $aResult[0]
  139. EndFunc ;==>_GUIScrollBars_GetScrollInfo
  140. ; #FUNCTION# ====================================================================================================================
  141. ; Author ........: Gary Frost
  142. ; Modified.......:
  143. ; ===============================================================================================================================
  144. Func _GUIScrollBars_GetScrollInfoEx($hWnd, $iBar)
  145. If Not IsHWnd($hWnd) Then Return SetError(-2, -1, 0)
  146. Local $tSCROLLINFO = DllStructCreate($tagSCROLLINFO)
  147. DllStructSetData($tSCROLLINFO, "cbSize", DllStructGetSize($tSCROLLINFO))
  148. DllStructSetData($tSCROLLINFO, "fMask", $SIF_ALL)
  149. If Not _GUIScrollBars_GetScrollInfo($hWnd, $iBar, $tSCROLLINFO) Then Return SetError(@error, @extended, 0)
  150. Return $tSCROLLINFO
  151. EndFunc ;==>_GUIScrollBars_GetScrollInfoEx
  152. ; #FUNCTION# ====================================================================================================================
  153. ; Author ........: Gary Frost
  154. ; Modified.......:
  155. ; ===============================================================================================================================
  156. Func _GUIScrollBars_GetScrollInfoPage($hWnd, $iBar)
  157. If Not IsHWnd($hWnd) Then Return SetError(-2, -1, -1)
  158. Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $iBar)
  159. If @error Then Return SetError(@error, @extended, -1)
  160. Return DllStructGetData($tSCROLLINFO, "nPage")
  161. EndFunc ;==>_GUIScrollBars_GetScrollInfoPage
  162. ; #FUNCTION# ====================================================================================================================
  163. ; Author ........: Gary Frost
  164. ; Modified.......:
  165. ; ===============================================================================================================================
  166. Func _GUIScrollBars_GetScrollInfoPos($hWnd, $iBar)
  167. If Not IsHWnd($hWnd) Then Return SetError(-2, -1, -1)
  168. Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $iBar)
  169. If @error Then Return SetError(@error, @extended, -1)
  170. Return DllStructGetData($tSCROLLINFO, "nPos")
  171. EndFunc ;==>_GUIScrollBars_GetScrollInfoPos
  172. ; #FUNCTION# ====================================================================================================================
  173. ; Author ........: Gary Frost
  174. ; Modified.......:
  175. ; ===============================================================================================================================
  176. Func _GUIScrollBars_GetScrollInfoMin($hWnd, $iBar)
  177. If Not IsHWnd($hWnd) Then Return SetError(-2, -1, -1)
  178. Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $iBar)
  179. If @error Then Return SetError(@error, @extended, -1)
  180. Return DllStructGetData($tSCROLLINFO, "nMin")
  181. EndFunc ;==>_GUIScrollBars_GetScrollInfoMin
  182. ; #FUNCTION# ====================================================================================================================
  183. ; Author ........: Gary Frost
  184. ; Modified.......:
  185. ; ===============================================================================================================================
  186. Func _GUIScrollBars_GetScrollInfoMax($hWnd, $iBar)
  187. If Not IsHWnd($hWnd) Then Return SetError(-2, -1, -1)
  188. Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $iBar)
  189. If @error Then Return SetError(@error, @extended, -1)
  190. Return DllStructGetData($tSCROLLINFO, "nMax")
  191. EndFunc ;==>_GUIScrollBars_GetScrollInfoMax
  192. ; #FUNCTION# ====================================================================================================================
  193. ; Author ........: Gary Frost
  194. ; Modified.......:
  195. ; ===============================================================================================================================
  196. Func _GUIScrollBars_GetScrollInfoTrackPos($hWnd, $iBar)
  197. If Not IsHWnd($hWnd) Then Return SetError(-2, -1, -1)
  198. Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $iBar)
  199. If @error Then Return SetError(@error, @extended, -1)
  200. Return DllStructGetData($tSCROLLINFO, "nTrackPos")
  201. EndFunc ;==>_GUIScrollBars_GetScrollInfoTrackPos
  202. ; #FUNCTION# ====================================================================================================================
  203. ; Author ........: Gary Frost
  204. ; Modified.......:
  205. ; ===============================================================================================================================
  206. Func _GUIScrollBars_GetScrollPos($hWnd, $iBar)
  207. If Not IsHWnd($hWnd) Then Return SetError(-2, -1, -1)
  208. Local $aResult = DllCall("user32.dll", "int", "GetScrollPos", "hwnd", $hWnd, "int", $iBar)
  209. If @error Then Return SetError(@error, @extended, -1)
  210. Return $aResult[0]
  211. EndFunc ;==>_GUIScrollBars_GetScrollPos
  212. ; #FUNCTION# ====================================================================================================================
  213. ; Author ........: Gary Frost
  214. ; Modified.......:
  215. ; ===============================================================================================================================
  216. Func _GUIScrollBars_GetScrollRange($hWnd, $iBar)
  217. If Not IsHWnd($hWnd) Then Return SetError(-2, -1, -1)
  218. Local $aResult = DllCall("user32.dll", "bool", "GetScrollRange", "hwnd", $hWnd, "int", $iBar, "int*", 0, "int*", 0)
  219. If @error Then Return SetError(@error, @extended, -1)
  220. Local $aMin_Max[2]
  221. $aMin_Max[0] = $aResult[3]
  222. $aMin_Max[1] = $aResult[4]
  223. Return SetExtended($aResult[0], $aMin_Max)
  224. EndFunc ;==>_GUIScrollBars_GetScrollRange
  225. ; #FUNCTION# ====================================================================================================================
  226. ; Author ........: Gary Frost
  227. ; Modified.......:
  228. ; ===============================================================================================================================
  229. Func _GUIScrollBars_Init($hWnd, $iMaxH = -1, $iMaxV = -1)
  230. If Not IsHWnd($hWnd) Then Return SetError(-2, -1, 0)
  231. If $__g_aSB_WindowInfo[0][0] <> 0 Then ReDim $__g_aSB_WindowInfo[UBound($__g_aSB_WindowInfo) + 1][8]
  232. Local $tSCROLLINFO = DllStructCreate($tagSCROLLINFO)
  233. Local $tRECT = DllStructCreate($tagRECT)
  234. Local $iIndex = UBound($__g_aSB_WindowInfo) - 1
  235. Local $iError, $iExtended
  236. $__g_aSB_WindowInfo[$iIndex][0] = $hWnd
  237. $__g_aSB_WindowInfo[$iIndex][1] = $iMaxH
  238. $__g_aSB_WindowInfo[$iIndex][6] = $iMaxH
  239. $__g_aSB_WindowInfo[$iIndex][7] = $iMaxV
  240. If $iMaxV = -1 Then $__g_aSB_WindowInfo[$iIndex][7] = 27
  241. Local $hDC = DllCall("user32.dll", "handle", "GetDC", "hwnd", $hWnd)
  242. If @error Then Return SetError(@error, @extended)
  243. $hDC = $hDC[0]
  244. Local $tTEXTMETRIC = DllStructCreate($tagTEXTMETRIC)
  245. DllStructSetData($tSCROLLINFO, "cbSize", DllStructGetSize($tSCROLLINFO))
  246. DllCall("gdi32.dll", "bool", "GetTextMetricsW", "handle", $hDC, "struct*", $tTEXTMETRIC)
  247. If @error Then
  248. $iError = @error
  249. $iExtended = @extended
  250. EndIf
  251. DllCall("user32.dll", "int", "ReleaseDC", "hwnd", $hWnd, "handle", $hDC)
  252. ; Skip @error test as the results don't matter.
  253. ; Test previous error from GetTextMetrics call.
  254. If $iError Then Return SetError($iError, $iExtended)
  255. Local $iUpperX, $iXAmount = DllStructGetData($tTEXTMETRIC, "tmAveCharWidth")
  256. If BitAND(DllStructGetData($tTEXTMETRIC, "tmPitchAndFamily"), 1) Then ; $TMPF_FIXED_PITCH
  257. $iUpperX = 3 * $iXAmount / 2
  258. Else
  259. $iUpperX = 2 * $iXAmount / 2
  260. EndIf
  261. Local $iYAmount = DllStructGetData($tTEXTMETRIC, "tmHeight") + DllStructGetData($tTEXTMETRIC, "tmExternalLeading")
  262. If $iMaxH = -1 Then $__g_aSB_WindowInfo[$iIndex][1] = 48 * $iXAmount + 12 * $iUpperX
  263. $__g_aSB_WindowInfo[$iIndex][2] = $iXAmount
  264. $__g_aSB_WindowInfo[$iIndex][3] = $iYAmount
  265. _GUIScrollBars_ShowScrollBar($hWnd, $SB_HORZ, False)
  266. _GUIScrollBars_ShowScrollBar($hWnd, $SB_VERT, False)
  267. _GUIScrollBars_ShowScrollBar($hWnd, $SB_HORZ)
  268. _GUIScrollBars_ShowScrollBar($hWnd, $SB_VERT)
  269. DllCall("user32.dll", "bool", "GetClientRect", "hwnd", $hWnd, "struct*", $tRECT)
  270. If @error Then Return SetError(@error, @extended)
  271. Local $iClientX = DllStructGetData($tRECT, "Right") - DllStructGetData($tRECT, "Left")
  272. Local $iClientY = DllStructGetData($tRECT, "Bottom") - DllStructGetData($tRECT, "Top")
  273. $__g_aSB_WindowInfo[$iIndex][4] = $iClientX
  274. $__g_aSB_WindowInfo[$iIndex][5] = $iClientY
  275. $tSCROLLINFO = DllStructCreate($tagSCROLLINFO)
  276. ; Set the vertical scrolling range and page size
  277. DllStructSetData($tSCROLLINFO, "fMask", BitOR($SIF_RANGE, $SIF_PAGE))
  278. DllStructSetData($tSCROLLINFO, "nMin", 0)
  279. DllStructSetData($tSCROLLINFO, "nMax", $__g_aSB_WindowInfo[$iIndex][7])
  280. DllStructSetData($tSCROLLINFO, "nPage", $iClientY / $iYAmount)
  281. _GUIScrollBars_SetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO)
  282. ; Set the horizontal scrolling range and page size
  283. DllStructSetData($tSCROLLINFO, "fMask", BitOR($SIF_RANGE, $SIF_PAGE))
  284. DllStructSetData($tSCROLLINFO, "nMin", 0)
  285. DllStructSetData($tSCROLLINFO, "nMax", 2 + $__g_aSB_WindowInfo[$iIndex][1] / $iXAmount)
  286. DllStructSetData($tSCROLLINFO, "nPage", $iClientX / $iXAmount)
  287. _GUIScrollBars_SetScrollInfo($hWnd, $SB_HORZ, $tSCROLLINFO)
  288. EndFunc ;==>_GUIScrollBars_Init
  289. ; #FUNCTION# ====================================================================================================================
  290. ; Author ........: Gary Frost
  291. ; Modified.......:
  292. ; ===============================================================================================================================
  293. Func _GUIScrollBars_ScrollWindow($hWnd, $iXAmount, $iYAmount)
  294. If Not IsHWnd($hWnd) Then Return SetError(-2, -1, False)
  295. Local $aResult = DllCall("user32.dll", "bool", "ScrollWindow", "hwnd", $hWnd, "int", $iXAmount, "int", $iYAmount, "ptr", 0, "ptr", 0)
  296. If @error Then Return SetError(@error, @extended, False)
  297. Return $aResult[0]
  298. EndFunc ;==>_GUIScrollBars_ScrollWindow
  299. ; #FUNCTION# ====================================================================================================================
  300. ; Author ........: Gary Frost
  301. ; Modified.......:
  302. ; ===============================================================================================================================
  303. Func _GUIScrollBars_SetScrollInfo($hWnd, $iBar, $tSCROLLINFO, $bRedraw = True)
  304. If Not IsHWnd($hWnd) Then Return SetError(-2, -1, -1)
  305. DllStructSetData($tSCROLLINFO, "cbSize", DllStructGetSize($tSCROLLINFO))
  306. Local $aResult = DllCall("user32.dll", "int", "SetScrollInfo", "hwnd", $hWnd, "int", $iBar, "struct*", $tSCROLLINFO, "bool", $bRedraw)
  307. If @error Then Return SetError(@error, @extended, -1)
  308. Return $aResult[0]
  309. EndFunc ;==>_GUIScrollBars_SetScrollInfo
  310. ; #FUNCTION# ====================================================================================================================
  311. ; Author ........: Gary Frost
  312. ; Modified.......:
  313. ; ===============================================================================================================================
  314. Func _GUIScrollBars_SetScrollInfoMin($hWnd, $iBar, $iMin)
  315. If Not IsHWnd($hWnd) Then Return SetError(-2, -1, False)
  316. Local $aRange = _GUIScrollBars_GetScrollRange($hWnd, $iBar)
  317. _GUIScrollBars_SetScrollRange($hWnd, $iBar, $iMin, $aRange[1])
  318. Local $aRange_check = _GUIScrollBars_GetScrollRange($hWnd, $iBar)
  319. ; invalid range check if invalid reset to previous values
  320. If $aRange[1] <> $aRange_check[1] Or $iMin <> $aRange_check[0] Then
  321. _GUIScrollBars_SetScrollRange($hWnd, $iBar, $aRange[0], $aRange[1])
  322. Return False
  323. EndIf
  324. Return True
  325. EndFunc ;==>_GUIScrollBars_SetScrollInfoMin
  326. ; #FUNCTION# ====================================================================================================================
  327. ; Author ........: Gary Frost
  328. ; Modified.......:
  329. ; ===============================================================================================================================
  330. Func _GUIScrollBars_SetScrollInfoMax($hWnd, $iBar, $iMax)
  331. If Not IsHWnd($hWnd) Then Return SetError(-2, -1, False)
  332. Local $aRange = _GUIScrollBars_GetScrollRange($hWnd, $iBar)
  333. _GUIScrollBars_SetScrollRange($hWnd, $iBar, $aRange[0], $iMax)
  334. Local $aRange_check = _GUIScrollBars_GetScrollRange($hWnd, $iBar)
  335. ; invalid range check if invalid reset to previous values
  336. If $aRange[0] <> $aRange_check[0] Or $iMax <> $aRange_check[1] Then
  337. _GUIScrollBars_SetScrollRange($hWnd, $iBar, $aRange[0], $aRange[1])
  338. Return False
  339. EndIf
  340. Return True
  341. EndFunc ;==>_GUIScrollBars_SetScrollInfoMax
  342. ; #FUNCTION# ====================================================================================================================
  343. ; Author ........: Gary Frost
  344. ; Modified.......:
  345. ; ===============================================================================================================================
  346. Func _GUIScrollBars_SetScrollInfoPage($hWnd, $iBar, $iPage)
  347. If Not IsHWnd($hWnd) Then Return SetError(-2, -1, -1)
  348. Local $tSCROLLINFO = DllStructCreate($tagSCROLLINFO)
  349. DllStructSetData($tSCROLLINFO, "fMask", $SIF_PAGE)
  350. DllStructSetData($tSCROLLINFO, "nPage", $iPage)
  351. Return _GUIScrollBars_SetScrollInfo($hWnd, $iBar, $tSCROLLINFO)
  352. EndFunc ;==>_GUIScrollBars_SetScrollInfoPage
  353. ; #FUNCTION# ====================================================================================================================
  354. ; Author ........: Gary Frost
  355. ; Modified.......:
  356. ; ===============================================================================================================================
  357. Func _GUIScrollBars_SetScrollInfoPos($hWnd, $iBar, $iPos)
  358. Local $iIndex = -1, $iYAmount, $iXAmount
  359. For $x = 0 To UBound($__g_aSB_WindowInfo) - 1
  360. If $__g_aSB_WindowInfo[$x][0] = $hWnd Then
  361. $iIndex = $x
  362. $iXAmount = $__g_aSB_WindowInfo[$iIndex][2]
  363. $iYAmount = $__g_aSB_WindowInfo[$iIndex][3]
  364. ExitLoop
  365. EndIf
  366. Next
  367. If $iIndex = -1 Then Return 0
  368. ; Save the position for comparison later on
  369. Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $iBar)
  370. Local $iPosXY = DllStructGetData($tSCROLLINFO, "nPos")
  371. DllStructSetData($tSCROLLINFO, "fMask", $SIF_POS)
  372. DllStructSetData($tSCROLLINFO, "nPos", $iPos)
  373. _GUIScrollBars_SetScrollInfo($hWnd, $iBar, $tSCROLLINFO)
  374. _GUIScrollBars_GetScrollInfo($hWnd, $iBar, $tSCROLLINFO)
  375. ;// If the position has changed, scroll the window and update it
  376. $iPos = DllStructGetData($tSCROLLINFO, "nPos")
  377. If $iBar = $SB_HORZ Then
  378. If ($iPos <> $iPosXY) Then _GUIScrollBars_ScrollWindow($hWnd, $iXAmount * ($iPosXY - $iPos), 0)
  379. Else
  380. If ($iPos <> $iPosXY) Then _GUIScrollBars_ScrollWindow($hWnd, 0, $iYAmount * ($iPosXY - $iPos))
  381. EndIf
  382. EndFunc ;==>_GUIScrollBars_SetScrollInfoPos
  383. ; #FUNCTION# ====================================================================================================================
  384. ; Author ........: Gary Frost
  385. ; Modified.......:
  386. ; ===============================================================================================================================
  387. Func _GUIScrollBars_SetScrollRange($hWnd, $iBar, $iMinPos, $iMaxPos)
  388. Local $aResult = DllCall("user32.dll", "bool", "SetScrollRange", "hwnd", $hWnd, "int", $iBar, "int", $iMinPos, "int", $iMaxPos, "bool", True)
  389. If @error Then Return SetError(@error, @extended, False)
  390. Return $aResult[0]
  391. EndFunc ;==>_GUIScrollBars_SetScrollRange
  392. ; #FUNCTION# ====================================================================================================================
  393. ; Author ........: Gary Frost
  394. ; Modified.......:
  395. ; ===============================================================================================================================
  396. Func _GUIScrollBars_ShowScrollBar($hWnd, $iBar, $bShow = True)
  397. Local $aResult = DllCall("user32.dll", "bool", "ShowScrollBar", "hwnd", $hWnd, "int", $iBar, "bool", $bShow)
  398. If @error Then Return SetError(@error, @extended, False)
  399. Return $aResult[0]
  400. EndFunc ;==>_GUIScrollBars_ShowScrollBar