Jump to content

Scrollbars Made Easy - New version 27 Jan 22


Melba23
 Share

Recommended Posts

@Melba23

I have use this UDF to create scrollbars for a case as below. Its is working fine line until a particular height. As I've mentioned in the comment below whenever I'm increasing the height of the window by increasing the value of the LabelCnt variable beyond 32, some of the page is not visible. Any advice on how to overcome this or what what I'm doing wrong?

#include <GUIConstantsEx.au3>
#include <GUIScrollbars_Ex.au3>
#include <StaticConstants.au3>

Opt("GUIOnEventMode", 1)

$MainScreen = GUICreate("Expense Tracker", 600, 520, -1, -1, -1)
GUISetOnEvent($GUI_EVENT_CLOSE, "ExitAll")
GUISetBkColor(0xE0E0E0)
GUISetState()

$CategoriesListScr = GUICreate("", 250, 480, 0, 40, $WS_POPUP, $WS_EX_MDICHILD, $MainScreen)
GUISetFont(14, 500, 0, "Calibri")
GUISetBkColor(0xFFFFFF)
GUICtrlSetResizing($CategoriesListScr, $GUI_DOCKALL)
GUISetState()

$LastLine = 0

For $LabelCnt = 0 To 31; Working fine till 30; Half the label gets hidden from 32 and a full control is hidden from 44
    $LastLine += 40

    GUICtrlCreateLabel("Test String" & $LabelCnt, 47, $LastLine, 250, 40, $SS_CENTERIMAGE)
Next

_GUIScrollbars_Generate($CategoriesListScr, 250, $LastLine + 40)
_GUIScrollBars_ShowScrollBar($CategoriesListScr, $SB_HORZ, False)

While 1

WEnd

Func ExitAll()
    Exit
EndFunc   ;==>ExitAll

 

Edited by siva1612
Link to comment
Share on other sites

  • Moderators

siva1612,

If I remove the _GUIScrollBars_ShowScrollBar line I get all the labels displayed - I tested up to 200. You can remove the horizontal scrollbar by setting the _GUIScrollbars_Generate horizontal parameter to 0:

#include <GUIConstantsEx.au3>
#include <GUIScrollbars_Ex.au3>
#include <StaticConstants.au3>

Opt("GUIOnEventMode", 1)

$MainScreen = GUICreate("Expense Tracker", 600, 520, -1, -1, -1)
GUISetOnEvent($GUI_EVENT_CLOSE, "ExitAll")
GUISetBkColor(0xE0E0E0)
GUISetState()

$CategoriesListScr = GUICreate("", 250, 480, 0, 40, $WS_POPUP, $WS_EX_MDICHILD, $MainScreen)
GUISetFont(14, 500, 0, "Calibri")
GUISetBkColor(0xFFFFFF)
GUICtrlSetResizing($CategoriesListScr, $GUI_DOCKALL)
GUISetState()

$LastLine = -30

For $LabelCnt = 0 To 200; Working fine
    $LastLine += 40
    GUICtrlCreateLabel("Test String" & $LabelCnt, 47, $LastLine, 250, 40, $SS_CENTERIMAGE)
Next

_GUIScrollbars_Generate($CategoriesListScr, 0, $LastLine + 40)
;_GUIScrollBars_ShowScrollBar($CategoriesListScr, $SB_HORZ, False)

While 1
    Sleep(10) ; You need a Sleep to stop the CPU from frying <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
WEnd

Func ExitAll()
    Exit
EndFunc   ;==>ExitAll

Note my comment about the idle loop Sleep.

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png 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 columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to comment
Share on other sites

  • 6 months later...

Hi,

I tried your fine UDF. It works fine on PC, but not on WIN10 Tablet. Do you have any idea, what I can do? On PC you can scroll the left area with mousewheel or use the scrollbar with mouse. On Tablet: Only using the scrollbar with the finger it scrolls the left gui-area. Using the finger inside the gui-area nothing ... Any idea?

I tried also this other example .

Thanks

Best regards

Thomas

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StructureConstants.au3>
#include <GUIScrollBars.au3>
#include <ScrollBarConstants.au3>
#include <ListViewConstants.au3>
#include <SendMessage.au3>
#include "GUIScrollbars_Ex.au3"

startGui()

Func startGui()
    $Gui = GUICreate("", 700, 600, -1, -1, $WS_POPUP)
    $up = GUICtrlCreateButton("UP", 10, 10, 80, 40)
    $down = GUICtrlCreateButton("DOWN", 100, 10, 80, 40)
    GUICtrlCreateLabel("Close with ESC", 550, 10, 120, 40)
    GUIRegisterMsg($WM_MOUSEWHEEL, "_Scrollbars_WM_MOUSEWHEEL")
    $hScrollPl = GUICreate("$hScrollPl", 500, 400, 10, 100, BitOR($WS_POPUP, $WS_GROUP, $WM_VSCROLL, $WS_CLIPSIBLINGS), $WS_EX_MDICHILD, $Gui)
    GUISetBkColor(0xffffff)

    $art = GUICtrlCreateLabel("", 1, 1)

    $hListV = GUICtrlCreateListView("1|2", 100, 100, 300, 200, BitOR($LVS_REPORT, $LVS_NOCOLUMNHEADER, $LVS_SHOWSELALWAYS))
    _GUIScrollbars_Generate($hScrollPl, 0,3000)
    ;_GUIScrollbars_Scroll_Page($hScrollPl, 0, 99)
    GUISetState(@SW_SHOW, $Gui)
    GUISetState(@SW_SHOW, $hScrollPl)
    GUICtrlSetState($art, $GUI_FOCUS); Focus auf Label von $hScrollPl
    GUISwitch($Gui)
    ;GUISetState(@SW_SHOW, $Gui)

    While 1
        $iMsg3 = GUIGetMsg()
        Switch $iMsg3
            Case $GUI_EVENT_CLOSE
                Exit
            Case $up
                MsgBox(0, "Info", "Button up pressed")
                GUICtrlSetState($art, $GUI_FOCUS); Focus on Label $hScrollPl
            Case $down
                MsgBox(0, "Info", "Button down pressed")
                GUICtrlSetState($art, $GUI_FOCUS); Focus on Label $hScrollPl
        EndSwitch
    WEnd
