SkoubyeWan Posted September 27, 2018 Share Posted September 27, 2018 I have searched for how to do this and am coming up dry. Probably simple and I am overlooking it. Any help is greatly appreciated. I have a large number of input fields in a GUI with a scroll bar. Hitting the tab key moves between them just fine, but when you get to the last visible input box and then hit tab, the cursor is now moving between input boxes that are not visible. I can use the scroll bar to move down to show additional input boxes and where the cursor is located. However, I would like the tab key to just scroll the window to the input box containing the cursor automatically so it is visible. Here is a dramatically cut back version of the code to illustrate the issue. Thank you in advance for any assistance. #include <Array.au3> #include <StaticConstants.au3> #include <GUIScrollbars_Ex.au3> Global $iIndex = 0 Global $aArray[40] Global $idInput[40] Global $Form1 = GUICreate("Form1", 500, 500, -1, 100) _GUIScrollbars_Generate($Form1, 0, 1000) Global $Label1 = GUICtrlCreateLabel("Enter the Data for Each Field", 56, 16, 339, 33) While $iIndex <= 30 $idInput[$iIndex] = GUICtrlCreateInput("", 56, 56 + $iIndex * 29, 400, 28, -1) $iIndex += 1 WEnd GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted September 28, 2018 Moderators Share Posted September 28, 2018 SkoubyeWan, That was a fun little challenge! As you were already using my GUIScrollbars_Ex UDF I used another function from it to scroll the GUI when required (it works when both tabbing down and shift-tabbing up): expandcollapse popup#include <Array.au3> #include <StaticConstants.au3> #include <GUIScrollbars_Ex.au3> Global $iIndex = 0 Global $aArray[40] Global $idInput[40][3] $iAperture = 500 $iDepth = 29 Global $Form1 = GUICreate("Form1", 500, $iAperture, -1, 100) _GUIScrollbars_Generate($Form1, 0, 1000) Global $Label1 = GUICtrlCreateLabel("Enter the Data for Each Field", 56, 16, 339, 33) While $iIndex <= 30 $idInput[$iIndex][0] = GUICtrlCreateInput("", 56, 56 + $iIndex * $iDepth, 400, 28, -1) ; Store handle of the input $idInput[$iIndex][1] = GUICtrlGetHandle($idInput[$iIndex][0]) ; Calculate and store the page on which the input appears $idInput[$iIndex][2] = 1 + Int(((56 + $iDepth) + ($iIndex * $iDepth)) / $iAperture) $iIndex += 1 WEnd GUISetState(@SW_SHOW) ; Variable to hold current input handle $hPrev = 0 While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitch ; Find handle with focus $hWnd = _WinAPI_GetFocus() ; If changed then If $hWnd <> $hPrev Then ; Check it is an input For $i = 0 To UBound($idInput) - 1 If $idInput[$i][1] = $hWnd Then ; Scroll to the relevant page _GUIScrollbars_Scroll_Page($Form1, 0, $idInput[$i][2]) ; No point in looking further ExitLoop EndIf Next ; Save current input handle $hPrev = $hWnd EndIf WEnd The trick was getting the maths correct to calculate the required page - you might need to fettle that a bit in your full version. M23 Subz 1 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 columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
SkoubyeWan Posted September 29, 2018 Author Share Posted September 29, 2018 Nice! Works like a charm. I will have to digest it a little to make sure I understand the parameters. Thank you! Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now