webber Posted August 22, 2005 Share Posted August 22, 2005 Trying to build an autocomplete script but finding that I can't click inside the listview box to select an item. What am I missing ? expandcollapse popup#include <GuiConstants.au3> #include <file.au3> #include <Array.au3> Dim $aRecords,$x,$sFilePath,$oldvalue,$testvalue $sFilePath = "C:\temp\autocomplete.txt" ;window GuiCreate("autocomplete",200,250) ;label ;------------ $Input = GuiCtrlCreateInput("", 10, 20, 175, 20, 0x1000) ; list ;----------- $listView = GuiCtrlCreateListView("key|text",10, 45, 175,190) ; populate listview GetList("") Func GetList($testvalue) $listView = GuiCtrlCreateListView("key|text",10, 45, 175,190) $testvalue = StringStripWS(StringLower($testvalue),8) $len = StringLen ($testvalue) $i = 1 If Not _FileReadToArray($sFilePath,$aRecords) Then ;MsgBox(4096,"Error", " Error reading log to Array error:" & @error) ; Exit Dim $aRecords $aRecords = _ArrayCreate ( "a_item2|col21","b_item2|col22","c_item2|col23" ) $i=0 EndIf For $x = $i to Ubound($aRecords)-1 $Temp = StringStripWS(StringLower($aRecords[$x]),8) $Temp = StringReplace($Temp,"function", "") If $len > 0 Then If StringLeft ($Temp,$len ) = $testvalue Then GuiCtrlCreateListViewItem($Temp, $listView) EndIf Elseif $len = 0 Then GuiCtrlCreateListViewItem($Temp, $listView) EndIf Next EndFunc; GetList ; GUI LOOP GuiSetState() $oldvalue = GUICtrlRead ($Input) Do $msg = GUIGetMsg () $testvalue = GUICtrlRead ($Input) if $testvalue <> $oldvalue then GetList($testvalue) $oldvalue = $testvalue ;MsgBox(0,"listview", "clicked="& GUICtrlGetState($listview),2) Until $msg = $GUI_EVENT_CLOSE Link to comment Share on other sites More sharing options...
GaryFrost Posted August 22, 2005 Share Posted August 22, 2005 expandcollapse popup#include <GuiConstants.au3> #include <file.au3> #include <Array.au3> Dim $aRecords,$x,$sFilePath,$oldvalue,$testvalue $sFilePath = "C:\temp\autocomplete.txt" ;window GuiCreate("autocomplete",200,250) ;label ;------------ $Input = GuiCtrlCreateInput("", 10, 20, 175, 20, 0x1000) ; list ;----------- ;~ $listView = GuiCtrlCreateListView("key|text",10, 45, 175,190) ; populate listview GetList("") ; GUI LOOP GuiSetState() $oldvalue = GUICtrlRead ($Input) Do $msg = GUIGetMsg () $testvalue = GUICtrlRead ($Input) if $testvalue <> $oldvalue then GetList($testvalue) $oldvalue = $testvalue ;MsgBox(0,"listview", "clicked="& GUICtrlGetState($listview),2) Until $msg = $GUI_EVENT_CLOSE Func GetList($testvalue) $listView = GuiCtrlCreateListView("key|text",10, 45, 175,190) $testvalue = StringStripWS(StringLower($testvalue),8) $len = StringLen ($testvalue) $i = 1 If Not _FileReadToArray($sFilePath,$aRecords) Then ;MsgBox(4096,"Error", " Error reading log to Array error:" & @error) ; Exit Dim $aRecords $aRecords = _ArrayCreate ( "a_item2|col21","b_item2|col22","c_item2|col23" ) $i=0 EndIf For $x = $i to Ubound($aRecords)-1 $Temp = StringStripWS(StringLower($aRecords[$x]),8) $Temp = StringReplace($Temp,"function", "") If $len > 0 Then If StringLeft ($Temp,$len ) = $testvalue Then GuiCtrlCreateListViewItem($Temp, $listView) EndIf Elseif $len = 0 Then GuiCtrlCreateListViewItem($Temp, $listView) EndIf Next EndFunc; GetList SciTE for AutoItDirections for Submitting Standard UDFs Don't argue with an idiot; people watching may not be able to tell the difference. Link to comment Share on other sites More sharing options...
webber Posted August 22, 2005 Author Share Posted August 22, 2005 Thanks that helps some. Unfortunately when I enter a value like "b" it selects the b_item and then when I click on the listview the value changes back to a_item I don't understand how this listview is supposed to work. is this a bug in Listview ? Link to comment Share on other sites More sharing options...
GaryFrost Posted August 22, 2005 Share Posted August 22, 2005 No bug, you have to tell it you want to be able to edit i.e. $LVS_EDITLABELS SciTE for AutoItDirections for Submitting Standard UDFs Don't argue with an idiot; people watching may not be able to tell the difference. Link to comment Share on other sites More sharing options...
webber Posted August 22, 2005 Author Share Posted August 22, 2005 No bug, you have to tell it you want to be able to edit i.e. $LVS_EDITLABELS<{POST_SNAPBACK}>I changed listview line to be :$listView = GuiCtrlCreateListView("key|text",10, 45, 175,190,$LVS_EDITLABELS)but it still behaves as before, and there seems to be no way to capture listview selection . Each try tells me $listview has not been declared, but if I declare it then the click in listview doesn't work.Isn't there someway to have a dynamic listview where the value can be clicked for selection and retrieved for use ? Link to comment Share on other sites More sharing options...
Gigglestick Posted August 22, 2005 Share Posted August 22, 2005 (edited) I think it has something to do with the fact that you're recreating the listview everytime you call GetList. Create it in the beginning and use GetList to update it using GuiCtrlSetData. Also, use something like this in your Do loop: Do $msg = GUIGetMsg () If $msg = $Input Then $testvalue = GUICtrlRead ($Input) if $testvalue <> $oldvalue then GetList($testvalue) $oldvalue = $testvalue EndIf ;MsgBox(0,"listview", "clicked="& GUICtrlGetState($listview),2) Until $msg = $GUI_EVENT_CLOSE Edited August 22, 2005 by c0deWorm My UDFs: ExitCodes Link to comment Share on other sites More sharing options...
GaryFrost Posted August 22, 2005 Share Posted August 22, 2005 my fault, commented out the wrong create. SciTE for AutoItDirections for Submitting Standard UDFs Don't argue with an idiot; people watching may not be able to tell the difference. Link to comment Share on other sites More sharing options...
webber Posted August 22, 2005 Author Share Posted August 22, 2005 I think it has something to do with the fact that you're recreating the listview everytime you call GetList. Create it in the beginning and use GetList to update it using GuiCtrlSetData.Also, use something like this in your Do loop:Do $msg = GUIGetMsg () If $msg = $Input Then $testvalue = GUICtrlRead ($Input) if $testvalue <> $oldvalue then GetList($testvalue) $oldvalue = $testvalue EndIf ;MsgBox(0,"listview", "clicked="& GUICtrlGetState($listview),2) Until $msg = $GUI_EVENT_CLOSE<{POST_SNAPBACK}>did you try your suggestion? I think things are getting worse ? Link to comment Share on other sites More sharing options...
GaryFrost Posted August 23, 2005 Share Posted August 23, 2005 looks like $LVS_EDITLABELS doesn't work, it goes into edit mode but doesn't save what is typed. SciTE for AutoItDirections for Submitting Standard UDFs Don't argue with an idiot; people watching may not be able to tell the difference. Link to comment Share on other sites More sharing options...
webber Posted August 23, 2005 Author Share Posted August 23, 2005 looks like $LVS_EDITLABELS doesn't work, it goes into edit mode but doesn't save what is typed.<{POST_SNAPBACK}>DOA ............ Link to comment Share on other sites More sharing options...
Gigglestick Posted August 23, 2005 Share Posted August 23, 2005 did you try your suggestion? I think things are getting worse ?No I didn't, but I'm pretty sure it would be more efficient and use less CPU to test for something happening in the input box before reading from it instead of just constantly reading from it.All I did was add the "if" and have it check the new value against the old value. There's no need to do anything if the text hasn't changed. Clicking in the input box would trigger an $input event, but not change the value of it. My UDFs: ExitCodes Link to comment Share on other sites More sharing options...
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