Jump to content

How do I make text flow across multiple input boxes - for serial key input


NDog
 Share

Recommended Posts

I am trying to make an autoit script which allows the input of serial keys. They are in the format xxxxx-xxxxx-xxxxx-xxxxx-xxxxx.

I am trying to emulate the same thing as when installing windows product serial key input box. If text is typed in it flows from left to right, and if text is deleted it flows from right to left.

I know how to limit text to 5 characters within an input box, however I do not know how to create the text flow effect as described above.

Posted Image

Edited by NDog
Link to comment
Share on other sites

Try this, I made this for my setup builder.

#Include <GuiEdit.au3>
#Include <GuiButton.au3>
#include <ButtonConstants.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
Global $ser1,$ser2,$ser3,$ser4,$ser5,$PasteBtn,$DoOnce1,$DoOnce2,$DoOnce3,$DoOnce4,$DoOnce5

$gui = GUICreate("GUI", 494, 350)
$BKTopPic = GUICtrlCreateLabel("",0, 0, 494, 59,0x06)
$BackBtn = GUICtrlCreateButton("< Back", 244, 317,76, 24)
$NextBtn = GUICtrlCreateButton("Next >", 327, 317,76, 24,$BS_DEFPUSHBUTTON)
$CancelBtn = GUICtrlCreateButton("Cancel", 410, 317,76, 24)

$PasteBtn = GUICtrlCreateButton("Paste", 373, 175,60, 20)
$SFS25LabAddInfo = GUICtrlCreateLabel("Some Information", 60, 70, 374, 45)
$ser1 = GUICtrlCreateEdit("",62,145,70,25,$ES_AUTOHSCROLL)
GUICtrlSetFont($ser1,11, 1)
GUICtrlSetLimit($ser1, 5)

$ser2 = GUICtrlCreateEdit("",137,145,70,25,$ES_AUTOHSCROLL)
GUICtrlSetFont($ser2,11, 1)
GUICtrlSetLimit($ser2, 5)

$ser3 = GUICtrlCreateEdit("",212,145,70,25,$ES_AUTOHSCROLL)
GUICtrlSetFont($ser3,11, 1)
GUICtrlSetLimit($ser3, 5)

$ser4 = GUICtrlCreateEdit("",287,145,70,25,$ES_AUTOHSCROLL)
GUICtrlSetFont($ser4,11, 1)
GUICtrlSetLimit($ser4, 5)

$ser5 = GUICtrlCreateEdit("",362,145,70,25,$ES_AUTOHSCROLL)
GUICtrlSetFont($ser5,11, 1)
GUICtrlSetLimit($ser5, 5)

$DoOnce1 = 1
$DoOnce2 = 1
$DoOnce3 = 1
$DoOnce4 = 1
$DoOnce5 = 1
$HasDone13 = "done"

GUISetState(@SW_SHOW,$gui)

While 1
  $msg = GUIGetMsg()
Switch $Msg


  Case $PasteBtn
   $SerialClip = ClipGet()
   GUICtrlSetData ( $ser1, StringMid ( $SerialClip, 1, 5 ))
   GUICtrlSetData ( $ser2, StringMid ( $SerialClip, 6, 5 ))
   GUICtrlSetData ( $ser3, StringMid ( $SerialClip, 11, 5 ))
   GUICtrlSetData ( $ser4, StringMid ( $SerialClip, 16, 5 ))
   GUICtrlSetData ( $ser5, StringMid ( $SerialClip, 21, 5 ))


  case $NextBtn ;------------------------------
   GUICtrlSetState ( $SFS25LabAddInfo ,$GUI_HIDE )
   GUICtrlSetState ( $ser1 ,$GUI_hide )
   GUICtrlSetState ( $ser2 ,$GUI_hide )
   GUICtrlSetState ( $ser3 ,$GUI_hide )
   GUICtrlSetState ( $ser4 ,$GUI_hide )
   GUICtrlSetState ( $ser5 ,$GUI_hide )
   GUICtrlSetState ( $PasteBtn ,$GUI_hide )


  case $CancelBtn,$GUI_EVENT_CLOSE ;------------------------------
   $answer = MsgBox(292, "Exit Setup", "Setup is not complete. If you exit now, ProductName ProductVersion will not be installed." &@CRLF&@CRLF& "You may run Setup again at another time to complete the installation." &@CRLF&@CRLF& "Exit Setup?" , -1,$gui)
            Switch $answer
                Case 6; Yes
                    Exit
                Case 7; No
            EndSwitch


  case $BackBtn ;------------------------------
   GUICtrlSetState ( $SFS25LabAddInfo ,$GUI_HIDE )
   GUICtrlSetState ( $ser1 ,$GUI_hide )
   GUICtrlSetState ( $ser2 ,$GUI_hide )
   GUICtrlSetState ( $ser3 ,$GUI_hide )
   GUICtrlSetState ( $ser4 ,$GUI_hide )
   GUICtrlSetState ( $ser5 ,$GUI_hide )
   GUICtrlSetState ( $PasteBtn ,$GUI_hide )


