Jump to content

Recommended Posts

Joep86

Hi, 

I just started recently with AutoIT and I am trying to make two dropdownlists where the selectable values of the second dropdownlist will be depending on what is selected on the first one.

For example: 

Dropdown 1                 Dropdown 2                   

xxx                =>             01-15    ("01" , "02" ,"03" , ...)                    
yyy                =>             a - f       ("a" , "b" ,"c" ,"d" ,"e" ,"f" ) 
zzz                =>             "new", "old", "spare"

 

I started with this code that I've found in this Forum:

#include <GUIConstantsEx.au3>

; Here is the array
Global $aArray[6] = ["SORT", "PCM", "UNIF", "KKE", "GMS", "CDY"]

; And here we get the elements into a list
$sList = ""
For $i = 0 To UBound($aArray) - 1
    $sList &= "|" & $aArray[$i]
Next

; Create a GUI
#include <GUIConstantsEx.au3>

$hGUI = GUICreate("DropDown", 500, 500)

; Create the combo
$hCombo = GUICtrlCreateCombo("", 10, 10, 200, 20)
; And fill it
GUICtrlSetData($hCombo, $sList)

GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
 WEnd
 

 

Any idea how to start on this one...

thanks upfront

 

 

 

Share this post


Link to post
Share on other sites
AutoBert

here a small demo with 2 comboboxes:

#Include <GuiComboBox.au3>
#include <GUIConstantsEx.au3>
#include <array.au3>
#include <File.au3>

Const $sCSV = @AppDataDir & "\2cbo.CSV"
Const $sElect = "bitte auswählen"
Dim $a_sCSV, $aSplit, $scboChr = ""
_FileReadToArray($sCSV,$a_sCSV)
Dim $aCSV[$a_sCSV[0]][2]
for $i = 1 to UBound($a_sCSV) - 1
    ConsoleWrite($i & $a_sCSV[$i] & @CRLF)
    $aSplit = StringSplit($a_sCSV[$i],";")
    if not StringInStr($scboChr,$aSplit[1]) Then $scboChr &= $aSplit[1] & "|"
    $aCSV[$i-1][0] = $aSplit[1]
    $aCSV[$i-1][1] = $aSplit[2]
Next
ConsoleWrite($scboChr & @CRLF)

$hGui = GUICreate("2 Comboboxen aus 1er CSV ", 250, 120, 302, 218)
$hcboChr = GUICtrlCreateCombo($sElect, 8, 8, 200, 25)
GUICtrlSetData(-1,$scboChr)
$hcboChrNr  = GUICtrlCreateCombo("",8,35,200,25)
$hbtnExit = GUICtrlCreateButton("Be&enden", 8, 65)

GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE, $hbtnExit
            Exit
        Case $hcboChr
            $sVal = GUICtrlRead($hcboChr)
            if $sVal <> $sElect Then
                $aSplit = _ArrayFindAll($aCSV,$sVal,0,0,True,True,0)
                GUICtrlSetData($hcboChrNr,"")
                $scboChr = ""
                for $i = 0 to UBound($aSplit) - 1
                    $scboChr &= $aCSV[$aSplit[$i]][1] & "|"
                Next
                ConsoleWrite($scboChr & @CRLF)
                GUICtrlSetData($hcboChrNr,$scboChr)
                _GUICtrlComboBox_SetCurSel($hcboChrNr, 0)
            EndIf
    EndSwitch
WEnd

And here is the csv:

Auto;Felgen
Werkzeug;BitSätze
Werkzeug;Schraubenschlüssel
Auto;Reifen
Zubehör;Enteiserspray

which must be in @AppDataDir.

Share this post


Link to post
Share on other sites
Joep86

Hi , 

Thanks a lot ! Do you have any idea how I could the values not in csv but xml format ?

and in stead of typing full xxx;01 / xxx;02 / xxx;03 /... that I can say range for xxx is from 01 to 05 for example

Share this post


Link to post
Share on other sites
kylomas

Joep86,

Please post an example of your XML file.

6 hours ago, Joep86 said:

and in stead of typing full xxx;01 / xxx;02 / xxx;03 /...

Typing it where, for what?

kylomas


Forum Rules         Procedure for posting code

"I like pigs.  Dogs look up to us.  Cats look down on us.  Pigs treat us as equals."

- Sir Winston Churchill

Share this post


Link to post
Share on other sites
Joep86

Hi , 

I would like to read out parameters for a dropdown list from a xml file ? 

in example above it's done through a csv file , how is it possible to do this then with xml ?

let say I have a parameter like this in the xml file :

<ScanP_ProcessNameKill>


-<Input>

<string>SC{0:n8}.{1:n}.</string>

</Input>

<OutPut>{0}.{1:000}</OutPut>

</ScanP_ProcessNameKill>>>