EndFunc   ;==>startGui

 

Edited by TJF
Link to comment
Share on other sites

  • Moderators

TJF,

The UDF has no code to react to tablet gestures. Now I have a Win 10 tablet to work on I will see what I can do to add some.

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png 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 columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to comment
Share on other sites

  • 2 weeks later...
  • 2 months later...

Hello @Melba23,

is really funny... I just want to write something about the topic "WM_TOUCH"... and on the current last page in this thread I read then that is spoken exactly about it.

Anyway, now I've already written the text... and here it is. ;-)


I sorted you into my hall of fame a long time ago...

Your work is perfect as always... at least almost perfect... because something is always missing and in some places there are still hidden bugs that only strike when you need it the least.

I have not noticed bugs yet, but something missing... the support for WM_TOUCH.

Would be really great, if you could install that... ;-)

 

On 4.10.2017 at 6:42 PM, TJF said:

I think WM_TOUCH ( GESTURE_TOUCH.zip ) is the way to go...?

For scrolling only WM_TOUCH is needed... WM_GESTURE will probably only be relevant for the automatic resizing of ScrollBars.

Edited by Bitnugger
Link to comment
Share on other sites

  • Moderators

Bitnugger,

Quote

Your work is perfect as always... at least almost perfect... because something is always missing and in some places there are still hidden bugs that only strike when you need it the least.

Sorry about that! I will look into adding gesture support to this UDF as soon as the real world allows me the time to do so - which may not be any time soon I am afraid.

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png 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 columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to comment
Share on other sites

  • 5 weeks later...
  • 3 months later...

Hi, @Melba23 I love this UDF.  Thank you for creating it.:construction:

I'm running into a problem adding Sliders with GUICrtlCreateSlider() to a parent GUI.

The parent GUI also has a child GUI that I call _GUIScrollbars_Generate() on.

My problem is I do not detect messages from GUIGetMsg() as equal to the Slider.  If I REM the call to _GUIScrollbars_Generate() I detect the Slider message.

If I change the Slider to a Button I can detect the Button from GUIGetMsg() without remarking _GUIScrollbars_Generate().

It seems to be something specific to Slider and _GUIScrollbars_Generate().

I've played with GUISwitch() and that doesn't seem to be helping.

When I ConsoleWrite() the Slider controlID it is same value when it's working as when it is not working.

Do you know what I could be doing wrong and how I can fix it?

In this reproducer: Remarking line: 102: _GUIScrollbars_Generate() will allow Case $aControl[$eidSCAN_GRID_R_slider] to be detected and the Input field for Red component will be updated, but then I lose scrollbars :'(

#cs ----------------------------------------------------------------------------
    AutoIt Version: 3.3.14.5
    Author:         Xandy

    Script Function:
    Reproducer to learn why Red Slider doesn't detect with GUIGetMsg() if used with _GUIScrollbars_Generate()

#ce ----------------------------------------------------------------------------

#include <GDIPlus.au3>
#include <Include\GUIScrollbars_Ex.au3>; Author: Melba23
#include <File.au3>
#include <GuiEdit.au3>
#include <GUIConstants.au3>
#include <GuiComboBox.au3>
#include <WinAPI.au3>

Const $FILTER_IMAGE = "Image (*.BMP;*.PNG;*.GIF;*.JPG;*JPEG;*.TGA;*.TIFF)"
Const $FILTER_IMAGE_TXT = "Image, Txt (*.TXT;*.BMP;*.PNG;*.GIF;*.JPG;*JPEG;*.TGA;*.TIFF)"

#Region Enum
Enum $eSETTING_DATA_NAMES = 0, _ ;                  0
        $eSETTING_IMAGE_PATH_LAST, _ ;              1
        $eSETTING_TILE_W, _ ;                       2
        $eSETTING_TILE_H, _ ;                       3
        $eSETTING_WORLD_START_X, _ ;                4
        $eSETTING_WORLD_START_Y, _ ;                5
        $eSETTING_WORLD_END_W, _ ;                  6
        $eSETTING_WORLD_END_H, _ ;                  7
        $eSETTING_WORLD_START_TILE_X, _ ;           8
        $eSETTING_WORLD_START_TILE_Y, _ ;           9
        $eSETTING_WORLD_END_TILE_W, _ ;             10
        $eSETTING_WORLD_END_TILE_H, _ ;             11
        $eSETTING_MAPPARSER_CPP_USE, _ ;            12; controls read from scan
        $eSETTING_MAPPARSER_CPP_PATH, _ ;           13
        $eSETTING_OUTPUT_PATH_LAST, _ ;             14
        $eSETTING_BLOCK_INSERT_W, _ ;               15
        $eSETTING_BLOCK_INSERT_H, _ ;               16
        $eSETTING_TILES, _ ;                        17
        $eSETTING_WORLD_W, _ ;                      18
        $eSETTING_WORLD_H, _ ;                      19
        $eSETTING_TILE_PALETTE_TILES_W, _ ;         20
        $eSETTING_TILE_PALETTE_PAGE, _ ;            21
        $eSETTING_TILE_PALETTE_PAGES, _ ;           22
        $eSETTING_TILE_PALETTE_TILES_PER_PAGE, _ ;  23
        $eSETTING_MAX ;                             24; saved

