oneLess Posted December 24, 2014 Posted December 24, 2014 Thank You M23 I have a little script attached is for a new project Working keyboard keys : space , up arrrow , down arrow and working mouse of course the vertical scroll is OK BUT , do not follow the focused controls when i use up/down arrows. is possible to tell somehow to the vertical scroll to follow the active control when i use the keyboard ? oneLess oneLess_GUI.rar
Moderators Melba23 Posted December 24, 2014 Author Moderators Posted December 24, 2014 oneLess,You will have to do work out how many items are on each scroll page and then set the correct page for the selected item - something like this:expandcollapse popup#include "GUIScrollbars_Ex.au3" #include <Misc.au3> Global $_n = 100 Global $_targets_array[$_n][2] Global $_label_numar Global $_item_curent = 0 Global $_item_parasit = 0 Global $_item_maxim = $_n Global $_fer_targets Global $iPageLimit, $iOffSet = 2 ; The first checkbox is 2 * 20 down the GUI <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< _targets() Func _targets() Local $_ferG_stil = BitOR($WS_SYSMENU, $WS_BORDER, $WS_POPUPWINDOW) ; BitOR ( $WS_SYSMENU, $WS_POPUPWINDOW ) Local $_fer_parent = GUICreate ("Tools", 500, 600, 10, 10, $_ferG_stil) Local $_ferG_width = 300 ;3*$_butT_width + 4*20 Local $_ferG_height = 500 ; $_ecart_checbox * (11) + 3*20 - 10 + $_butT_height ;300 Local $_ferG_left = 10 ;$_w_left - $_ferT_width - 20 ; 10 Local $_ferG_top = 10 ;$_w_top ; 10 + 40*1 Local $_msg_targets Local $_i ; How many checkboxes on each page? <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< $iPageLimit = $_ferG_height / 20 $_fer_targets = GUICreate ("Tools", $_ferG_width, $_ferG_height, $_ferG_left, $_ferG_top, $_ferG_stil, -1, $_fer_parent) For $_i = 1 To $_n $_targets_array[$_i - 1][1 - 1] = GUICtrlCreateCheckbox("", 20, 40 + $_i * 20, 12, 12);, 15 , 150 ) Next For $_i = 1 To $_n $_targets_array[$_i - 1][2 - 1] = GUICtrlCreateLabel ("" & $_i, 20 + 12 + 5, 40 + $_i * 20, 120, 12) Next _GUIScrollbars_Generate($_fer_targets, 0, 20 + 25 + 20 + $_n * 20) GUISetState(@SW_SHOW) GUISwitch($_fer_parent) Local $_butG_exit = GUICtrlCreateButton ("Exit", 420, 20, 60, 25) $_label_numar = GUICtrlCreateLabel("i", 350, 20, 60, 12) GUISetState(@SW_SHOW) Local $hDLL = DllOpen("user32.dll") _set_i(1) While 1 ; Sleep(20) ; Not needed when there is a GUIGetMsg in the loop <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< $_msg_targets = GUIGetMsg() Select Case _IsPressed("28", $hDLL) ; {DOWN} _set_i_plus_1() While 1 If _IsPressed("28", $hDLL) = 0 Then ExitLoop Sleep(20) WEnd _Set_Scroll() ; Set correct scroll page <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Case _IsPressed("26", $hDLL) ; {UP} _set_i_minus_1() While 1 If _IsPressed("26", $hDLL) = 0 Then ExitLoop Sleep(20) WEnd _Set_Scroll() ; Set correct scroll page <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Case $_msg_targets >= $_targets_array[1 - 1][2 - 1] And $_msg_targets <= $_targets_array[$_n - 1][2 - 1] _set_i(_identify_pe_i($_msg_targets, $_n)) Case $_msg_targets >= $_targets_array[1 - 1][1 - 1] And $_msg_targets <= $_targets_array[$_n - 1][1 - 1] _set_i(_identify_pe_i($_msg_targets, $_n)) Case $_msg_targets = $GUI_EVENT_CLOSE ExitLoop Case $_msg_targets = $_butG_exit ExitLoop EndSelect WEnd DllClose($hDLL) GUIDelete($_fer_targets) EndFunc ;==>_targets Func _Set_Scroll() ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ; Determine which page of the scrolled GUI should be shown Local $iPage = Int(($_item_curent + $iOffSet) / $iPageLimit) + 1 ; And scroll to it _GUIScrollbars_Scroll_Page($_fer_targets, 0, $iPage) EndFunc Func _identify_pe_i($_mesaj, $_numar) Local $_j Local $_id = 0 For $_j = 1 To $_numar If $_targets_array[$_j - 1][1 - 1] = $_mesaj Or $_targets_array[$_j - 1][2 - 1] = $_mesaj Then $_id = $_j Return $_id MsgBox(-1, "", $_j, 1) EndIf Next Return $_id EndFunc ;==>_identify_pe_i Func _set_i($_numar) $_item_parasit = $_item_curent $_item_curent = $_numar If $_item_parasit <> $_item_curent Then GUICtrlSetBkColor ($_targets_array[$_item_curent - 1][2 - 1], 0xaaaa00) GUICtrlSetState ($_targets_array[$_item_curent - 1][1 - 1], $GUI_FOCUS) EndIf If $_item_parasit <> 0 Then If $_item_parasit <> $_item_curent Then GUICtrlSetBkColor ($_targets_array[$_item_parasit - 1][2 - 1], -1) EndIf EndIf GUICtrlSetData($_label_numar, $_numar) EndFunc ;==>_set_i Func _set_i_minus_1() If $_item_curent = 1 Then _set_i($_item_maxim) Else _set_i($_item_curent - 1) EndIf EndFunc ;==>_set_i_minus_1 Func _set_i_plus_1() If $_item_curent = $_item_maxim Then _set_i(1) Else _set_i($_item_curent + 1) EndIf EndFunc ;==>_set_i_plus_1Please ask if you have any questions. M23 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
NassauSky Posted February 5, 2015 Posted February 5, 2015 Thanks it looks good when I ran it. How would one normally create a popup message box from the main GUI. I'm somehow lost as to how to open a separate window from the Main Function.
Moderators Melba23 Posted February 5, 2015 Author Moderators Posted February 5, 2015 nassausky,That is not a question for this UDF thread - please post your question in the General Help section of the forums. M23 NassauSky 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
virhonestum Posted April 9, 2015 Posted April 9, 2015 Very useful! But is it possible to use it for a programatically changed label that aligns the text to the right? Here's an example: #Include <GUIConstants.Au3> #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <GUIScrollBars_Ex.au3> #include <StringSize.au3> Global $Display_String = 'TestTestTestTestTestTestTest' $hGUI = GUICreate("Test", 300, 90) $Button = GUICtrlCreateButton("Add Text", 10, 60, 280, 20) GUISetState() $Wrapper = GUICreate("Scroll", 280, 30, 10, 10, $WS_POPUP, $WS_EX_MDICHILD, $hGUI) $Display = GUICtrlCreateLabel($Display_String, 0, 0, 280, 40, $SS_RIGHT) GUICtrlSetFont(-1, 10, 400, 0, "Arial") GUISetState() While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit Case $Button _Update_Display() EndSwitch WEnd Func _Update_Display() $Display_String = $Display_String & "Test" GUICtrlSetData($Display, $Display_String) $Return = _StringSize($Display_String, 10, 400, 0, "Arial") If $Return[2] > 265 Then _GUIScrollbars_Generate($Wrapper, $Return[2], 0) EndIf EndFunc In this example, the label still scrolls to the right, even though the remaining text is on the left, and thus just revealing empty space. Thank you very much
Qwerty212 Posted September 26, 2015 Posted September 26, 2015 I'm using the UDF inside a GUI that creates buttons dinamically, so I have a fixed size GUI and I need to resize the scrollbars. I'm doing it just generating a new one in the GUI everytime that a new line of buttons is created:I'm creating the scrollbars inside a _Addlines() funtion:Func _Addlines() GUISwitch($Guilineas) ;as there are some other GUI in the script I have to switch to the needed one Local $anchoactual = 0 ;just a variable to set the with of the elements $i = $i + 1 ; Count index variable up $k = $k + 1 ; Count array size up IF $k > 3 Then ;If there are more than 3 rows of buttons then GUICtrlDelete($scrolls) ;I delete the previous scrollbars Global $scrolls = _GUIScrollbars_Generate($Guilineas, 0, $k * 55);and I do create a new one with the new height Endif ;Then I redim the array size for the buttons ReDim $ilinea[$k] ReDim $iOperacion[$k] ReDim $iHorainicio[$k] ReDim $iHorafinal[$k] ReDim $idiffhoras[$k] ReDim $iHorasproducc[$k] ReDim $ioperario[$k] ;And I start to create the new row of buttons $ilinea[$i] = GUICtrlCreateButton($k, 4, 55 * $i, $anchuraelementos / 16.84, 50) GUICtrlSetFont(-1, 32 - $fontdpi - $valorfuenteres, 700, 1, $sFont, 5) ;etc...I don't know If:IF $k > 3 Then ;If there are more than 3 rows of buttons then GUICtrlDelete($scrolls) ;I delete the previous scrollbars Global $scrolls = _GUIScrollbars_Generate($Guilineas, 0, $k * 55);and I do create a new one with the new height EndifWorks any better than:IF $k > 3 Then Global $scrolls = _GUIScrollbars_Generate($Guilineas, 0, $k * 55) EndifAs the result seems to be the same. Another question that I have is: as the scrollbars are not working with a touchscreen when you swipe inside the gui but they do when you swipe on the scrollbar thumb it works perfectly... is it possible to create your scrollbars with a custom width?: Greets from Barcelona
Moderators Melba23 Posted September 26, 2015 Author Moderators Posted September 26, 2015 Qwerty212,There is no requirement to delete the scrollbars - and using GUICtrlDelete is useless anyway as the _GUIScrollbars_Generate function does not return a ControlID but an array of interesting data, as explained in the header:; Return values .: Success - Returns a 4-element array (see remarks for details): ; [0] = Actual aperture width ; [1] = Actual aperture height] ; [2] = Width correction factor ; [3] = Height correction factor]And as you appear to want to adjust the size of the scrollbars to match the changing size of the scrolled area, you should really be using the GUIScrollbars_Size UDF, not GUIScrollbars_Ex. Look at the example script GUIScrollbars_Size_Example_2 (which is included in the zip file) to see how to do it - you will see that you never delete and recreate the scrollbars, just adjust their parameters so that they match the size of the area to be scrolled.The width of the scrollbars is set by the system and you can change it via the _WinAPI_SystemParametersInfo function.M23 Qwerty212 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
Moderators Melba23 Posted September 30, 2015 Author Moderators Posted September 30, 2015 (edited) Qwerty212.I have split off our discussion on gesture scrolling into a new thread as at present it has little to do with the UDF proper - see you there.That worked - not!Somehow the split thread screwed up the entire forum and Jon had to rebuild a number of the tables to fix it - and at the end of it all we lost some all of the split posts forever. So I will start a new thread in GH&S when I have got some new code for you to test and link to it here.M23 Edited September 30, 2015 by Melba23 Increased the Pk of the loss 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
Moderators Melba23 Posted September 30, 2015 Author Moderators Posted September 30, 2015 Qwerty212,The new thread is here.M23 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
Moderators Melba23 Posted September 30, 2015 Author Moderators Posted September 30, 2015 virhonestum,My most sincere apologies - I have only just noticed your post #145 from April. But better late than never - here is the answer to your question:expandcollapse popup#Include <GUIConstants.Au3> #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <GUIScrollBars_Size.au3> #include <StringSize.au3> Global $Display_String = 'Test0Test1Test2Test3Test4Test5Test6' $iCount = 6 $hGUI = GUICreate("Test", 300, 90) $Button = GUICtrlCreateButton("Add Text", 10, 60, 280, 20) GUISetState() $Wrapper = GUICreate("Scroll", 280, 30, 10, 10, $WS_POPUP, $WS_EX_MDICHILD, $hGUI) $Display = GUICtrlCreateLabel($Display_String, 0, 0, 280, 40, $SS_RIGHT) GUICtrlSetFont(-1, 10, 400, 0, "Arial") GUISetState() ; Create scrollbars and hide them _GUIScrollBars_Init($Wrapper) _GUIScrollBars_ShowScrollBar($Wrapper, $SB_VERT, False) _GUIScrollBars_ShowScrollBar($Wrapper, $SB_HORZ, False) GUIRegisterMsg($WM_HSCROLL, "_Scrollbars_WM_HSCROLL") While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit Case $Button _Update_Display() EndSwitch WEnd Func _Update_Display() ; Update counter for display purposes $iCount += 1 ; Add to string $Display_String &= "Test" & $iCount ; Amend GUI title WinSetTitle($hGUI, "", "Test " & $iCount) ; Size new string $Return = _StringSize($Display_String, 10, 400, 0, "Arial") ; Resize label to hold string and display it ControlMove($Wrapper, "", $Display, 0, 0, $Return[2], 40) GUICtrlSetData($Display, $Display_String) ; If label now too wide for aperture If $Return[2] > 280 Then ; Show the scrollbar _GUIScrollBars_ShowScrollBar($Wrapper, $SB_HORZ, True) ; Size the scrollbars and set the values $aRet = _GUIScrollbars_Size($Return[2], 0, $Wrapper) _GUIScrollBars_SetScrollInfoPage($Wrapper, $SB_HORZ, $aRet[0]) _GUIScrollBars_SetScrollInfoMax($Wrapper, $SB_HORZ, $aRet[1]) EndIf EndFunc Func _Scrollbars_WM_HSCROLL($hWnd, $Msg, $wParam, $lParam) #forceref $Msg, $lParam Local $nScrollCode = BitAND($wParam, 0x0000FFFF) Local $iIndex = -1, $xChar, $xPos Local $Page, $Pos, $TrackPos For $x = 0 To UBound($__g_aSB_WindowInfo) - 1 If $__g_aSB_WindowInfo[$x][0] = $hWnd Then $iIndex = $x $xChar = $__g_aSB_WindowInfo[$iIndex][2] ExitLoop EndIf Next If $iIndex = -1 Then Return 0 Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_HORZ) $Page = DllStructGetData($tSCROLLINFO, "nPage") $xPos = DllStructGetData($tSCROLLINFO, "nPos") $Pos = $xPos $TrackPos = DllStructGetData($tSCROLLINFO, "nTrackPos") Switch $nScrollCode Case $SB_LINELEFT DllStructSetData($tSCROLLINFO, "nPos", $Pos - 1) Case $SB_LINERIGHT DllStructSetData($tSCROLLINFO, "nPos", $Pos + 1) Case $SB_PAGELEFT DllStructSetData($tSCROLLINFO, "nPos", $Pos - $Page) Case $SB_PAGERIGHT DllStructSetData($tSCROLLINFO, "nPos", $Pos + $Page) Case $SB_THUMBTRACK DllStructSetData($tSCROLLINFO, "nPos", $TrackPos) EndSwitch DllStructSetData($tSCROLLINFO, "fMask", $SIF_POS) _GUIScrollBars_SetScrollInfo($hWnd, $SB_HORZ, $tSCROLLINFO) _GUIScrollBars_GetScrollInfo($hWnd, $SB_HORZ, $tSCROLLINFO) $Pos = DllStructGetData($tSCROLLINFO, "nPos") If ($Pos <> $xPos) Then _GUIScrollBars_ScrollWindow($hWnd, $xChar * ($xPos - $Pos), 0) Return $GUI_RUNDEFMSG EndFunc ;==>_Scrollbars_WM_HSCROLLAs you can see, you need to use the _Scrollbars_Size UDF to do this as you must amend the scrollbar data to match the new size rather than constantly recreating the scrollbars.Again my apologies - I hope the wait was worth it!M23 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
HurleyShanabarger Posted October 1, 2015 Posted October 1, 2015 Hi there,this is not question in general about the UDF, but I have a small issue. In the scrollable part of the GUI I am creating controls if a user is pressing a button. As the new controls are suppossed to placed under old once I am using the ControlGetPos command to get the position data of the last control.However when the scrollbar is moved the position data from ControlGetPos tells me a different position for the control. With _GUIScrollBars_GetScrollInfoPos I get the information where the scrollbar is placed, but how many pixels are moved by it? Is this a windows metric value or do I need to calculate it by myself using _GUIScrollBars_GetScrollInfoMax etc.?
Moderators Melba23 Posted October 1, 2015 Author Moderators Posted October 1, 2015 HurleyShanabarger,As you have discovered, creating new controls on a scrollable GUI is fraught with difficulty. I have 2 suggestions as to how you might proceed:Create all the controls as the script commences and then show them when required - that way you are sure they will be in the correct place.Scroll the bar to the top before using ControlGetPos so that the return reflects the true position - but I have found this less than reliable as Windows seems not to honour exact positions once scrollbars are involved.If you are looking to open a separate set of controls when the user presses this button, perhaps my GUIExtender UDF might be of more use to you - you can make sections of the GUI extend/retract at will and so only display those controls you wish at a specific time. Look in my sig for the link.If none of the above seems to fit the bill then please give some more details of what exactly you are trying to achieve and we can see if we can come up with another solution.M23 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
HurleyShanabarger Posted October 6, 2015 Posted October 6, 2015 Hi Melba,creating the control is not that difficult to understand. I was doing the mistake of using _GUIScrollbars_Generate when I wanted to resize/expand the scrollbar area. If I use _GUIScrollBars_SetScrollInfoMax instead it works just fine.Thanks for the input!
Hyflex Posted February 6, 2016 Posted February 6, 2016 On 10/1/2015 at 8:05 PM, Melba23 said: Hi Melba23, I'm having a little issue with this... if you edit GUIScrollbars_Size_Example_2.au3 and change the max array length from 100 to 1000 and then try and draw 999 it will only draw 647 times because it's ran out of drawable space (even though there is space avaliable below), It ends up looking like: How can we fix that?
Moderators Melba23 Posted February 6, 2016 Author Moderators Posted February 6, 2016 Hyflex, Nothing to do with my UDF - you are running up against one of the limits of AutoIt. When you define the location of a control you must define the x and y coordinates - these are limited to a 16-bit signed integer (32767 / 0x7FFF). So as soon as you hit that limit, you cannot draw any more controls - czardas ran into the same problem earlier in this thread: https://www.autoitscript.com/forum/topic/113723-scrollbars-made-easy-new-version-22-nov-14/?do=findComment&comment=864808 So sorry, but nothing I can do. M23 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
corgano Posted July 23, 2016 Posted July 23, 2016 Would it be possible to get a very simple example with a section of scroll able items (like GUIScrollbars_Size_Example_2) but only PART of the GUI scrolls? The only example I see with a scroll-able section inside a normal window is the GUIScrollbars_Ex_Example_1, but it was too complex for me to figure out what was going on. All I need is a resize-able window, with a vertical-scrollable section on the left and a static section on the right. I know this udf should be able to do this but couldn't figure it out. 0x616e2069646561206973206c696b652061206d616e20776974686f7574206120626f64792c20746f206669676874206f6e6520697320746f206e657665722077696e2e2e2e2e
Moderators Melba23 Posted July 23, 2016 Author Moderators Posted July 23, 2016 (edited) corgano, Quote All I need is a resize-able window, with a vertical-scrollable section on the left and a static section on the right Does the scrollable section on the left remain the same size or does it resize with the main GUI? M23 Edit: How about this? expandcollapse popup#include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <WinAPI.au3> #include <GUIScrollbars_Ex.au3> $hGUI = GUICreate("Test", 500, 500, Default, Default, $WS_SIZEBOX) GUISetState() GUIRegisterMsg($WM_EXITSIZEMOVE, "_WM_EXITSIZEMOVE") $aSize = WinGetClientSize($hGUI) $hScroll = GUICreate("", $aSize[0] / 2, $aSize[1], -5, -5, $WS_POPUP, $WS_EX_MDICHILD, $hGUI) GUICtrlCreateLabel("000", 0, 0, 100, 100) GUICtrlSetBkColor(-1, 0xFFCCCC) GUICtrlSetResizing(-1, $GUI_DOCKALL) GUICtrlCreateLabel("100", 0, 100, 100, 100) GUICtrlSetBkColor(-1, 0xCCFFCC) GUICtrlSetResizing(-1, $GUI_DOCKALL) GUICtrlCreateLabel("200", 0, 200, 100, 100) GUICtrlSetBkColor(-1, 0xCCCCFF) GUICtrlSetResizing(-1, $GUI_DOCKALL) GUICtrlCreateLabel("300", 0, 300, 100, 100) GUICtrlSetBkColor(-1, 0xFFCCCC) GUICtrlSetResizing(-1, $GUI_DOCKALL) GUICtrlCreateLabel("400", 0, 400, 100, 100) GUICtrlSetBkColor(-1, 0xCCFFCC) GUICtrlSetResizing(-1, $GUI_DOCKALL) GUICtrlCreateLabel("500", 0, 500, 100, 100) GUICtrlSetBkColor(-1, 0xCCCCFF) GUICtrlSetResizing(-1, $GUI_DOCKALL) GUICtrlCreateLabel("600", 0, 600, 100, 100) GUICtrlSetBkColor(-1, 0xFFCCCC) GUICtrlSetResizing(-1, $GUI_DOCKALL) GUICtrlCreateLabel("700", 0, 700, 100, 100) GUICtrlSetBkColor(-1, 0xCCFFCC) GUICtrlSetResizing(-1, $GUI_DOCKALL) GUICtrlCreateLabel("800", 0, 800, 100, 100) GUICtrlSetBkColor(-1, 0xCCCCFF) GUICtrlSetResizing(-1, $GUI_DOCKALL) GUICtrlCreateLabel("900", 0, 900, 100, 100) GUICtrlSetBkColor(-1, 0xFFCCCC) GUICtrlSetResizing(-1, $GUI_DOCKALL) GUICtrlCreateLabel("1000", 0, 1000, 100, 100) GUICtrlSetResizing(-1, $GUI_DOCKALL) GUISetState() $iMaxScroll = 750 _GUIScrollbars_Generate($hScroll, 0, $iMaxScroll) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd Func _WM_EXITSIZEMOVE($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $wParam, $lParam ; Get position of client area origin Local $tPoint = DllStructCreate("int X;int Y") DllStructSetData($tPoint, "X", 0) DllStructSetData($tPoint, "Y", 0) _WinAPI_ClientToScreen($hWnd, $tPoint) ; Check if handle matches If $hWnd = $hGUI Then ; Get final size of main GUI Local $aClientSize = WinGetClientSize($hWnd) ; Resize scroll GUI WinMove($hScroll, "", DllStructGetData($tPoint, "X") , DllStructGetData($tPoint, "Y") , $aClientSize[0] / 2, $aClientSize[1]) ; Mobve scrollbar to top _GUIScrollBars_SetScrollInfoPos($hScroll, $SB_VERT, 0) ; Regenerate scrollbars _GUIScrollbars_Generate($hScroll, 0, $iMaxScroll) EndIf EndFunc Edited July 24, 2016 by Melba23 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
Moderators Melba23 Posted February 16, 2017 Author Moderators Posted February 16, 2017 [New Version] - 16 Feb 17 Changed: Scrollbar size now determined dynamically rather than previous fixed value.. New UDFs and examples in first post. M23 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
abberration Posted February 17, 2017 Posted February 17, 2017 Hi, Melba23 I was having trouble making scrollbars work and found this project. It's great! On one of my scripts, I used a very large Gui to list 100+ checkboxes. Now I can shrink the Gui. It's a neat coincidence that you updated it yesterday and I needed it today. Thanks for all your hard work! I've always admired your projects. Easy MP3 | Software Installer | Password Manager
Moderators Melba23 Posted February 17, 2017 Author Moderators Posted February 17, 2017 aberration, Delighted you find it useful. M23 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
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