Share this post


Link to post
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

  • Similar Content

    • zzghost
      By zzghost
      Hello,
      I have been reading every tutorial and help document I can find trying to figure out how to capture from a website the content of a dropdown in order to populate it into a GUI with checkboxes to run some code based off of the selections...
      I would like a script to read the options from this form-group and populate a gui. I have all the code written except this part, as of now I have to manually pull this from the site and dump into my code but it changes from time to time so I would like my code to be more flexible...
       
      Hope this makes sense?
    • ahha
      By ahha
      I'm using the excellent _Excel UDF to read a whole spreadsheet into an array I want to operate on.  I can read a specified range without a problem.  What I'd like to do is allow the user in Excel to select a range (contiguous is fine) and be able to read that range so that I know what range to operate on without having the user input the range via a keyboard.  I'm stuck and any hints greatly appreciated.  The code below uses the Helpfile .xls to illustrate where I crash.
      ; #AutoIt3Wrapper_run_debug_mode=Y ; use this to debug in console window <--- LOOK #include <Excel.au3> #include <MsgBoxConstants.au3> #include <Debug.au3> ;for _DebugArrayDisplay $sExcelFullFileName = "C:\Program Files (x86)\AutoIt3\Examples\Helpfile\Extras\_Excel1.xls" ;use Autoit test for example $oExcel = _Excel_Open() ;Create application object and open an Excel workbook $oWorkbook = _Excel_BookOpen($oExcel, $sExcelFullFileName) $aExcelArray = _Excel_RangeRead($oWorkbook, Default) _DebugArrayDisplay($aExcelArray, $aExcelArray) ;let's look at it $aI5K6 = _Excel_RangeRead($oWorkbook, Default,"I5:K6") ;read a rangeI5:K6 and return value _DebugArrayDisplay($aI5K6, $aI5K6) ;let's look at range it ;rather than defining the range explicity I'd like to read the selection in Excel and use it ;need a function like _Excel_SelectionRead ;try hacking Excel.au3 _Excel_RangeRead to see if can create _Excel_SelectionRead looks like .Selection .Value .Text and .Address possible MsgBox($MB_SYSTEMMODAL, "Info", "Select cells in Excel then click OK") ;ACTUALLY get range of the selection and this will suffice for us to use on the $aExcelArray $vRange = $oWorkbook.ActiveSheet.Selection.Address($vRange) ;tried all sorts of permutations and clearly I need help _DebugArrayDisplay($vRange, $vRange) ;let's look at range it ;$vResult = $oExcel.Transpose($vRange.Value) ;_DebugArrayDisplay($vResult, $vResult) ;let's look at range it _Excel_Close($oExcel, False, True) Exit  
    • kelso
      By kelso
      Hello Guru's,
       
      I'm trying to write an autoit script to select from the dropdown list as you see in the attached picture. 
      I read the help page for _IEFormElementOptionSelect, but I cannot grasp how to correlate that with the source code that I'm seeing. any suggestions?

    • therks
      By therks
      So I'm needing a (better) way to get the selection in an edit control, while knowing which end of the selection is active vs anchor (ie, if you're holding shift while moving with the arrow keys, which end of the selection is moving and which is not). Since _GUICtrlEdit_GetSel() only returns the start and end positions, in the order of smallest to largest, if you were to pass that back to the _GUICtrlEdit_SetSel(), the user's selection could end up "backwards".
      My solution has been this function:
      Func _GUICtrlEdit_GetSelByAnchor($hWnd) ; Get selection range with anchor in first index If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd) Local $aActive, $aSelection = _GUICtrlEdit_GetSel($hWnd) ; Get base selection If $aSelection[0] <> $aSelection[1] Then ; Only proceed if actual selection range _GUICtrlEdit_SetSel($hWnd, -1, 0) ; Deselect, leaving only the active point $aActive = _GUICtrlEdit_GetSel($hWnd) ; Record the active point If $aActive[0] = $aSelection[0] Then ; If the active point is equal to the original first index ; Swap the original selection points (putting the anchor in [0] and active in [1]) $aSelection[0] = $aSelection[1] $aSelection[1] = $aActive[0] EndIf _GUICtrlEdit_SetSel($hWnd, $aSelection[0], $aSelection[1]) ; Reset selection to the original points EndIf Return $aSelection EndFunc The problem with this, as you may have already guessed from the two SetSel calls, is that calling it in a tight loop causes a lot of flickering. Is there a better, more reliable way to do what I'm looking for?
    • Katie_Deely
      By Katie_Deely
      Hey
       
      I have a GUI with an edit-field and a button.
      First I write some text into the edit-field and select a part of it. After that I press the button, and the selection is edited.
      How would I do that, though? When the text is selected and I press the button, it's unselected before the button actually raises an event. 
×