JohnBoy Posted June 12, 2004 Posted June 12, 2004 I have created a script that reads in a text file containing simple lines of text. Of course each line of text has an index number associated with it. The script creates a GUI with a listbox containing the lines of data from the text file. When I click on a line in the listbox, the script returns the index number of that line and closes the GUI. I can then test that number and branch the script as required. This is the behavior I want. The only problem I have is that the listbox INSISTS on doing an ASCII sort on the contents of the box. Since I am using the listbox to display a selection menu that can be easily created on the fly, it makes it difficult to create a formatted menu. How do I keep the box from sorting the contents? The code I use is included below: The wait until a 254 is received just keeps the script looping until an allowed exit code is received. Any help would be gratefully appreciated. ****** The include file **********************8 #include-once Func MenuSelect($Title) #include "GUIConstants.au3" Local $file Local $line Local $menudata Local $lstItems Local $n Local $t Local $cmdClose Local $cmdExit Local $ctr1 local $ctr2 Local $text1 Local $select local $MenuLen local $testchar local $holdpos local $IndexNum $menudata="" If $Title = "" Then $Title = "Select Menu" $file = FileOpen(@Scriptdir & "\Menu.dat", 0) ;Check if file opened for reading OK If $file = -1 Then MsgBox(0, "Error", "Unable to open menu file.") Return 254 EndIf $ctr1 = 0 While 1 $line = FileReadLine($file) If @error = -1 Then ExitLoop if $ctr1 > 0 then $menudata = $menudata & "|" $menudata = $menudata & $line $ctr1=$ctr1 + 1 Wend FileClose($file) GUICreate($Title,390,230); will create a dialog box that when displayed is centered $lstItems= GUISetControl("list", "$text1", 5,5,381,160,) GuiSetControlData($lstItems,$menudata) $cmdClose = GUISetControl("button", "Select", 100,170,175,20) GUISetControlNotify($cmdClose) $cmdExit = GUISetControl("button", "Exit", 100,200,175,20) GUISetControlNotify($cmdExit) GUISetControlNotify($lstItems) $n=0 While GUIMsg() > 0 $n=$n+1 $t = GUIRead() $menulen = StringLen($menudata) $indexnum = 0 for $ctr2 = 1 to $menulen $testchar = StringMid($menudata,$ctr2,1) Select Case $testchar = "|" $indexnum = $indexnum + 1 Case Else EndSelect next if $indexnum = 0 then return(255) if $indexnum > 0 then $indexnum = $indexnum + 1 local $IndexList[$indexnum] Select Case $t = $cmdClose $ctr2 = 0 $IndexList[0] = "" for $ctr1 = 1 to $menulen $testchar = StringMid($menudata,$ctr1,1) select Case $testchar = "|" $ctr2=$ctr2 + 1 $indexlist[$ctr2] = "" Case Else $indexlist[$ctr2] = $indexlist[$ctr2] & $testchar EndSelect next $select = GUIRead( $lstItems) local $result for $ctr2 = 0 to ubound($indexlist)-1 if $indexlist[$ctr2] = $select then $result = $ctr2 + 1 next Return($result) Case $t = $cmdExit Return(254) Case $lstItems $ctr2 = 0 $IndexList[0] = "" for $ctr1 = 1 to $menulen $testchar = StringMid($menudata,$ctr1,1) select Case $testchar = "|" $ctr2=$ctr2 + 1 $indexlist[$ctr2] = "" Case Else $indexlist[$ctr2] = $indexlist[$ctr2] & $testchar EndSelect next $select = GUIRead( $lstItems) local $result for $ctr2 = 0 to ubound($indexlist)-1 if $indexlist[$ctr2] = $select then $result = $ctr2 + 1 next Return($result) Case Else EndSelect Wend EndFunc ****************** Now the actual script code ************************** AutoItSetOption("MustDeclareVars", 1) #include "John's.au3" Dim $SelectVal Dim $CDRoot Dim $MenuFile Dim $RunMe Dim $passwd Dim $PassMess $passmess = "This will install the F-Secure registry key fix for the F-Nimda Virus. " $passmess = $passmess & "Unintentional registry modification is something to avoid " $passmess = $passmess & "if at all possible. " $passmess = $passmess & "Are you sure you want to install the registry fix? " $passmess = $passmess & "Type 'RUN' to continue, or click 'Cancel' to quit." Do $selectval = menuselect("F-Nimda Stuff") Select Case $SelectVal = 1 GuiHide() RunWait(@ComSpec & " /c " & 'shellfix.txt', @ScriptDir, @SW_HIDE) GuiShow() WinActivate("Select Menu") Case $SelectVal = 2 GuiHide() $passwd = InputBox("Final chance to quit!", $passmess, "", "*") Select Case $passwd = "" GuiShow() WinActivate("Select Menu") Case StringUpper($passwd) = "RUN" RunWait(@ComSpec & " /c " & 'shellfix.reg', @ScriptDir, @SW_HIDE) GuiShow() WinActivate("Select Menu") Case Else EndSelect Case $SelectVal = 3 Exit EndSelect Until $SelectVal = 254
CyberSlug Posted June 12, 2004 Posted June 12, 2004 Feel free to "vote" here: http://www.autoitscript.com/forum/index.php?showtopic=3021$lstItems= GUISetControl("list", "$text1", 5,5,381,160,0xA30001); Style was determined as follows:; Technically these should be BitOR'ed together...; $LBS_NOTIFY + $WS_VSCROLL + $WS_BORDER + $WS_TABSTOP + $WS_GROUP; 0x1 + 0x200000 + 0x800000 + 0x10000 + 0x20000 Use Mozilla | Take a look at My Disorganized AutoIt stuff | Very very old: AutoBuilder 11 Jan 2005 prototype I need to update my sig!
JohnBoy Posted June 12, 2004 Author Posted June 12, 2004 Okay, that seemed to do it. Many, many thanks!!! Now I have to figure out WHY it works that way, so I don't have to bother anybody with any similar issues. Again, THANX!JohnBoy
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