EndSwitch

  If StringLen(GUICtrlRead($ser1,1)) = 5 Then
   If $DoOnce1 = 1 Then
    Send("{TAB}")
    $DoOnce1 = 0
   EndIf
  Else
   $DoOnce1 = 1
  EndIf
  If StringLen(GUICtrlRead($ser2,1)) = 5 Then
   If $DoOnce2 = 1 Then
    Send("{TAB}")
    $DoOnce2 = 0
   EndIf
  Else
   $DoOnce2 = 1
  EndIf
  If StringLen(GUICtrlRead($ser3,1)) = 5 Then
   If $DoOnce3 = 1 Then
    Send("{TAB}")
    $DoOnce3 = 0
   EndIf
  Else
   $DoOnce3 = 1
  EndIf
  If StringLen(GUICtrlRead($ser4,1)) = 5 Then
   If $DoOnce4 = 1 Then
    Send("{TAB}")
    $DoOnce4 = 0
   EndIf
  Else
   $DoOnce4 = 1
  EndIf
  If StringLen(GUICtrlRead($ser5,1)) = 5 Then
   If $DoOnce5 = 1 Then
    GUICtrlSetState ( $NextBtn,$GUI_FOCUS)
    $DoOnce5 = 0
   EndIf
  Else
   $DoOnce5 = 1
  EndIf

WEnd
GUIDelete()
Edited by Guest
Link to comment
Share on other sites

  • Moderators

NDog,

You can do it very easily like this: ;)

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>

Global $iChar_Limit = 2

$hGUI = GUICreate("Input Autofocus", 500, 500)
$hInput_1 = GUICtrlCreateInput("", 20, 20, 30, 20)
GUICtrlSetLimit(-1, $iChar_Limit)
$hInput_2 = GUICtrlCreateInput("", 80, 20, 30, 20)
GUICtrlSetLimit(-1, $iChar_Limit)
$hInput_3 = GUICtrlCreateInput("", 140, 20, 30, 20)
GUICtrlSetLimit(-1, $iChar_Limit)
$hButton = GUICtrlCreateButton("OK", 75, 60, 40, 25)
GUICtrlSetState(-1, $GUI_DISABLE)

GUIRegisterMsg($WM_COMMAND, "_WM_COMMAND")

GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $hButton
            $sString = GUICtrlRead($hInput_1) & "-" & GUICtrlRead($hInput_2) & "-" & GUICtrlRead($hInput_3)
            MsgBox(0, "Result", $sString)
    EndSwitch
WEnd

Func _WM_COMMAND($hWnd, $Msg, $wParam, $lParam)

    $iCode = BitShift($wParam, 16)

    $iID = BitAND($wParam, 0x0000FFFF)

    Switch $iCode
        Case $EN_UPDATE ; 0x400 ;
            $iLen = StringLen(GUICtrlRead($iID))
            Switch $iLen
                Case $iChar_Limit
                    GUICtrlSetState($iID + 1, $GUI_ENABLE)
                    GUICtrlSetState($iID + 1, $GUI_FOCUS)
                Case 0
                    GUICtrlSetState($hButton, $GUI_DISABLE)
                    GUICtrlSetState($iID - 1, $GUI_FOCUS)
                    ControlSend($hGUI, "", $iID - 1, "{END}")
            EndSwitch
    EndSwitch
