Jump to content

Add Data To Guictrlsetdata Dynamically


laphlaw
 Share

Recommended Posts

I'm trying to make a GUI that has a list of scripts to run. These scripts are all compiled as exes, and in a folder. But let's say I regularly add scripts to the folder. How would I have my GUI read the folder for the contained executables, then add them to the list?

So instead of hard coding the scripts like this:

GUICtrlSetData($List,"Script 1|Script2|Script 3")

it dynamically reads a directory of the executables and adds it to the list. Would that be possible?

Thanks

Link to comment
Share on other sites

Taken from Lesson #6 of "Welcome to Autoit 1-2-3"

; includes
#include <GuiConstants.au3>
#include <file.au3>

;****************** FILE LOCATION **********

$File_loc = @ScriptDir & "\"
$File_type = "*.txt"

;********************************************
; create the GUI.
$win = GUICreate("File List/View Demo", 614, 370)
; set the font for the GUI
GUISetFont(9, 400, -1, "MS Sans Serif")
; create buttons.
$btnList = GUICtrlCreateButton("&List Files", 10, 330, 75, 25)
$btnView = GUICtrlCreateButton("&View File", 85, 330, 75, 25)
; create the left list.
$TutorItList = GUICtrlCreateList("", 10, 10, 150, 330)
; create the right edit.
$TutorItEdit = GUICtrlCreateEdit("Please select a tutorial from the list to your left.", 175, 10, 420, 345, $ES_AUTOVSCROLL + $ES_READONLY + $ES_MULTILINE + $WS_VSCROLL)
; set the edit colors.
GUICtrlSetBkColor(-1, 0xFFFFFF)
GUICtrlSetColor(-1, 0x000000)
; set focus to the edit.
GUICtrlSetState($TutorItList, $GUI_FOCUS)
; show the GUI.
GUISetState()

; start the loop.
While 1
; listen for a message
    $msg = GUIGetMsg()
; using select/case for the message
    Select
        Case $msg = $GUI_EVENT_CLOSE 
            Exit
        Case $msg = $btnList
            Set_tutor()
        Case $msg = $btnView
            View_tutor()
; end the selections        
    EndSelect
    
WEnd

; Function to populate the left list.
Func Set_tutor()
    $TutList = _FileListToArray ($File_loc, $File_type, 1); list files to an array.
    If (Not IsArray($TutList)) Or (@error = 1) Then
        MsgBox(262208, "Tutor Error", "No Files\Folders Found.   ", 5)
        Return
    EndIf
    GUICtrlSetData($TutorItList, ""); set list to empty.
    For $x = 1 To $TutList[0]; for loop to place the files in the list.
        GUICtrlSetData($TutorItList, (StringTrimRight($TutList[$x], 4)) & "|", 1); string trim the last 4 characters ( .txt )
    Next
EndFunc   

; Function to populate the right edit.
Func View_tutor()
    $s_text = GUICtrlRead($TutorItList); read the selected file to a variable.
    If $s_text = "" Then Return
    $n_text = StringTrimLeft($File_type, 1)
    $s_text = $File_loc & $s_text & $n_text; set the location of the file.
    Dim $Tut_text
    If Not _FileReadToArray($s_text, $Tut_text) Then; read the file to an array.
        MsgBox(4096, "Tutor Error", " Error reading log to Array     error:" & @error)
        Return
    EndIf
    GUICtrlSetData($TutorItEdit, ""); set the edit to empty.
    For $x = 1 To $Tut_text[0]; for loop to place the read file into the edit.
        GUICtrlSetData($TutorItEdit, $Tut_text[$x] & @CRLF, 1)
    Next
EndFunc

8)

NEWHeader1.png

Link to comment
Share on other sites

Thanks... the only problem I ran into is the function _FileListToArray isn't included anywhere. I tried creating this function by myself, but ran into some problems along the way.

My question is how do you declare a pointer in AutoIt? In C++, you use "new". Help me out!

Link to comment
Share on other sites

  • Moderators

I did this without really looking at your example Val... If it does the same thing great

#include <guiconstants.au3>
#include <file.au3>

$MainGUI = GUICreate('Example', 200, 100)
$Combo = GUICtrlCreateCombo('', 10, 10, 180, 100)
$Button = GUICtrlCreateButton('Populate', 60, 60, 80, 30, $BS_DEFPUSHBUTTON)

GUISetState()

While 1
    $msg = GUIGetMsg()
    If $msg = - 3 Then Exit
    If $msg = $Button Then 
        $ComboInfo = _PopulateCombo(@ScriptDir, '*.exe')
        GUICtrlSetData($Combo, $ComboInfo)
    EndIf
WEnd

Func _PopulateCombo($hfile, $sext = '*')
    Local $aList = ''
    $avArray = _FileListToArray($hfile, $sext)
    For $i = 1 To UBound($avArray) - 1
        $aList = $aList & $avArray[$i] & '|'
    Next
    Return StringTrimRight($aList, 1)
EndFunc

Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer.

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