; $eSETTING 1..12 are used to specify data control
Enum $eidSCAN_GRID_checkbox = 13, _ ;       13
        $eidSCAN_HEX_checkbox, _ ;          14
        $eidSCAN_GRID_COLOR_R_input, _ ;    15
        $eidSCAN_GRID_COLOR_G_input, _ ;    16
        $eidSCAN_GRID_COLOR_B_input, _ ;    17
        $eidSCAN_GRID_COLOR_A_input, _ ;    18
        $eidSCAN_GRID_R_slider, _;          19
        $eidSCAN_GRID_G_slider, _;          20
        $eidSCAN_GRID_B_slider, _;          21
        $eidSCAN_GRID_A_slider, _;          22
        $eidSCAN_CONFIRM_button, _ ;        23
        $eidSCAN_IMAGE_pic, _ ;             24
        $eidSCAN_CPP_BROWSE_button, _ ;     25
        $eidSCAN_IMAGE_h, _ ;               26
        $eidSCAN_IMAGEBROWSE_button, _ ;    27
        $eidSCAN_MAX ;                      28
#EndRegion Enum

OnAutoItExitRegister("_Exit")

; Main test GUI, Main() is removed for reproducer
$hGUI = GUICreate("", 320, 200)
GUISetState()

Local $aSetting[$eSETTING_MAX]
$aSetting[$eSETTING_IMAGE_PATH_LAST] = "E:\Docs\Pictures\avatar_evans_doge.png"
_GDIPlus_Startup()
Scan_Dialog($hGUI, $aSetting)

; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
; FUNCTION LIST
;
; Dialog appears for the user to select an image, tile size, and image area.
; Also sets path to external C++ MapParser.exe
Func Scan_Dialog($hGUI_parent, ByRef $aSetting)
    $aGUI_rect = WinGetPos($hGUI_parent)
    $hGUI = GUICreate("Scan Image to world and tiles", 640, 480, $aGUI_rect[0] + 20, $aGUI_rect[1] + 20, Default, Default, $hGUI_parent)
    $aGUI_rect = WinGetPos($hGUI)
    GUISetState()

    $gScrollbars_scrolled = 1
    ; Set default tile size, when invalid tile size
    If $aSetting[$eSETTING_TILE_W] < 1 Then $aSetting[$eSETTING_TILE_W] = 16
    If $aSetting[$eSETTING_TILE_H] < 1 Then $aSetting[$eSETTING_TILE_H] = 16

    ; Send this Sub-GUI to be defined
    Local $hGUI_Pic = Null

    ; Create controls for this GUI
    Local $aControl = Scan_Dialog_ControlCreate($hGUI, $hGUI_Pic, $aSetting)

    ;
    ;; With the line below removed: $aControl[$eidSCAN_GRID_R_slider] is detected.  But then I have no beautiful scrollbars for large images :(
    _GUIScrollbars_Generate($hGUI_Pic, 8000, 8000)
    ;_GUIScrollbars_Generate($hGUI_Pic, 8000, 8000)
    ;
    ;

    $aImage_Size = _GDIPlus_ImageGetDimension($aControl[$eidSCAN_IMAGE_h])
    If Not IsArray($aImage_Size) Then Local $aImage_Size[2] = [0, 0]
    ; Image picture
    $aControl[$eidSCAN_IMAGE_pic] = Control_Create("Pic", "", 0, 0, $aImage_Size[0], $aImage_Size[1], "Pic tooltip")
    Image_Load2($aControl[$eidSCAN_IMAGE_pic], $aSetting[$eSETTING_IMAGE_PATH_LAST], $aControl)
    GUISwitch($hGUI_parent)
    ;_WinAPI_SetParent ( $hGUI_Pic, $hGUI)

    Local $aImage_Size = _GDIPlus_ImageGetDimension($aControl[$eidSCAN_IMAGE_h])
    If Not IsArray($aImage_Size) Then Local $aImage_Size[2] = [0, 0]

    Local $penColor = 0xFFFF0000
    Local $aidColor[4] = [$aControl[$eidSCAN_GRID_COLOR_A_input], _
            $aControl[$eidSCAN_GRID_COLOR_R_input], _
            $aControl[$eidSCAN_GRID_COLOR_G_input], _
            $aControl[$eidSCAN_GRID_COLOR_B_input]]
    Local $surf = 0
    Local $MapParser_Path = $aSetting[$eSETTING_MAPPARSER_CPP_PATH]
    Local $confirm = 0
    ;$idSlider = GUICtrlCreateSlider(0, 0, 200, 20)
    out("setlimit", GUICtrlSetLimit($aControl[$eidSCAN_GRID_R_slider], 255))
    Do

        $msg = GUIGetMsg()
        Switch $msg
            ; Testing Case Red component Slider
            Case $aControl[$eidSCAN_GRID_R_slider]
                GUICtrlSetData($aidColor[1], GUICtrlRead($aControl[$eidSCAN_GRID_R_slider]))

            ;Case $idSlider
            ;   exit

            Case $aControl[$eidSCAN_IMAGEBROWSE_button]
                $sPath = _FileOpenDialog("Title", $FILTER_IMAGE, FileGetFolder($aSetting[$eSETTING_IMAGE_PATH_LAST]), "", $hGUI)
                If $sPath <> "" Then
                    ; Path input set to file path
                    GUICtrlSetData($aControl[$eSETTING_IMAGE_PATH_LAST], $sPath)
                    $aImage_Size = Scan_Dialog_Load_Image($hGUI_Pic, $aControl, GUICtrlRead($aControl[$eSETTING_IMAGE_PATH_LAST]))
                    $gScrollbars_scrolled = 1
                EndIf

            Case $aControl[$eSETTING_TILE_W], $aControl[$eSETTING_TILE_H], _
                    $aControl[$eSETTING_WORLD_START_X], $aControl[$eSETTING_WORLD_START_Y], $aControl[$eSETTING_WORLD_END_W], $aControl[$eSETTING_WORLD_END_H], _
                    $aControl[$eSETTING_WORLD_START_TILE_X], $aControl[$eSETTING_WORLD_START_TILE_Y], $aControl[$eSETTING_WORLD_END_TILE_W], $aControl[$eSETTING_WORLD_END_TILE_H]
                $gScrollbars_scrolled = 1

            Case $aControl[$eSETTING_IMAGE_PATH_LAST]
                $aImage_Size = Scan_Dialog_Load_Image($hGUI_Pic, $aControl, GUICtrlRead($aControl[$eSETTING_IMAGE_PATH_LAST]))
                $gScrollbars_scrolled = 1

            Case $aControl[$eidSCAN_GRID_checkbox]
                $gScrollbars_scrolled = 1

            Case $aControl[$eidSCAN_CONFIRM_button]
                $confirm = 1
        EndSwitch ; msg
        ;out("Slider:", $aControl[$eidSCAN_GRID_R_slider])
        If $gScrollbars_scrolled = 1 Then
            $gScrollbars_scrolled = 0
            $x = GUICtrlRead($aControl[$eSETTING_WORLD_START_X])
            $y = GUICtrlRead($aControl[$eSETTING_WORLD_START_Y])
            $w = GUICtrlRead($aControl[$eSETTING_WORLD_END_W])
            $h = GUICtrlRead($aControl[$eSETTING_WORLD_END_H])
            $tile_w = GUICtrlRead($aControl[$eSETTING_TILE_W])
            $tile_h = GUICtrlRead($aControl[$eSETTING_TILE_H])
            $start_tile_x = GUICtrlRead($aControl[$eSETTING_WORLD_START_TILE_X])
            $start_tile_y = GUICtrlRead($aControl[$eSETTING_WORLD_START_TILE_Y])
            $end_tile_w = GUICtrlRead($aControl[$eSETTING_WORLD_END_TILE_W])
            $end_tile_h = GUICtrlRead($aControl[$eSETTING_WORLD_END_TILE_H])
            Scan_Dialog_Draw_Tile_Grid($x, $y, $w, $h, $start_tile_x, $start_tile_y, $end_tile_w, $end_tile_h, $aImage_Size[0], $aImage_Size[1], $tile_w, $tile_h, $penColor, $aControl, $hGUI_Pic)
        EndIf
    Until $msg = $GUI_EVENT_CLOSE Or $confirm = 1
    If $confirm = 1 Then
        $aSetting[$eSETTING_IMAGE_PATH_LAST] = GUICtrlRead($aControl[$eSETTING_IMAGE_PATH_LAST])
        For $i = 2 To $eSETTING_MAPPARSER_CPP_USE
            $aSetting[$i] = Int(GUICtrlRead($aControl[$i]))
        Next
        $aSetting[$eSETTING_MAPPARSER_CPP_PATH] = $MapParser_Path
        $surf = "This is test case only";_IMG_Load($aSetting[$eSETTING_IMAGE_PATH_LAST])
    EndIf
    GUIDelete($hGUI)
    Return $surf
EndFunc   ;==>Scan_Dialog

; Draws the GUI controls for Scan_Dialog()
Func Scan_Dialog_ControlCreate(ByRef $hGUI_parent, ByRef $hGUI_Pic, ByRef $aSetting)
    Local $aGUI_rect = WinGetPos($hGUI_parent)
    Local $aControl[$eidSCAN_MAX]

    Local $control_h = 20
    Local $control_margin_w = 10, $control_margin_h = 10
    Local $control_y = $control_margin_h
    Local $control_image_pic_w = 400, $control_pic_h = 420
    ; Image Input
    $sPath = $aSetting[$eSETTING_IMAGE_PATH_LAST]
    $control_label_w = 60
    $control_w = $aGUI_rect[2] - 35 - ($control_margin_w + $control_label_w) - 100
    $aControl[$eSETTING_IMAGE_PATH_LAST] = Control_Create("Input", $sPath, _
            $control_margin_w + $control_label_w, $control_y, $control_w, 20, _
            "Image file; convert into world and tiles", "Image Path", $control_margin_w, $control_y, $control_label_w, 20)

    ; Image browse
    $aControl[$eidSCAN_IMAGEBROWSE_button] = Control_Create("Button", "...", $control_margin_w + $control_label_w + $control_w, $control_y, 20, 20, "Browse for Image to convert.")

    ; Image picture window
    $control_y += $control_h * 2
    $control_image_y = $control_y

    ; Tile size selection
    Local $control_y = $control_margin_h
    Local $aPos = [$control_margin_w + $control_image_pic_w + 10, $control_image_y, 165, 250]
    $label_w = 25
    Control_Create("Label", "Tile", $aPos[0], $aPos[1] + 25, $label_w, 20, "Cut image into rectangles of this size.")
    $tile_size_w = 40
    $aControl[$eSETTING_TILE_W] = Control_Create("Input numonly", $aSetting[$eSETTING_TILE_W], $aPos[0] + $label_w, $aPos[1] + 20, $tile_size_w, 20, _
            "Width of tiles", "Width", $aPos[0] + 20, $aPos[1], 35, 20)

    $aControl[$eSETTING_TILE_H] = Control_Create("Input numonly", $aSetting[$eSETTING_TILE_H], $aPos[0] + $label_w + $tile_size_w, $aPos[1] + 20, 40, 20, _
            "Height of tiles", "Height", $aPos[0] + 20 + $tile_size_w, $aPos[1], 35, 20)

    ; Image scan area: Start x, y, End w, h
    $aPos[1] += 80
    Control_Create("Label", "Start", $aPos[0], $aPos[1], 20, 20, "Position to start reading tile from Image.")
    $aControl[$eSETTING_WORLD_START_X] = Control_Create("Input numonly", $aSetting[$eSETTING_WORLD_START_X], $aPos[0] + $label_w, $aPos[1], $tile_size_w, 20, _
            "Pixel position X to start reading tiles from Image", "X", $aPos[0] + $label_w, $aPos[1] - 20, 35, 20)

    $aControl[$eSETTING_WORLD_START_Y] = Control_Create("Input numonly", $aSetting[$eSETTING_WORLD_START_Y], $aPos[0] + $label_w + $tile_size_w, $aPos[1], $tile_size_w, 20, _
            "Pixel position Y to start reading tiles from Image", "Y", $aPos[0] + $label_w + $tile_size_w, $aPos[1] - 20, 35, 20)

    $x = $aPos[0] + $label_w + $tile_size_w * 2 + 5
    Control_Create("Label", "Tile", $x, $aPos[1], 30, 20, "These offsets are calculated in tiles.")
    $aControl[$eSETTING_WORLD_START_TILE_X] = Control_Create("Input numonly", $aSetting[$eSETTING_WORLD_START_TILE_X], $x + $label_w, $aPos[1], $tile_size_w, 20, _
            "Tile X to start reading tiles from Image" & @CRLF & "This offset is added to tile offset", "X", $x + $label_w, $aPos[1] - 20, 35, 20)

    $aControl[$eSETTING_WORLD_START_TILE_Y] = Control_Create("Input numonly", $aSetting[$eSETTING_WORLD_START_TILE_Y], $x + $label_w + $tile_size_w, $aPos[1], $tile_size_w, 20, _
            "Tile Y to start reading tiles from Image" & @CRLF & "This offset is added to tile offset", "Y", $x + $label_w + $tile_size_w, $aPos[1] - 20, 35, 20)
    ; Area: End w, h
    $aPos[1] += 50
    Control_Create("Label", "End", $aPos[0], $aPos[1], 20, 20, "Position to stop reading tile from Image.")
    $aControl[$eSETTING_WORLD_END_W] = Control_Create("Input numonly", $aSetting[$eSETTING_WORLD_END_W], $aPos[0] + $label_w, $aPos[1], $tile_size_w, 20, _
            "Width in pixels to stop reading tiles from Image" & @CRLF & "This offset is added to tile offset", "W", $aPos[0] + $label_w, $aPos[1] - 20, 35, 20)

    $aControl[$eSETTING_WORLD_END_H] = Control_Create("Input numonly", $aSetting[$eSETTING_WORLD_END_H], $aPos[0] + $label_w + $tile_size_w, $aPos[1], $tile_size_w, 20, _
            "Height in pixels to stop reading tiles from Image" & @CRLF & "This offset is added to tile offset", "H", $aPos[0] + $label_w + $tile_size_w, $aPos[1] - 20, 35, 20)
    Control_Create("Label", "Tile", $x, $aPos[1], 30, 20, "These offsets are calculated in tiles.")

    $aControl[$eSETTING_WORLD_END_TILE_W] = Control_Create("Input numonly", $aSetting[$eSETTING_WORLD_END_TILE_W], $x + $label_w, $aPos[1], $tile_size_w, 20, _
            "Width in tiles to stop reading tiles from Image" & @CRLF & "This offset is added to pixel offset", "W", $x + $label_w, $aPos[1] - 20, 35, 20)
    $aPos2 = ControlGetPos($hGUI_parent, "", $aControl[$eSETTING_WORLD_START_TILE_Y])
    $aControl[$eSETTING_WORLD_END_TILE_H] = Control_Create("Input numonly", $aSetting[$eSETTING_WORLD_END_TILE_H], $x + $label_w + $tile_size_w, $aPos[1], $tile_size_w, 20, _
            "Height in tiles to stop reading tiles from Image" & @CRLF & "This offset is added to pixel offset", "H", $x + $label_w + $tile_size_w, $aPos[1] - 20, 35, 20)
    ; Color group
    $Grid_Color_group = GUICtrlCreateGroup("Grid Color", $aPos[0], $aPos[1] + 40, 210, 160)
    $aPos = ControlGetPos($hGUI_parent, "", $Grid_Color_group)
    ; Grid color show
    $aControl[$eidSCAN_GRID_checkbox] = Control_Create("Checkbox", $GUI_CHECKED, $aPos[0] + 5, $aPos[1] + 20, 65, 20, _
            "Toggle showing tile grid lines over image", "Show Grid", $aPos[0] + 5, $aPos[1] + 20, 40, 20)

    $aControl[$eidSCAN_GRID_COLOR_R_input] = Control_Create("Input UPPERCASE", Hex(0xFF, 2), $aPos[0] + 45, $aPos[1] + 60, 40, 20, _ ;          Red
            "Red component of tile grid color.  (0..255)", "Red", $aPos[0] + 5, $aPos[1] + 60, 40, 20)

    $aPos = ControlGetPos($hGUI_parent, "", $aControl[$eidSCAN_GRID_COLOR_R_input])
    $aControl[$eidSCAN_GRID_R_slider] = GUICtrlCreateSlider($aPos[0] + $aPos[2], $aPos[1], 120, 20)

    $aPos = ControlGetPos($hGUI_parent, "", $aControl[$eidSCAN_GRID_checkbox])
    $aPos[1] += 115

    $aControl[$eidSCAN_CONFIRM_button] = Control_Create("Button", "Confirm", $aGUI_rect[2] - 70, $aGUI_rect[3] - 60, 55, 20, "Confirm")

    $hGUI_Pic = GUICreate("Sub-Window Scrollable Image", $control_image_pic_w, $control_pic_h, $control_margin_w, $control_image_y, $WS_POPUP, $WS_EX_MDICHILD, $hGUI_parent)
    GUISetState()

    Return $aControl
EndFunc   ;==>Scan_Dialog_ControlCreate

; Joins pixel and tile offsets into single x, y, w, h, pixel offset
Func Calculate_Grid_Area($start_x, $start_y, $end_w, $end_h, $start_tile_x, $start_tile_y, $end_tile_w, $end_tile_h, $image_w, $image_h, $tile_w, $tile_h)
    ; Calculate tile offset
    $start_tile_x = $start_tile_x * $tile_w
    $start_tile_y = $start_tile_y * $tile_h
    $end_tile_w = $end_tile_w * $tile_w
    $end_tile_h = $end_tile_h * $tile_h

    $start_x += $start_tile_x
    $start_y += $start_tile_y
    Local $calc_end_w = $start_x + $end_w + $end_tile_w
    Local $calc_end_h = $start_y + $end_h + $end_tile_h
    ; If user entered zero'd values for End use max image w, h - the start offset
    If $end_w < 1 And $end_tile_w < 1 Then $calc_end_w = $image_w ; - $start_x
    If $end_h < 1 And $end_tile_h < 1 Then $calc_end_h = $image_h ; - $start_y
    Local $aGrid_Area[4] = [$start_x, _
            $start_y, _
            $calc_end_w, _
            $calc_end_h]

    Return $aGrid_Area
EndFunc   ;==>Calculate_Grid_Area

; Draws a grid over top of image to preview tile size
Func Scan_Dialog_Draw_Tile_Grid($start_x, $start_y, $end_w, $end_h, $start_tile_x, $start_tile_y, $end_tile_w, $end_tile_h, $image_w, $image_h, $tile_w, $tile_h, _
        $penColor, ByRef $aControl, ByRef $hGUI_Pic)
    If $tile_w < 1 Or $tile_h < 1 Then Return 0

    $aArea = Calculate_Grid_Area($start_x, $start_y, $end_w, $end_h, $start_tile_x, $start_tile_y, $end_tile_w, $end_tile_h, $image_w, $image_h, $tile_w, $tile_h)
    Local $handle = GUICtrlGetHandle($aControl[$eidSCAN_IMAGE_pic])
    Local $hGraphic = _GDIPlus_GraphicsCreateFromHWND($handle)

    _GDIPlus_GraphicsDrawImage($hGraphic, $aControl[$eidSCAN_IMAGE_h], 0, 0)
    If GUICtrlRead($aControl[$eidSCAN_GRID_checkbox]) = $GUI_CHECKED Then
        Local $hPen = _GDIPlus_PenCreate($penColor)
        For $x = $aArea[0] To $aArea[2] Step $tile_w
            _GDIPlus_GraphicsDrawLine($hGraphic, $x, $aArea[1], $x, $aArea[3], $hPen)
        Next ; x

        For $y = $aArea[1] To $aArea[3] Step $tile_h
            _GDIPlus_GraphicsDrawLine($hGraphic, $aArea[0], $y, $aArea[2], $y, $hPen)
        Next ; y
        _GDIPlus_PenDispose($hPen)
    EndIf
    _GDIPlus_GraphicsDispose($hGraphic)
EndFunc   ;==>Scan_Dialog_Draw_Tile_Grid

; Special version of load image, that resets the scroll position of sub-window
Func Scan_Dialog_Load_Image($hGUI_Pic, ByRef $aControl, $sPath)
    ; Set hGUI_Pic scrollbar pos to 0 to align tile grid overlay
    _GUIScrollBars_SetScrollInfoPos($hGUI_Pic, $SB_HORZ, 0)
    _GUIScrollBars_SetScrollInfoPos($hGUI_Pic, $SB_VERT, 0)
    ; Update the Image Pic control
    Image_Load2($aControl[$eidSCAN_IMAGE_pic], $sPath, $aControl)

    Local $aImage_Size = _GDIPlus_ImageGetDimension($aControl[$eidSCAN_IMAGE_h])
    If Not IsArray($aImage_Size) Then Local $aImage_Size[2] = [0, 0]
    GUICtrlSetState($aControl[$eidSCAN_IMAGE_pic], $GUI_FOCUS)
    Return $aImage_Size
EndFunc   ;==>Scan_Dialog_Load_Image

; Displays array with encoded data members
Func output($array)
    $split = StringSplit($array[0], ",")
    For $i = 1 To UBound($array) - 1
        out($split[$i], $array[$i - 1])
    Next
EndFunc   ;==>output

; Modified
; Author UEZ: https://www.autoitscript.com/forum/topic/135989-png-in-gui/?do=findComment&comment=950214
Func Image_Load2(ByRef $idPic, $sPath, ByRef $aControl)
    _GDIPlus_ImageDispose($aControl[$eidSCAN_IMAGE_h])

    $aControl[$eidSCAN_IMAGE_h] = _GDIPlus_ImageLoadFromFile($sPath)
    $BMP = _GDIPlus_BitmapCreateHBITMAPFromBitmap($aControl[$eidSCAN_IMAGE_h])

    $winAPI = GUICtrlSendMsg($idPic, $STM_SETIMAGE, $IMAGE_BITMAP, $BMP)
    $rc = _WinAPI_DeleteObject($winAPI)
    If @error Then out("_WinAPI_DeleteObject ERROR:", @error)
    _WinAPI_DeleteObject($BMP)
EndFunc   ;==>Image_Load2

; Opens a Windows File Browse dialog and resets working directory so SDL finds it's DLLs
Func _FileOpenDialog($title, $filter, $initDir = "", $initFilename = "", $hGUI_parent = Null)
    Local $asError_description = ["", _
            "1 = File selection failed.", _
            "2 = Bad file filter"]
    $wkdir = @WorkingDir
    $sPath = FileOpenDialog("Select Image to convert to world array and tile images", $initDir, $filter, Default, $initFilename, $hGUI_parent)
    If @error <> 0 Then MsgBox($MB_SYSTEMMODAL, "_FileOpenDialog", "FileOpenDialog: Error: " & " " & $asError_description[@error], 0, $hGUI_parent)
    FileChangeDir($wkdir)
    Return $sPath
EndFunc   ;==>_FileOpenDialog

Func FileGetName($path)
    Return StringMid($path, StringInStr($path, "\", 0, -1) + 1)
EndFunc   ;==>FileGetName

Func FileGetFolder($path)
    $pathreturn = StringMid($path, 1, StringInStr($path, "\", 0, -1))
    Return $pathreturn
EndFunc   ;==>FileGetFolder

Func FileGetExt($filename)
    $pathreturn = StringMid($filename, StringLen($filename) - 3)
    Return $pathreturn
EndFunc   ;==>FileGetExt

; Author: Monoceres _RemoveFileExt, Xandy renamed: FileRemoveExt
; https://www.autoitscript.com/forum/topic/81098-solvedremove-file-extensions/?do=findComment&comment=582469
Func FileRemoveExt($string)
    Return StringLeft($string, StringInStr($string, ".", Default, -1) - 1)
EndFunc   ;==>FileRemoveExt

; Why Control_Create?  data, label, and tooltip control in single line.  Can also specify differant standard formats, by adding a new or your version of the Case.
Func Control_Create($sType, $data_value, $data_x, $data_y, $data_width, $data_height, $data_tip = "", $label_text = Null, $label_x = 0, $label_y = -100, $label_w = 150, $label_h = 20, $label_tip = "")
    Local $idCtrl = Null
    Switch $sType
        Case 'Button'
            $idCtrl = GUICtrlCreateButton($data_value, $data_x, $data_y, $data_width, $data_height)
        Case 'checkbox'
            $idCtrl = GUICtrlCreateCheckbox($label_text, $data_x, $data_y, $data_width, $data_height)
            If $data_value = $GUI_CHECKED Then GUICtrlSetState($idCtrl, $data_value)
        Case 'checkbox2'
            $idCtrl = GUICtrlCreateCheckbox("", $data_x, $data_y, $data_width, $data_height)
            If $data_value = $GUI_CHECKED Then GUICtrlSetState($idCtrl, $data_value)
        Case 'Edit'
            $idCtrl = GUICtrlCreateEdit($data_value, $data_x, $data_y, $data_width, $data_height, $ws_vscroll)
        Case 'Edit Readonly'
            $idCtrl = GUICtrlCreateEdit($data_value, $data_x, $data_y, $data_width, $data_height, $ws_vscroll)
            GUICtrlSendMsg($idCtrl, $EM_SETREADONLY, 1, 0) ; Send Readonly Message to the control
            _ModifyStyle($idCtrl, $WS_TABSTOP, True)
        Case 'Edit Readonly Disable'
            $idCtrl = GUICtrlCreateEdit($data_value, $data_x, $data_y, $data_width, $data_height, $ws_vscroll)
            GUICtrlSendMsg($idCtrl, $EM_SETREADONLY, 1, 0) ; Send Readonly Message to the control
            GUICtrlSetState($idCtrl, $GUI_DISABLE)
        Case 'Label'
            $idCtrl = GUICtrlCreateLabel($data_value, $data_x, $data_y, $data_width, $data_height)
        Case 'Combo'
            $idCtrl = GUICtrlCreateCombo($data_value, $data_x, $data_y, $data_width, $data_height, $CBS_DROPDOWNLIST)
            _GUICtrlComboBox_SetCurSel($idCtrl, $data_value)
        Case 'Input'
            $idCtrl = GUICtrlCreateInput($data_value, $data_x, $data_y, $data_width, $data_height)
        Case 'Input Numonly'
            $idCtrl = GUICtrlCreateInput($data_value, $data_x, $data_y, $data_width, $data_height, $es_number)
        Case 'Input Readonly'
            $idCtrl = GUICtrlCreateInput($data_value, $data_x, $data_y, $data_width, $data_height)
            GUICtrlSendMsg($idCtrl, $EM_SETREADONLY, 1, 0)
        Case 'Input UPPERCASE'
            $idCtrl = GUICtrlCreateInput($data_value, $data_x, $data_y, $data_width, $data_height, $ES_UPPERCASE)
        Case 'Radio'
            $idCtrl = GUICtrlCreateRadio($data_value, $data_x, $data_y, $data_width, $data_height)
        Case 'Pic'
            $idCtrl = GUICtrlCreatePic($data_value, $data_x, $data_y, $data_width, $data_height)
            GUICtrlSetState($idCtrl, $GUI_DISABLE)
    EndSwitch ; sType

    ; Data control Tip
    GUICtrlSetTip($idCtrl, $data_tip)

    If $label_text <> Null And $sType <> "Checkbox" Then
        ; Label
        GUICtrlCreateLabel($label_text, $label_x, $label_y, $label_w, $label_h)
        ; Label control Tip
        GUICtrlSetTip(-1, $label_tip)
    EndIf

    Return $idCtrl
EndFunc   ;==>Control_Create

; Function to remove TABSTOP from GUI controls
; Author: Authenticity and ProgAndy: https://www.autoitscript.com/forum/topic/92382-tab-stops/?do=findComment&comment=664019
Func _ModifyStyle($hControl, $Style, $Remove = False)
    If Not IsHWnd($hControl) Then $hControl = GUICtrlGetHandle($hControl)
    Switch $Remove
        Case True
            Return _WinAPI_SetWindowLong($hControl, $GWL_STYLE, _
                    BitAND(_WinAPI_GetWindowLong($hControl, $GWL_STYLE), BitNOT($Style)))
        Case False
            Return _WinAPI_SetWindowLong($hControl, $GWL_STYLE, _
                    BitOR(_WinAPI_GetWindowLong($hControl, $GWL_STYLE), $Style))
    EndSwitch
EndFunc   ;==>_ModifyStyle

; Debug output tool
Func out($out1 = "", $out2 = "", $out3 = "", $out4 = "", $out5 = "", $out6 = "", $out7 = "", $out8 = "", $out9 = "", $out10 = "", $out11 = "", $out12 = "", $out13 = "", $out14 = "", $out15 = "")
    ;to console new line, value of $output
    ConsoleWrite($out1 & " " & $out2 & " " & $out3 & " " & $out4 & " " & $out5 & " " & $out6 & " " & $out7 & " " & $out8 & " " & $out9 & @CRLF)
EndFunc   ;==>out

; Registered to be called at exit
Func _Exit()
    _GDIPlus_Shutdown()
EndFunc   ;==>_Exit

EDIT:  I wanted to make sure all the systems were intact and that script would run.

Apologies for the huge code.

The default picture path is hopefully irrelevant and: #include  <Include\GUIScrollbars_Ex.au3> will likely need to be remarked or point to your location of the UDF.

Edited by Xandy
Link to comment
Share on other sites

  • Moderators

Xandy,

The UDF registers the WM_HSCROLL message - which is also used by the slider. So it looks as if the message is being eaten by the UDF handler and so AutoIt never sees your slider. If you prevent horizontal scrolling by using this line:

_GUIScrollbars_Generate($hGUI_Pic, 0, 8000)

the slider does work - which would confirm the diagnosis.

I wrote the UDF as a help to real beginners and did not do my usual trick of having separate message handler(s). I will look at how I might do something to remedy that. Thanks for the report.

M23

Edit: As I suspected it looked as if the way I had coded the handler meant that it was eating the message if it was not from the scrollbars rather than passing it on to be processed by AutoIt. Try using this Beta version and see if it works for you in your full script. I can certainly use both slider and scrollbar in the code you posted:

 

 

Edited by Melba23
Beta code removed

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png 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 columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to comment
Share on other sites

  • Moderators

Xandy,

Great! I will release a new version of the UDF soon. Thanks again for the report.

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png 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 columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to comment
Share on other sites

  • Moderators

[New Version] - 18 May 18

Changed: UDF now plays nicely with other controls which use the same Windows messages.

New UDFs, examples in first post.

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png 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 columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to comment
Share on other sites

  • Moderators

nhockm4v,

I am afraid not a request I intend to honour - I had enough trouble just getting the standard scrollbars to work. If you want fancy ones then you code for them!

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png 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 columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to comment
Share on other sites

  • Moderators

Qwert212,

Sorry, no - family matters have taken up a lot of my time recently. It is on my "to-do" list - honest!

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png 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 columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to comment
Share on other sites

4 hours ago, Melba23 said:

Qwert212,

Sorry, no - family matters have taken up a lot of my time recently. It is on my "to-do" list - honest!

M23

Don't worry. I hope everything goes fine with those family matters.

 

Greets from Barcelona

Link to comment
Share on other sites

  • Melba23 changed the title to Scrollbars Made Easy - New version 27 Jan 22

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...