EndFunc   ;==>On_WM_COMMAND

Please ask if you have any questions. :)

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

@Aipion - Your code is good and has given me some good ideas of how to structure a well done serial key input GUI. The Tab keypress is an interesting approach

@Melba23 - I have never used a GUIRegisterMsg function before but I think this is a good idea. I notice you also you use a hotkey approach as well, which is able to make the text flow backwards on deletion which is desirable. I am confused as to how does the Func _WM_COMMAND() know to apply to the Input boxes, which don't appear to have a reference to that function. Also If I wanted to used multiple serial key inputs (eg for different products) on the one GUI, would they also be able to call the func Func _WM_COMMAND()?

Link to comment
Share on other sites

  • Moderators

NDog,

I have never used a GUIRegisterMsg function before

Then I recommend the GUIRegisterMsg tutorial in the Wiki. :)

I notice you also you use a hotkey approach

I do? Where do you see that? :)

how does the Func _WM_COMMAND() know to apply to the Input boxes

Within the message handler we extract the ControlID of the control sending the EN_CHANGE message from $wParam - this is $iID. So the handle knows which input is currently focused - using $iID +/- 1 just sets the focus to the next/previous one. ;)

I wanted to used multiple serial key inputs (eg for different products) on the one GUI, would they also be able to call the func Func _WM_COMMAND()?

Yes, but we would need to change the code a bit to deal with that. Give me a few moments and I will see what I can come up with. ;)

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

NDog,

Easier than I thought - the trick is to create the inputs in IMMEDIATE succession with no other controls created between them:

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>

Global $iChar_Limit = 2

$hGUI = GUICreate("Input Autofocus", 500, 500)

$hInput_1 = GUICtrlCreateInput("", 20, 20, 30, 20)
$hInput_2 = GUICtrlCreateInput("", 80, 20, 30, 20)
$hInput_3 = GUICtrlCreateInput("", 140, 20, 30, 20)

$hInput_4 = GUICtrlCreateInput("", 20, 70, 30, 20)
$hInput_5 = GUICtrlCreateInput("", 80, 70, 30, 20)
$hInput_6 = GUICtrlCreateInput("", 140, 70, 30, 20)

For $i = $hInput_1 To $hInput_6
    GUICtrlSetLimit($i, 2)
Next

$hButton = GUICtrlCreateButton("OK", 10, 120, 80, 30)

GUICtrlSetState(-1, $GUI_DISABLE)

GUIRegisterMsg($WM_COMMAND, "_WM_COMMAND")

GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $hButton
            $sString = GUICtrlRead($hInput_1) & "-" & GUICtrlRead($hInput_2) & "-" & GUICtrlRead($hInput_3) & @CRLF & _
                       GUICtrlRead($hInput_4) & "-" & GUICtrlRead($hInput_5) & "-" & GUICtrlRead($hInput_6)
            MsgBox(0, "Result", $sString)
    EndSwitch
WEnd

Func _WM_COMMAND($hWnd, $Msg, $wParam, $lParam)

    $iCode = BitShift($wParam, 16)

    $iID = BitAND($wParam, 0x0000FFFF)

    Switch $iCode
        Case $EN_UPDATE ; 0x400 ;
            $iLen = StringLen(GUICtrlRead($iID))
            Switch $iLen
                Case $iChar_Limit
                    GUICtrlSetState($iID + 1, $GUI_ENABLE)
                    GUICtrlSetState($iID + 1, $GUI_FOCUS)
                Case 0
                    GUICtrlSetState($hButton, $GUI_DISABLE)
                    GUICtrlSetState($iID - 1, $GUI_FOCUS)
                    ControlSend($hGUI, "", $iID - 1, "{END}")
            EndSwitch
    EndSwitch
EndFunc   ;==>On_WM_COMMAND

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

@UEZ - This is quite nice how there is one input text box and it figures out how to seperate the characters with a '-' automatically. The code is not perfect, eg if someone deleted text blocks in the middle, the syntax will be confused again, however this would be simple as adding some more code to detect that. I might use this kind of script in the future.

@Melba23 - Thanks for your help, I will use this code in my project. The hotkey approach I mentioned was refering to selecting previous box and pressing {END} key to move the input cursor to the end.

