rudolph Posted July 22, 2007 Share Posted July 22, 2007 Hello Everybody: I built a Gui with 2 Tabs (Tab0 , Tab1) and inside with a ListView of items (Desktop items, Myfavorites items). When I go to Tab0 and double click an item from ListView1, It works, I can get the correct Item Text in a message Box. But here is the problem, when I change to Tab1 and double click an item from ListView2, It gives me a wrong item text, Someone can help on this, please. I use the double click routine from Gary Frost. you can run the code below : expandcollapse popup#include <GUIConstants.au3> #include <GuiTab.au3> #include<array.au3> #include<_FileListToArrayNew2g.au3> Global Const $WM_NOTIFY = 0x004E Global Const $DebugIt = 1 ;ListView Events Global Const $NM_FIRST = 0 Global Const $NM_LAST = (-99) Global Const $NM_OUTOFMEMORY = ($NM_FIRST - 1) Global Const $NM_CLICK = ($NM_FIRST - 2) Global Const $NM_DBLCLK = ($NM_FIRST - 3) Global $j1 Global $av_ListViews[3];Array starts idx=0 Global $avTabs[10];Array starts idx=0 $Style1 = BitOR($WS_THICKFRAME, $WS_SIZEBOX) ;Creating the GUI $hGui = GUICreate("GUI Name",810, 623, (@DesktopWidth - 800) / 2, (@DesktopHeight - 600) / 2,$WS_MAXIMIZEBOX + $WS_MINIMIZEBOX) ;; Create tab box $TabCtrl = GUICtrlCreateTab(10, 10, 580, 340) $av_ArrayTabs = _ArrayCreate("Programs", "Favorites"); Array of Tab names, starts in elem zero. ;Tab0 - Create Tab item 0 $avTabs[0] = GUICtrlCreateTabItem($av_ArrayTabs[0]) ;Load Desktop PROGRAMS LoadDesktopPgmInListView() _GUICtrlTabSetCurSel($TabCtrl, 0) ;;Tab1 - Create Tab item 1 $avTabs[1] = GUICtrlCreateTabItem($av_ArrayTabs[1]) LoadMyFavoritesURLInListView() _GUICtrlTabSetCurSel($TabCtrl, 1) GUICtrlCreateTabItem(""); Closes out the tabitems ; GUI Loop GUISetState() ;Register WM_NOTIFY events GUIRegisterMsg($WM_NOTIFY, "WM_Notify_Events") While 1 $msg = GUIGetMsg() Switch $msg ;----------------------------------------------------------------------------------------- ;This case statement exits and updates code if needed Case $GUI_EVENT_CLOSE Exit ;----------------------------------------------------------------------------------------- ;put all the misc. stuff here Case Else ;;; EndSwitch WEnd ;;Insert items in ListView with Desktop Shortcuts Func LoadDesktopPgmInListView() $DesktopDir = @DesktopDir Local $sPath = $DesktopDir, $Flag=1, $Recurse=0, $BasDir=1, $filter = "*.lnk" $av_ArrayPaths = _FileListToArray3 ($sPath, $filter, $Flag, $Recurse, $BasDir);Get full paths of folders from Desktop, 0 elem=num occurences $Count = $av_ArrayPaths[0] $av_ListViews[0] = GUICtrlCreateListView("Applications ", 15, 30, 550, 350) ; First ListView _GUICtrlListViewSetColumnWidth ($av_ListViews[0], 0, 500) ; Size of the First Column 0, in the List view GUICtrlSendMsg($av_ListViews[0], $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES) ;Gridlines GUICtrlSendMsg($av_ListViews[0], $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_FULLROWSELECT, $LVS_EX_FULLROWSELECT) For $k = 1 To Number($Count) GUICtrlCreateListViewItem("item " & $k & " " & $av_ArrayPaths[$k], $av_ListViews[0]) Next EndFunc ;;Insert items in ListView with MyFavorites URL Func LoadMyFavoritesURLInListView() $FavoritesURL = @FavoritesDir Local $sPath = $FavoritesURL, $Flag=1, $Recurse=0, $BasDir=1, $filter = "*.url" $av_ArrayPaths = _FileListToArray3 ($sPath, $filter, $Flag, $Recurse, $BasDir);Get full paths of files from MyFavorites, 0 elem=num occurences $Count = $av_ArrayPaths[0] $av_ListViews[1] = GUICtrlCreateListView("MyFavorites URL ", 15, 30, 550, 350) ; Second ListView _GUICtrlListViewSetColumnWidth ($av_ListViews[1], 0, 500) ; Size of the First Column 0, in the List view GUICtrlSendMsg($av_ListViews[1], $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES) ;Gridlines GUICtrlSendMsg($av_ListViews[1], $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_FULLROWSELECT, $LVS_EX_FULLROWSELECT) For $k = 1 To Number($Count) GUICtrlCreateListViewItem("item " & $k & " " & $av_ArrayPaths[$k], $av_ListViews[1]) Next EndFunc ; WM_NOTIFY event handler Func WM_Notify_Events($hWndGUI, $MsgID, $wParam, $lParam) #forceref $hWndGUI, $MsgID, $wParam Local $tagNMLISTVIEW , $event, $hwndFrom, $code $tagNMLISTVIEW = DllStructCreate("int;int;int;int;int;uint;uint;uint;int;int", $lParam);NMHDR (hwndFrom, idFrom, code), (iItem, iSubItem, uNewState, uOldState, uChanged, ptAction) If @error Then Return $event = DllStructGetData($tagNMLISTVIEW, 3) For $j1 = 0 To 2 If $wParam = $av_ListViews[$j1] Then if $event = $NM_DBLCLK Then MsgBox(0,"Double Clicked ctrlidLV = ", $av_ListViews[$j1]) ListView_DoubleClick () MsgBox(0, "exit loop:", "Tab" & $j1) ExitLoop EndIf EndIf Next $tagNMHDR = 0 $event = 0 $lParam = 0 EndFunc ;==>WM_Notify_Events Func _DebugPrint($s_text) $s_text = StringReplace($s_text, @LF, @LF & "-->") ConsoleWrite("!===========================================================" & @LF & _ "+===========================================================" & @LF & _ "-->" & $s_text & @LF & _ "+===========================================================" & @LF) EndFunc ;==>_DebugPrint Func ListView_Click() ;-----------------DISABLE ----------------------------------------------------------------------------- ;If $DebugIt Then _DebugPrint ("$NM_CLICK");; Writes to console ;---------------------------------------------------------------------------------------------- EndFunc ;==>ListView_Click Func ListView_DoubleClick() local $indiceselect ;---------------------------------------------------------------------------------------------- If $DebugIt Then _DebugPrint ("$NM_DBLCLK") ;---------------------------------------------------------------------------------------------- $indiceselect = _GUICtrlListViewGetSelectedIndices($av_ListViews[$j1]) MsgBox(0,"Double Clicked", _GUICtrlListViewGetItemText($av_ListViews[$j1], $indiceselect) ) EndFunc ;==>ListView_DoubleClick Also here is the Function, _FileListToArrayNew2g.au3 if someone can not find it: expandcollapse popup#include-once #include<array.au3> ;~ #include "_GUILV1.au3" ;~ #AutoIt3Wrapper_useansi=y ;=============================================================================== ; ; Description: lists all files and folders in a specified path ; Syntax: _FileListToArray($s_Path, $s_Filter = "*", $i_Flag = 0) ; Parameter(s): $s_Path = Path to generate filelist for ; $s_Filter = The filter to use. Search the Autoit3 manual for the word "WildCards" For details ; $i_Flag = determines whether to return file or folders or both ; $i_Flag=0(Default) Return both files and folders ; $i_Flag=1 Return files Only ; $i_Flag=2 Return Folders Only ; $i_Recurse = Indicate whether recursion to subfolders required ; $i_Recurse=0(Default) No recursion to subfolders ; $i_Recurse=1 recursion to subfolders ; $i_BaseDir = Indicate whether base directory name included in returned elements ; $i_BaseDir=0 base directory name not included ; $i_BaseDir=1 (Default) base directory name included ; $s_Exclude= The Exclude filter to use. "WildCards" For details ; ; Requirement(s): None ; Return Value(s): On Success - Returns an array containing the list of files and folders in the specified path ; On Failure - Returns the an empty string "" if no files are found and sets @Error on errors ; @Error=1 Path not found or invalid ; @Error=2 Invalid $s_Filter ; @Error=3 Invalid $i_Flag ; @Error=4 No File(s) Found ; ; Author(s): randallc <randallc@ozemail.com.au>; modified from SolidSnake and big_daddy and SmoKE_N and GEOsoft! ; Note(s): The array returned is one-dimensional and is made up as follows: ; $array[0] = Number of Files\Folders returned ; $array[1] = 1st File\Folder ; $array[2] = 2nd File\Folder ; $array[3] = 3rd File\Folder ; $array[n] = nth File\Folder ; ;=============================================================================== Func _FileListToArray3($sPath, $sFilter = "*", $iFlag = 0, $iRecurse = 0, $iBaseDir = 1, $sExclude = ""); ** still need to use RegExp to eliminate dupes? *** If $sFilter = -1 Then $sFilter = "*" If StringRight($sPath, 1) == "\" Then $sPath = StringTrimRight($sPath, 1) Local $hSearch, $sFile, $sFileString, $asList[1], $sep = "|", $sFileString1, $sFilter1 = $sFilter If Not FileExists($sPath) Then Return SetError(1, 1, "") If (StringInStr($sFilter, "\")) Or (StringInStr($sFilter, "/")) Or (StringInStr($sFilter, ":")) Or (StringInStr($sFilter, ">")) Or (StringInStr($sFilter, "<")) Or (StringStripWS($sFilter, 8) = "") Then Return SetError(2, 2, "") If Not ($iFlag = 0 Or $iFlag = 1 Or $iFlag = 2) Then Return SetError(3, 3, "") $sFilter = StringReplace("*" & $sFilter & "*", "**", "*") If Not StringInStr($sFilter, ';') And Not StringInStr($sFilter, '|') Then $sFilter &= "|" If StringInStr($sFilter, ';') Then $sep = ";";$sFilter &= ';' Local $aSplit = StringSplit(StringStripWS($sFilter, 8), $sep), $sRead, $sHoldSplit, $arFolders[2] = [ $sPath, ""] $cw = ConsoleWrite("UBound($aSplit) =" & UBound($aSplit) & @LF) If $sExclude <> "" Then $sExclude = "(?i)" & StringReplace(StringReplace(StringReplace($sExclude, ".", "\."), "*", ".*"), "?", ".");change the filters to RegExp filters If $iRecurse Then;$cw = ConsoleWrite("UBound($aSplit) =" & UBound($aSplit) & @LF) If $iFlag = 2 Then _FileListToArrayFolders($sPath, $sFileString1, "*", $iRecurse, $sExclude) If $iFlag <> 2 Then _FileListToArrayFolders($sPath, $sFileString1, "*", $iRecurse, "") Local $arFolders = StringSplit(StringTrimRight($sFileString1, 1), "*") $arFolders[0] = $sPath EndIf For $iCF = 0 To UBound($arFolders) - 1; $cw = ConsoleWrite("$iCF=" & $iCF & " $arFolders[$iCF] =" & @LF & $arFolders[$iCF] & @LF) If StringStripWS($arFolders[$iCF], 8) = '' Then ContinueLoop For $iCC = 1 To UBound($aSplit) - 1 If StringStripWS($aSplit[$iCC], 8) = '' Then ContinueLoop If StringLeft($aSplit[$iCC], 1) == "." Then $aSplit[$iCC] = "*" & $aSplit[$iCC];, "**", "*") Select; options for not recursing; quicker than filtering after for single directory Case Not $iRecurse And Not $iFlag And Not $iBaseDir; fastest, with files and folders, not recursed _FileListToArrayBrief2($arFolders[$iCF], $sFileString, $aSplit[$iCC], $sExclude) Case Not $iFlag; not $iRecurse and And $iBaseDir;fast, with files and folders, not recursed _FileListToArrayBrief1($arFolders[$iCF], $sFileString, $aSplit[$iCC], $sExclude) Case $iFlag = 1;fast, with files only, not recursed _FileListToArrayFiles($arFolders[$iCF], $sFileString, $aSplit[$iCC], $sExclude) Case Not $iRecurse And $iFlag = 2; folders only , not recursed _FileListToArrayFolders($arFolders[$iCF], $sFileString, $aSplit[$iCC], $iRecurse, $sExclude) EndSelect;$cw = ConsoleWrite("$iCC=" & $iCC & " $sFileString =" & @LF & $sFileString & @LF) If $iCF = 0 Then $sHoldSplit &= '|' & $aSplit[$iCC]; $cw = ConsoleWrite("$iCC=" & $iCC & " $sFileString =" & @LF & $sFileString & @LF) Next If $iCF = 0 Then $sFilter = StringReplace(StringTrimLeft($sHoldSplit, 1), "**", "*");,$cw = ConsoleWrite("$iCC=" & $iCC & " $sFilter =" & @LF & $sFilter & @LF) Next If $iRecurse And $iFlag = 2 And $sFilter <> "*" And $sFilter <> "*.*" Then; filter folders ------------------- $sFileString1 = StringTrimRight(StringReplace($sFileString1, "*", @CRLF), 1) $sFilter1 = StringReplace(StringReplace(StringReplace($sFilter1, ".", "\."), "*", ".*"), "?", ".");change the filters to RegExp filters Local $pattern = '(?m)(^(?i)' & $sFilter1 & '$)', $cw = ConsoleWrite("$sFilter =" & @LF & $sFilter1 & @LF), $cw = ConsoleWrite("$pattern =" & @LF & $pattern & @LF) Local $asList = StringRegExp($sFileString1, $pattern, 3) If (Not $iBaseDir) Then $sFileString1 = _ArrayToString($asList, "*") $sFileString1 = StringReplace($sFileString1, $sPath & "\", "", 0, 2) $asList = StringSplit($sFileString1, "*") EndIf ElseIf $iRecurse And $iFlag = 2 Then $sFileString = $sFileString1 EndIf;If UBound($asList) > 1 Then ConsoleWrite("$asList[1] =" & @LF & $asList[1] & @LF) If IsArray($asList) And UBound($asList) > 1 And $asList[0] <> "" Then Return $asList If (Not $iBaseDir) Or (Not $iRecurse And Not $iFlag And Not $iBaseDir) Then $sFileString = StringReplace($sFileString, $sPath & "\", "", 0, 2) $arReturn = StringSplit(StringTrimRight($sFileString, 1), "*");~ local $a=ConsoleWrite("$sFileString :"&@lf&StringReplace($sFileString,"|",@crlf)&@lf),$timerstamp1=TimerInit() If IsArray($arReturn) And UBound($arReturn) > 1 And $arReturn[1] <> "" And Not (UBound($aSplit) = 3 And $aSplit[2] == "") Then _deleteduplicate1($arReturn);and $arFolders[1]<>"" Return $arReturn;~ Return StringSplit(StringTrimRight($sFileString, 1), "*") EndFunc ;==>_FileListToArray3 ;=============================================================================== ; ; Description: _deleteduplicate1; deletes duplicates in an Array 1D [could be done faster with vbs func] ; Syntax: _deleteduplicate1(ByRef $ar_Array) ; Parameter(s): $ar_Array = 1d Array ; Requirement(s): None ; Return Value(s): On Success - Returns asorted array with no duplicates ; On Failure - ; @Error=1 P ; @Error=2 ; ; Author(s): randallc ;=============================================================================== Func _deleteduplicate1(ByRef $ar_Array) Local $ar_New[1], $timerstamp1 = TimerInit(), $s_New _ArrayDelete($ar_Array, 0) ConsoleWrite("UBound($ar_Array) =" & UBound($ar_Array) & @LF) _ArraySort($ar_Array) Local $count = UBound($ar_Array) - 1, $a = ConsoleWrite("_ArraySort :" & Round(TimerDiff($timerstamp1)) & " mseconds " & @LF), $timerstamp1 = TimerInit() For $x = $count - 1 To 0 Step - 1 $Itemtxt1 = $ar_Array[ $x] Do If $x > 0 Then $Itemtxt2 = $ar_Array[ $x - 1] If StringUpper($Itemtxt1) == StringUpper($Itemtxt2) Then $count -= 1 $x -= 1 EndIf EndIf Until StringUpper($Itemtxt1) <> StringUpper($Itemtxt2) Or $x = 0 $s_New &= $Itemtxt1 & "|" Next $ar_Array = StringSplit($s_New, "|") Local $a = ConsoleWrite("_ArrayAdd :" & Round(TimerDiff($timerstamp1)) & " mseconds " & @LF), $timerstamp1 = TimerInit() If $ar_Array [UBound($ar_Array) - 1] == "" Then _ArrayDelete($ar_Array, UBound($ar_Array) - 1) _ArrayReverse($ar_Array, 1) If $ar_Array [UBound($ar_Array) - 1] == "" Then _ArrayDelete($ar_Array, UBound($ar_Array) - 1) ConsoleWrite("_ArrayReverse :" & Round(TimerDiff($timerstamp1)) & " mseconds " & @LF) Return 1 EndFunc ;==>_deleteduplicate1 ;=============================================================================== ; ; Description: Helper self-calling func for _FileListToArray wrapper; lists all folders in a specified path ; Syntax: _FileListToArrayFolders($s_PathF, ByRef $s_FileStringF, $s_FilterF, $i_RecurseF) ; Parameter(s): $s_PathF = Path to generate filelist for ; $s_FileStringF = The string for lists all folders only in a specified path ; $s_FilterF = The filter to use. Search the Autoit3 manual for the word "WildCards" For details ; $i_RecurseF = Indicate whether recursion to subfolders required ; $i_RecurseF=0(Default) No recursion to subfolders ; $i_RecurseF=1 recursion to subfolders ; $sExcludeF= The Exclude filter to use. "WildCards" For details ; Requirement(s): None ; Return Value(s): On Success - Returns an array containing the list of files and folders in the specified path ; On Failure - Returns the an empty string "" if no files are found and sets @Error on errors ; @Error=1 Path not found or invalid ; @Error=2 Invalid $s_Filter ; @Error=3 Invalid $i_Flag ; @Error=4 No File(s) Found ; ; Author(s): randallc; modified from SolidSnake, SmoKe_N, GEOsoft and big_daddy ;=============================================================================== Func _FileListToArrayFolders($sPathF, ByRef $sFileStringF, $sFilterF, $iRecurseF, $sExcludeF = "") Local $hSearch = FileFindFirstFile($sPathF & "\" & $sFilterF), $sPathF2 If $hSearch = -1 Then Return SetError(4, 4, "") If $sExcludeF == "" Then While 1 $sFileF = FileFindNextFile($hSearch) If @error Then SetError(0) ExitLoop EndIf $sPathF2 = $sPathF & "\" & $sFileF If StringInStr(FileGetAttrib($sPathF2), "D") Then;directories only wanted; and the attrib shows is directory $sFileStringF &= $sPathF2 & "*";this writes the filename to the delimited string with * as delimiter If $iRecurseF = 1 Then _FileListToArrayFolders($sPathF2, $sFileStringF, $sFilterF, $iRecurseF) EndIf WEnd Else While 1 $sFileF = FileFindNextFile($hSearch) If @error Then SetError(0) ExitLoop EndIf $sPathF2 = $sPathF & "\" & $sFileF; if folders only and this pattern matches exclude pattern, no further list or subdir If StringRegExp($sPathF2, $sExcludeF) Then ContinueLoop If StringInStr(FileGetAttrib($sPathF2), "D") Then;directories only wanted; and the attrib shows is directory $sFileStringF &= $sPathF2 & "*";this writes the filename to the delimited string with * as delimiter with * as delimiter If $iRecurseF = 1 Then _FileListToArrayFolders($sPathF2, $sFileStringF, $sFilterF, $iRecurseF, $sExcludeF) EndIf WEnd EndIf FileClose($hSearch) EndFunc ;==>_FileListToArrayFolders ;=============================================================================== ; ; Description: Helper func for _FileListToArray wrapper; lists all files and folders in a specified path ; Syntax: _FileListToArrayFiles($s_PathF, ByRef $s_FileStringF, $s_FilterF);quick as not recursive ; Parameter(s): $s_PathF = Path to generate filelist for ; $s_FileStringF = The string for lists all files and folders in a specified path ; $s_FilterF = The filter to use. Search the Autoit3 manual for the word "WildCards" For details ; $sExcludeF= The Exclude filter to use. "WildCards" For details ; Requirement(s): None ; Return Value(s): On Success - Returns an array containing the list of files and folders in the specified path ; On Failure - Returns the an empty string "" if no files are found and sets @Error on errors ; @Error=1 Path not found or invalid ; @Error=2 Invalid $s_Filter ; @Error=4 No File(s) Found ; ; Author(s): randallc; modified from SolidSnake, SmoKe_N, GEOsoft and big_daddy ;=============================================================================== Func _FileListToArrayFiles($sPathF, ByRef $sFileStringF, $sFilterF, $sExcludeF = "") Local $hSearch = FileFindFirstFile($sPathF & "\" & $sFilterF), $sPathF2 If $hSearch = -1 Then Return SetError(4, 4, "") If $sExcludeF == "" Then While 1 $sFileF = FileFindNextFile($hSearch) If @error Then SetError(0) ExitLoop EndIf $sPathF2 = $sPathF & "\" & $sFileF;directories not wanted; and the attrib shows not directory If Not StringInStr(FileGetAttrib($sPathF2), "D") Then $sFileStringF &= $sPathF2 & "*";this writes the filename to the delimited string with * as delimiter WEnd Else While 1 $sFileF = FileFindNextFile($hSearch) If @error Then SetError(0) ExitLoop EndIf $sPathF2 = $sPathF & "\" & $sFileF;directories not wanted; and the attrib shows not directory; and filename [only] does not match exclude If Not StringInStr(FileGetAttrib($sPathF2), "D") _ And Not StringRegExp($sFileF, $sExcludeF) Then $sFileStringF &= $sPathF2 & "*";this writes the filename to the delimited string with * as delimiter WEnd EndIf FileClose($hSearch) EndFunc ;==>_FileListToArrayFiles ;=============================================================================== ; ; Description: Helper self-calling func for _FileListToArray wrapper; lists all files and folders in a specified path ; Syntax: _FileListToArrayRecFiles($s_PathF, ByRef $s_FileStringF, $s_FilterF); recursive ; Parameter(s): $s_PathF = Path to generate filelist for ; $s_FileStringF = The string for lists all files and folders in a specified path ; $s_FilterF = The filter to use. Search the Autoit3 manual for the word "WildCards" For details ; $sExcludeF= The Exclude filter to use. "WildCards" For details ; Requirement(s): None ; Return Value(s): On Success - Returns an array containing the list of files and folders in the specified path ; On Failure - Returns the an empty string "" if no files are found and sets @Error on errors ; @Error=1 Path not found or invalid ; @Error=2 Invalid $s_Filter ; @Error=4 No File(s) Found ; ; Author(s): randallc; modified from SolidSnake, SmoKe_N, GEOsoft and big_daddy ;=============================================================================== Func _FileListToArrayRecAll($sPathF, ByRef $sFileStringF, $sFilterF, $sExcludeF = "") Local $hSearch = FileFindFirstFile($sPathF & "\" & $sFilterF), $sPathF2 If $hSearch = -1 Then Return SetError(4, 4, "") If $sExcludeF == "" Then While 1 $sFileF = FileFindNextFile($hSearch) If @error Then SetError(0) ExitLoop EndIf $sPathF2 = $sPathF & "\" & $sFileF $sFileStringF &= $sPathF2 & "*";this writes the filename to the delimited string with * as delimiter If StringInStr(FileGetAttrib($sPathF2), "D") Then _FileListToArrayRecAll($sPathF2, $sFileStringF, $sFilterF);, $iFlagF, $iRecurseF) WEnd Else While 1 $sFileF = FileFindNextFile($hSearch) If @error Then SetError(0) ExitLoop EndIf $sPathF2 = $sPathF & "\" & $sFileF If StringInStr(FileGetAttrib($sPathF2), "D") Then $sFileStringF &= $sPathF2 & "*";this writes the directoryname _FileListToArrayRecAll($sPathF2, $sFileStringF, $sFilterF, $sExcludeF);, $iFlagF, $iRecurseF) Else;if not directory, check Exclude match If Not StringRegExp($sFileF, $sExcludeF) Then $sFileStringF &= $sPathF2 & "*";this writes the filename to the delimited string with * as delimiter EndIf WEnd EndIf FileClose($hSearch) EndFunc ;==>_FileListToArrayRecAll ;=============================================================================== ; ; Description: Helper self-calling func for _FileListToArray wrapper; lists all files in a specified path ; Syntax: _FileListToArrayRecFiles($s_PathF, ByRef $s_FileStringF, $s_FilterF); recursive ; Parameter(s): $s_PathF = Path to generate filelist for ; $s_FileStringF = The string for lists all files and folders in a specified path ; $s_FilterF = The filter to use. Search the Autoit3 manual for the word "WildCards" For details ; $sExcludeF= The Exclude filter to use. "WildCards" For details ; Requirement(s): None ; Return Value(s): On Success - Returns an array containing the list of files and folders in the specified path ; On Failure - Returns the an empty string "" if no files are found and sets @Error on errors ; @Error=1 Path not found or invalid ; @Error=2 Invalid $s_Filter ; @Error=4 No File(s) Found ; ; Author(s): randallc; modified from SolidSnake, SmoKe_N, GEOsoft and big_daddy ;=============================================================================== Func _FileListToArrayRecFiles($sPathF, ByRef $sFileStringF, $sFilterF, $sExcludeF = "") Local $hSearch = FileFindFirstFile($sPathF & "\" & $sFilterF), $sPathF2 If $hSearch = -1 Then Return SetError(4, 4, "") If $sExcludeF == "" Then While 1 $sFileF = FileFindNextFile($hSearch) If @error Then SetError(0) ExitLoop EndIf $sPathF2 = $sPathF & "\" & $sFileF If StringInStr(FileGetAttrib($sPathF2), "D") Then _FileListToArrayRecFiles($sPathF2, $sFileStringF, $sFilterF);, $iFlagF, $iRecurseF) Else $sFileStringF &= $sPathF2 & "*";this writes the filename to the delimited string with * as delimiter EndIf WEnd Else While 1 $sFileF = FileFindNextFile($hSearch) If @error Then SetError(0) ExitLoop EndIf $sPathF2 = $sPathF & "\" & $sFileF If StringInStr(FileGetAttrib($sPathF2), "D") Then _FileListToArrayRecFiles($sPathF2, $sFileStringF, $sFilterF, $sExcludeF);, $iFlagF, $iRecurseF) Else If Not StringRegExp($sFileF, $sExcludeF) Then $sFileStringF &= $sPathF2 & "*";this writes the filename to the delimited string with * as delimiter EndIf WEnd EndIf FileClose($hSearch) EndFunc ;==>_FileListToArrayRecFiles ;=============================================================================== ; ; Description: Helper func for _FileListToArray wrapper; lists all files ONLY in a specified path ; Syntax: _FileListToArrayBrief2($s_PathF, ByRef $s_FileStringF, $s_FilterF);quick as not recursive ; Parameter(s): $s_PathF = Path to generate filelist for ; $s_FileStringF = The string for lists all files and folders in a specified path ; $s_FilterF = The filter to use. Search the Autoit3 manual for the word "WildCards" For details ; $sExcludeF= The Exclude filter to use. "WildCards" For details ; Requirement(s): None ; Return Value(s): On Success - Returns an array containing the list of files and folders in the specified path ; On Failure - Returns the an empty string "" if no files are found and sets @Error on errors ; @Error=1 Path not found or invalid ; @Error=2 Invalid $s_Filter ; @Error=4 No File(s) Found ; ; Author(s): randallc; modified from SolidSnake, SmoKe_N, GEOsoft and big_daddy ;=============================================================================== Func _FileListToArrayBrief2($sPathF, ByRef $sFileStringF, $sFilterF, $sExcludeF = "") $hSearch = FileFindFirstFile($sPathF & "\" & $sFilterF) If $hSearch = -1 Then Return SetError(4, 4, "") If $sExcludeF == "" Then While 1 $sFileF = FileFindNextFile($hSearch) If @error Then SetError(0) ExitLoop EndIf $sFileStringF &= $sFileF & "*";this writes the filename to the delimited string with * as delimiter; only time no full path included WEnd Else While 1 $sFileF = FileFindNextFile($hSearch) If @error Then SetError(0) ExitLoop EndIf;If not StringRegExp($sFileF,$sExcludeF) then $sFileStringF &= $sPathF2 & "*" If Not StringRegExp($sFileF, $sExcludeF) Then $sFileStringF &= $sFileF & "*";this writes the filename to the delimited string with * as delimiter; only time no full path included WEnd EndIf FileClose($hSearch) EndFunc ;==>_FileListToArrayBrief2 ;=============================================================================== ; ; Description: Helper func for _FileListToArray wrapper; lists all files and folders in a specified path ; Syntax: _FileListToArrayBrief1($s_PathF, ByRef $s_FileStringF, $s_FilterF);quick as not recursive ; Parameter(s): $s_PathF = Path to generate filelist for ; $s_FileStringF = The string for lists all files and folders in a specified path ; $s_FilterF = The filter to use. Search the Autoit3 manual for the word "WildCards" For details ; $sExcludeF= The Exclude filter to use. "WildCards" For details ; Requirement(s): None ; Return Value(s): On Success - Returns an array containing the list of files and folders in the specified path ; On Failure - Returns the an empty string "" if no files are found and sets @Error on errors ; @Error=1 Path not found or invalid ; @Error=2 Invalid $s_Filter ; @Error=4 No File(s) Found ; ; Author(s): randallc; modified from SolidSnake, SmoKe_N, GEOsoft and big_daddy ;=============================================================================== Func _FileListToArrayBrief1($sPathF, ByRef $sFileStringF, $sFilterF, $sExcludeF = "") $hSearch = FileFindFirstFile($sPathF & "\" & $sFilterF) If $hSearch = -1 Then Return SetError(4, 4, "") If $sExcludeF == "" Then While 1 $sFileF = FileFindNextFile($hSearch) If @error Then SetError(0) ExitLoop EndIf $sFileStringF &= $sPathF & "\" & $sFileF & "*";this writes the filename to the delimited string with * as delimiter [remo] WEnd Else While 1 $sFileF = FileFindNextFile($hSearch) If @error Then SetError(0) ExitLoop EndIf If Not StringRegExp($sFileF, $sExcludeF) Then $sFileStringF &= $sPathF & "\" & $sFileF & "*";this writes the filename to the delimited string with * as delimiter [remo] WEnd EndIf FileClose($hSearch) EndFunc ;==>_FileListToArrayBrief1 Link to comment Share on other sites More sharing options...
martin Posted July 22, 2007 Share Posted July 22, 2007 Hello Everybody: The problem is to do with using a global variable, $j1, in a for/next loop. From the help file The Variable will be created automatically with a LOCAL scope, even when MustDeclareVars is on. So the solution is to pass the loop varaible to your double click function like this ListView_DoubleClick ($j1) Func ListView_DoubleClick($ll) local $indiceselect ;---------------------------------------------------------------------------------------------- If $DebugIt Then _DebugPrint ("$NM_DBLCLK") ;---------------------------------------------------------------------------------------------- $indiceselect = _GUICtrlListViewGetSelectedIndices($av_ListViews[$ll]) MsgBox(0,"Double Clicked", _GUICtrlListViewGetItemText($av_ListViews[$ll], $indiceselect) ) EndFunc ;==>ListView_DoubleClick Serial port communications UDF Includes functions for binary transmission and reception.printing UDF Useful for graphs, forms, labels, reports etc.Add User Call Tips to SciTE for functions in UDFs not included with AutoIt and for your own scripts.Functions with parameters in OnEvent mode and for Hot Keys One function replaces GuiSetOnEvent, GuiCtrlSetOnEvent and HotKeySet.UDF IsConnected2 for notification of status of connected state of many urls or IPs, without slowing the script. Link to comment Share on other sites More sharing options...
rudolph Posted July 22, 2007 Author Share Posted July 22, 2007 Hi Martin: Thanks a million for finding the problem, I learned how to pass the variable from a loop to a function, even if it is global declared. Now, my program works perfectly. Again thanks for your help. Rudolph. The problem is to do with using a global variable, $j1, in a for/next loop. From the help file So the solution is to pass the loop varaible to your double click function like this ListView_DoubleClick ($j1) Func ListView_DoubleClick($ll) local $indiceselect ;---------------------------------------------------------------------------------------------- If $DebugIt Then _DebugPrint ("$NM_DBLCLK") ;---------------------------------------------------------------------------------------------- $indiceselect = _GUICtrlListViewGetSelectedIndices($av_ListViews[$ll]) MsgBox(0,"Double Clicked", _GUICtrlListViewGetItemText($av_ListViews[$ll], $indiceselect) ) EndFunc ;==>ListView_DoubleClick Link to comment Share on other sites More sharing options...
martin Posted July 22, 2007 Share Posted July 22, 2007 Hi Martin:Thanks a million for finding the problem, I learned how to pass the variable from a loop to a function, even if it is global declared.Now, my program works perfectly.Again thanks for your help.Rudolph.Not a problem, pleased I could help.I see that the post I answered was your first so welcome to the forum. That was a very good first post. Serial port communications UDF Includes functions for binary transmission and reception.printing UDF Useful for graphs, forms, labels, reports etc.Add User Call Tips to SciTE for functions in UDFs not included with AutoIt and for your own scripts.Functions with parameters in OnEvent mode and for Hot Keys One function replaces GuiSetOnEvent, GuiCtrlSetOnEvent and HotKeySet.UDF IsConnected2 for notification of status of connected state of many urls or IPs, without slowing the script. 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