I learnt a bit about GUIRegisterMsg and how it is used to catch messages. Im sure it will come in handy in many GUI scripts.

Link to comment
Share on other sites

I am currently adding this func into another script I have but there is a problem as it is affecting all input boxes. This is what I was getting at when I mentioned "how does the Func _WM_COMMAND() know to apply to the Input boxes?"

I would like to narrow the function down to only affect input boxes which start with $flowInput[$i] here. Do you know how I should modify the Func? I was trying to use consolewrite to show me what variables are being passed into the function and then use a stringinstr to ensure only valid input boxes have the function applied to them. Can you show me where I am going wrong?

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
Opt("GUIOnEventMode", 1)
$fmSNIP = GUICreate("Test Box", 500, 500, -1)
$cmSiteName = GUICtrlCreateCombo("", 8, 64, 257, 25)
$lbSiteName = GUICtrlCreateLabel("Site Name", 8, 48, 53, 15)
$lbSERVERNAME = GUICtrlCreateLabel("SERVER NAME", 8, 128, 82, 15)
$lbWORKGROUP = GUICtrlCreateLabel("WORKGROUP", 120, 128, 77, 15)
$lbDesiredName = GUICtrlCreateLabel("Desired Name", 9, 89, 69, 15)
$inDesiredName = GUICtrlCreateInput("", 8, 104, 257, 21)
$inSERVERNAME = GUICtrlCreateInput("", 8, 144, 105, 21)
$inWORKGROUP = GUICtrlCreateInput("", 120, 144, 145, 21)
Global $iChar_Limit = 5
Dim $flowInput[6]
$flowInput[1] = GUICtrlCreateInput("", 20, 20, 40, 20)
GUICtrlSetLimit(-1, $iChar_Limit)
$flowInput[2] = GUICtrlCreateInput("", 80, 20, 40, 20)
GUICtrlSetLimit(-1, $iChar_Limit)
$flowInput[3] = GUICtrlCreateInput("", 140, 20, 40, 20)
GUICtrlSetLimit(-1, $iChar_Limit)
$flowInput[4] = GUICtrlCreateInput("", 200, 20, 40, 20)
GUICtrlSetLimit(-1, $iChar_Limit)
$flowInput[5] = GUICtrlCreateInput("", 260, 20, 40, 20)
GUICtrlSetLimit(-1, $iChar_Limit)
$flowButton = GUICtrlCreateButton("OK", 75, 60, 40, 25)
GUICtrlSetState(-1, $GUI_DISABLE)
GUIRegisterMsg($WM_COMMAND, "_WM_COMMAND")
GUISetOnEvent($GUI_EVENT_CLOSE, "FormClose") ; When the big X is clicked
GUISetState(@SW_SHOW)

While 1 ;On event mode GUI
    Sleep(100)
WEnd
Func _WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
    $iCode = BitShift($wParam, 16)
    $iID = BitAND($wParam, 0x0000FFFF)
    Switch $iCode
  ; This part is to catch if wrong variables are being passed into the function.
  ; If so return as we only want to process inputs that start with $flowInput
  ConsoleWrite($iID)
  If StringInStr($iID) <> $flowInput Then Return
  
        Case $EN_UPDATE ; 0x400 ;
            $iLen = StringLen(GUICtrlRead($iID))
            Switch $iLen
                Case $iChar_Limit
                    GUICtrlSetState($iID + 1, $GUI_ENABLE)
                    GUICtrlSetState($iID + 1, $GUI_FOCUS)
                Case 0
                    GUICtrlSetState($flowButton, $GUI_DISABLE)
                    GUICtrlSetState($iID - 1, $GUI_FOCUS)
                    ControlSend($fmSNIP, "", $iID - 1, "{END}")
            EndSwitch
    EndSwitch
EndFunc   ;==>On_WM_COMMAND
Func FormClose()
    Exit
EndFunc
Link to comment
Share on other sites

I just updated the func to do an array scan of inputbox types before applying the changes. It works, I am not sure if it is a good idea to do that, in terms of memory and CPU calculation, but it works. Still keen for any more efficient methods, otherwise it is working ok for now.

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
Opt("GUIOnEventMode", 1)
$fmSNIP = GUICreate("Test Box", 500, 500, -1)
$cmSiteName = GUICtrlCreateCombo("", 8, 64, 257, 25)
$lbSiteName = GUICtrlCreateLabel("Site Name", 8, 48, 53, 15)
$lbSERVERNAME = GUICtrlCreateLabel("SERVER NAME", 8, 128, 82, 15)
$lbWORKGROUP = GUICtrlCreateLabel("WORKGROUP", 120, 128, 77, 15)
$lbDesiredName = GUICtrlCreateLabel("Desired Name", 9, 89, 69, 15)
$inDesiredName = GUICtrlCreateInput("", 8, 104, 257, 21)
$inSERVERNAME = GUICtrlCreateInput("", 8, 144, 105, 21)
$inWORKGROUP = GUICtrlCreateInput("", 120, 144, 145, 21)
Global $iChar_Limit = 5
Dim $flowInput[6]
$flowInput[1] = GUICtrlCreateInput("", 20, 20, 40, 20)
GUICtrlSetLimit(-1, $iChar_Limit)
$flowInput[2] = GUICtrlCreateInput("", 80, 20, 40, 20)
GUICtrlSetLimit(-1, $iChar_Limit)
$flowInput[3] = GUICtrlCreateInput("", 140, 20, 40, 20)
GUICtrlSetLimit(-1, $iChar_Limit)
$flowInput[4] = GUICtrlCreateInput("", 200, 20, 40, 20)
GUICtrlSetLimit(-1, $iChar_Limit)
$flowInput[5] = GUICtrlCreateInput("", 260, 20, 40, 20)
GUICtrlSetLimit(-1, $iChar_Limit)
$flowButton = GUICtrlCreateButton("OK", 75, 60, 40, 25)
GUICtrlSetState(-1, $GUI_DISABLE)
GUIRegisterMsg($WM_COMMAND, "_WM_COMMAND")
GUISetOnEvent($GUI_EVENT_CLOSE, "FormClose") ; When the big X is clicked
GUISetState(@SW_SHOW)

While 1 ;On event mode GUI
    Sleep(100)
WEnd
Func _WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
    $iCode = BitShift($wParam, 16)   ;HiWord
    $iID = BitAND($wParam, 0x0000FFFF) ;LoWord

For $i = 1 To UBound($flowInput) -1
  If $iID = $flowInput[$i] Then
   Switch $iCode
    Case $EN_UPDATE ; 0x400 ; 768 ; control was updated
     $iLen = StringLen(GUICtrlRead($iID))
     Switch $iLen
     Case $iChar_Limit
      GUICtrlSetState($iID + 1, $GUI_ENABLE)
      GUICtrlSetState($iID + 1, $GUI_FOCUS)
     Case 0
      GUICtrlSetState($flowButton, $GUI_DISABLE)
      GUICtrlSetState($iID - 1, $GUI_FOCUS)
      ControlSend($fmSNIP, "", $iID - 1, "{END}")
    EndSwitch
   EndSwitch
  EndIf
Next
 
EndFunc   ;==>On_WM_COMMAND
Func FormClose()
    Exit
EndFunc
Link to comment
Share on other sites

  • Moderators

NDog,

The only suggestion I have is that as you are using a For...Next loop you might want to add an ExitLoop once you have actioned the code to prevent the loop checking the later inputs to no purpose:

For $i = 1 To UBound($flowInput) - 1
    If $iID = $flowInput[$i] Then
        Switch $iCode
            Case $EN_UPDATE ; 0x400 ; 768 ; control was updated
                $iLen = StringLen(GUICtrlRead($iID))
                Switch $iLen
                    Case $iChar_Limit
                        GUICtrlSetState($iID + 1, $GUI_ENABLE)
                        GUICtrlSetState($iID + 1, $GUI_FOCUS)
                    Case 0
                        GUICtrlSetState($flowButton, $GUI_DISABLE)
                        GUICtrlSetState($iID - 1, $GUI_FOCUS)
                        ControlSend($fmSNIP, "", $iID - 1, "{END}")
                EndSwitch
        EndSwitch
        ExitLoop
    EndIf
Next

M23

Edited by Melba23
Wrong button too soon

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

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...