Leaderboard
Popular Content
Showing content with the highest reputation on 05/12/2023 in all areas
-
GuiBuilderPlus [updated March 24, 2024]
Skeletor and one other reacted to kurtykurtyboy for a topic
Updated zip in the first post with a couple bug fixes and updates. I created my own sort of build process to streamline new releases, so let me know if I missed anything in the zip. FIXED: Bug when resizing the Code Generation window FIXED: Bug control randomly disappears FIXED: More seamless positioning of resize handles when crossing zero FIXED: Code preview was not always updating ADDED: New property "Image" for Icon and Pic controls with selection dialog UPDATED: Smaller tab width in code preview2 points -
GuiBuilderPlus [updated March 24, 2024]
yahaosoft reacted to kurtykurtyboy for a topic
GuiBuilderPlus GuiBuilderPlus is a small, easy to use GUI designer for AutoIt. Originally created long ago as AutoBuilder by the user CyberSlug, enhanced as GuiBuilder by TheSaint, and further enhanced and expanded as GuiBuilderNxt by jaberwacky, GuiBuilderPlus is a continuation of their great work, with a focus on increased stability and usability followed by new features. ------ Yes, I have decided to bring back our old friend the GuiBuilder. This utility has a long history, which you can read about in TheSaint's Gui Creators topic, starting all the back back with CyberSlug's AutoBuilder. Even though I've hacked the original code to pieces in order to document and better understand what is going on, the essence of GuiBuilder still lives on! I am using the awesome updates from GuiBuilderNxt by jaberwacky as a starting point since he already did a lot of the hard work of parsing and updating the original code, plus I really like the layout that came about from that update. Unfortunately development seems to have stopped in 2016. Not sure how much interest there is in this, but suggestions and bug reports are welcome. See Full Changelog: Download the latest version: v1.3.0 (2024-03-24) GuiBuilderPlus v1.3.0 - 2024-03-24.zip FIXED: Wrong line endings when copying from code preview window FIXED: Issue changing properties when Obect Explorer window is not open FIXED: Issue when selecting controls under certain other conditions FIXED: SaveAs keyboard shortcut FIXED: Undo/Redo for Global property ADDED: Auto-size property for Labels, Buttons, and Inputs GitHub Repository: https://github.com/KurtisLiggett/GuiBuilderPlus1 point -
Version 1.6.3.0
17,277 downloads
Extensive library to control and manipulate Microsoft Active Directory. Threads: Development - General Help & Support - Example Scripts - Wiki Previous downloads: 30467 Known Bugs: (last changed: 2020-10-05) None Things to come: (last changed: 2020-07-21) None BTW: If you like this UDF please click the "I like this" button. This tells me where to next put my development effort1 point -
GuiBuilderPlus [updated March 24, 2024]
argumentum reacted to Skeletor for a topic
1 point -
Pointers are perfectly valid in another process as long as the original referenced memory is mapped into that of the current process, and the pointer itself translated w.r.t. the current process's base memory pointer (as I explained before). Moreover, the provided test scripts show that not only can the 2nd process get a valid pointer to an object created elsewhere, but also (via ROT ID, if 1st process registered it with unique name) gain access to the object itself, outside of the process that created it. Apparently you're under the mistaken assumption that HighMem is just for IPC; it's not; it's for managing large chunks of virtual memory in a multi-processing context.1 point
-
Txt split to ini file
mucitbey reacted to pixelsearch for a topic
@mucitbey You asked me in your last post if it was possible to have the time(input) time(output) on the same row in the listview, for each user. I did that in the script below. Hope it will help you at your work #include <File.au3> #include <GuiListView.au3> #include <GUIConstantsEx.au3> #include <MsgBoxConstants.au3> Global $aData, $aUser, $aUser_Backup _FileReadToArray(@ScriptDir & "\" & "Datalar.txt", $aData, $FRTA_NOCOUNT) ; 1D array If @error Then Exit MsgBox($MB_TOPMOST, "_FileReadToArray error = " & @error, "Datalar.txt") $iLinesData = UBound($aData) _FileReadToArray(@ScriptDir & "\" & "Users.txt", $aUser, $FRTA_NOCOUNT, "=") ; 2D array If @error Then Exit MsgBox($MB_TOPMOST, "_FileReadToArray error = " & @error, "Users.txt") $iLinesUser = UBound($aUser) ReDim $aUser[$iLinesUser][3] ; add one empty column 2 at the right (to remember users who were present daily) $aUser_Backup = $aUser ; keep a copy with last column 2 empty for all users. Reuse this backup when date changes. $hTemplate = FileOpen(@ScriptDir & "\" & "Users template.ini", $FO_OVERWRITE + $FO_UNICODE) ; more reliable than $FO_ANSI If $hTemplate = -1 Then Exit MsgBox($MB_TOPMOST, "FileOpen error", "Users template.ini") For $i = 0 To $iLinesUser - 1 FileWriteLine($hTemplate, _ "[" & $aUser[$i][1] & "]" & @crlf & _ "Value01=" & $aUser[$i][0] & @crlf & _ "Value02=" & @crlf & "Value03=" & @crlf & "Value04=" & @crlf) Next FileClose($hTemplate) GUICreate("_ank_ File Splitting", 470, 500, -1, -1) $lv = GUICtrlCreateListView("CART ID | DATE|TIME-1 |TIME-2 |NAME AND SURNAME ", 10, 10, 450, 480) $sDate = '' For $li = 0 To $iLinesData - 1 $aTemp = StringSplit(StringStripWS($aData[$li], 1+2), ", ", $STR_NOCOUNT) ; strip leading (1) and trailing (2) eventual white space If @error Then ContinueLoop ; eliminate accidental blank lines. Help file StringSplit: "@error = 1 when no delimiters were found" If StringLen($aTemp[3]) < 10 Then $aTemp[3] = "0" & $aTemp[3] ; days "1" to "9" will become "01" to "09" everywhere in the script. If $sDate <> $aTemp[3] Then ; $sDate is the old date, $aTemp[3] is the new date. If $sDate Then ; always False when $li = 0 (first data line processed) Add_Absents($sDate) ; add eventual absents AFTER a day has been processed. $aUser = $aUser_Backup ; blank column 2 in $aUser, for all users, when the date changes. $iLinesUser = UBound($aUser) ; as it may have increased in Func GetUserIndex (if an eventual ID wasn't found in $aUser) GUICtrlCreateListViewItem("", $lv) ; 1 empty line between each day processed (sort of vertical separator) EndIf $sIniFile = @ScriptDir & "\" & $aTemp[3] & ".ini" $iRet = FileCopy(@ScriptDir & "\" & "Users template.ini", $sIniFile, $FC_OVERWRITE) ; date changes => new ini file (based on ini template) If $iRet = 0 Then Exit MsgBox($MB_TOPMOST, "FileCopy error", $sIniFile) ; maybe existed read-only => overwrite fails $sDate = $aTemp[3] ; old date = new date EndIf $UserIndex = GetUserIndex($aTemp[1]) ; user index (row) in $aUser $UserName = $aUser[$UserIndex][1] $sKey = IniRead($sIniFile, $Username, "Value03", "Impossible error") ; remember Value03 = in-time ; $sKey has 3 possible values : ; 1) "" means we need to update "Value03" (1st entry for this user in Datalar.txt for this day) ; 2) "07:01:00" (for example) means we need to update "Value04" (2nd entry for this user in Datalar.txt for this day) ; 3) "Impossible error" will never happen, because an unknown ID has already updated $aUser and $sIniFile in Func GetUserIndex() ; 4) Nothing else should be found in $sKey . If this ever happens, Case Else will be triggered below. Select Case $sKey = "" IniWrite($sIniFile, $UserName, "Value02", $aTemp[3]) ; date IniWrite($sIniFile, $UserName, "Value03", $aTemp[4]) ; in-time $iLVrow = GUICtrlCreateListViewItem($aTemp[1] &"|"& $aTemp[3] &"|"& $aTemp[4] &"|"& "" &"|"& $UserName, $lv) $aUser[$UserIndex][2] = String($iLVrow) ; String() to force "0" (when 1st row in LV) to allow testing If Not $aUser[$i][2] Case StringRegExp($sKey, '\d\d:\d\d:\d\d') ; ex. '07:01:00' IniWrite($sIniFile, $UserName, "Value02", $aTemp[3]) ; date IniWrite($sIniFile, $UserName, "Value04", $aTemp[4]) ; out-time ; update out-time (iSubItem 3) in a preceding LV row : retrieve its index via _GUICtrlListView_FindParam() $iRet = _GUICtrlListView_SetItemText($lv, _GUICtrlListView_FindParam($lv, $aUser[$UserIndex][2]), $aTemp[4], 3) If $iRet = 0 Then Exit MsgBox($MB_TOPMOST, "_GUICtrlListView_SetItemText", $sIniFile) ; impossible error Case $sKey = "Impossible error" ; this will never happen Exit MsgBox($MB_TOPMOST, "Impossible error", $sIniFile) ; this will never happen Case Else ; this should never happen Exit MsgBox($MB_TOPMOST, "Case Else", $sIniFile & @crlf & "$sKey = " & $sKey) EndSelect Color_Row($aUser[$UserIndex][2]) ; LV native Item ID Next If $sDate Then Add_Absents($sDate) ; add eventual absents for the last day processed. GUISetState(@SW_SHOW) Do Until GUIGetMsg() = $GUI_EVENT_CLOSE ;===================================================== Func GetUserIndex($ID) For $iIndex = 0 To $iLinesUser - 1 If $aUser[$iIndex][0] = $ID Then Return $iIndex ; regular user found => no problem. Next ; Below, user ID was not found in $aUser (e.g "Users.txt") and $iIndex is correct for this Undefined ID ; Add 1 line in $aUser for this Undefined ID $iLinesUser += 1 ReDim $aUser[$iLinesUser][3] $aUser[$iIndex][0] = $ID $aUser[$iIndex][1] = "Undefined ID " & $ID ; this creates a unique "name" (+++) ; Add 1 section in $sIniFile for this Undefined ID ; Use @lf as indicated by help-file, because @cr will also be automatically added by the function, ending in @crlf everywhere !) Local $sSectionContent = _ "Value01=" & $ID & @lf & _ "Value02=" & @lf & _ "Value03=" & @lf & _ "Value04=" ; & @lf (optional last @lf, same result with or without it => @crlf will be added at the end) IniWriteSection($sIniFile, "Undefined ID " & $ID, $sSectionContent) ; note the unique section name : "Undefined ID " & $ID Return $iIndex ; of this Undefined ID EndFunc ;===================================================== Func Add_Absents($sDate) For $i = 0 To $iLinesUser - 1 If Not $aUser[$i][2] Then ; user was absent that day ; add 1 line in ListView for the absent user (with a blank time) GUICtrlCreateListViewItem($aUser[$i][0] &"|"& $sDate &"|"& "" &"|"& "" &"|"& $aUser[$i][1], $lv) ; update 1 line in ini file for the absent user (update the date line, e.g. Value02) IniWrite($sIniFile, $aUser[$i][1], "Value02", $sDate) ; date EndIf Next EndFunc ;===================================================== Func Color_Row($iItem) ; $iItem is a LV native Item ID If StringLeft($UserName, 12) = "Undefined ID" Then GUICtrlSetBkColor($iItem, 0xFF0000) ; red ElseIf $aTemp[4] > "08:10:00" And $aTemp[4] < "17:00:00" Then GUICtrlSetBkColor($iItem, 0xC0FFFF) ; light blue EndIf EndFunc1 point -
GuiBuilderPlus [updated March 24, 2024]
Skeletor reacted to kurtykurtyboy for a topic
1 point -
Txt split to ini file
pixelsearch reacted to ioa747 for a topic
I'm embedding the time difference calculation in the array to improve the gui redraw speed ; https://www.autoitscript.com/forum/topic/210069-txt-split-to-ini-file/?do=findComment&comment=1517679 #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 ;-w 5 -w 6 -w 7 #include <Misc.au3> #include <File.au3> #include <Date.au3> #include <Array.au3> #include <GuiComboBox.au3> #include <GUIConstantsEx.au3> #include <GuiListView.au3> _Singleton(@ScriptName, 0) ToolTip(" File Splitting ", @DesktopWidth / 2, @DesktopHeight / 5, "Please wait...", 1) Global $nMsg, $hGui, $idCombo, $lv, $CurUser Global $aUsers = WriteAllUserData() Global $aData = FindAllIniFile(@ScriptDir & "\Data\") AddAbsentUser() MakeMyGuiList() HotKeySet("{HOME}", "aDataDisplay") ;Display the $aData Array HotKeySet("{END}", "aUsersDisplay") ;Display the $aUsers Array While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $idCombo _GUICtrlComboBox_GetLBText($idCombo, _GUICtrlComboBox_GetCurSel($idCombo), $CurUser) UpDadeMyGuiList($CurUser) Case $GUI_EVENT_CLOSE GUIDelete() Exit EndSwitch WEnd ;---------------------------------------------------------------------------------------- Func WriteAllUserData() ; Make all ini files Local $aDatalar, $aUsers, $UserName, $aTemp, $IniFile, $aSpl, $sDate _FileReadToArray("Datalar.txt", $aDatalar, $FRTA_NOCOUNT) _FileReadToArray("Users.txt", $aUsers, $FRTA_COUNT, "=") Local $iLines = UBound($aDatalar) $sDate = '' For $i = 0 To $iLines - 1 $aTemp = StringSplit($aDatalar[$i], ", ", $STR_NOCOUNT) $UserName = GetUserName($aUsers, $aTemp[1]) ; if no user skip If $UserName <> "" Then If $sDate <> $aTemp[3] Then $sDate = $aTemp[3] ;~ ; format date 00.00.0000 for ini FileName ;~ $aSpl = StringSplit($sDate, ".") ;~ If StringLen($aSpl[1]) = 1 Then $aSpl[1] = "0" & $aSpl[1] ;~ $IniFile = $aSpl[1] & "." & $aSpl[2] & "." & $aSpl[3] & ".ini" $IniFile = $sDate & ".ini" ;write ini If IniRead(@ScriptDir & "\Data\" & $IniFile, $UserName, "Value01", "Non-existing key") = "Non-existing key" Then IniWrite(@ScriptDir & "\Data\" & $IniFile, $UserName, "Value01", $aTemp[1]) IniWrite(@ScriptDir & "\Data\" & $IniFile, $UserName, "Value02", $aTemp[3]) IniWrite(@ScriptDir & "\Data\" & $IniFile, $UserName, "Value03", $aTemp[4]) Else If IniRead(@ScriptDir & "\Data\" & $IniFile, $UserName, "Value03", "<UNKNOWN>") <> $aTemp[4] Then IniWrite(@ScriptDir & "\Data\" & $IniFile, $UserName, "Value04", $aTemp[4]) EndIf EndIf EndIf Next Return $aUsers EndFunc ;==>WriteAllUserData ;---------------------------------------------------------------------------------------- Func GetUserName($aUsers, $ID) ; ID to User Name Local $sName For $i = 1 To $aUsers[0][0] $sName = "" If $aUsers[$i][0] = $ID Then $sName = $aUsers[$i][1] ExitLoop EndIf Next Return $sName EndFunc ;==>GetUserName ;---------------------------------------------------------------------------------------- Func FindAllIniFile($sStartPath = "") ; Find All Ini File If $sStartPath = "" Then $sStartPath = @ScriptDir Local $aArray[1][8] $aArray[0][0] = 0 ; "index" $aArray[0][1] = "UserID" $aArray[0][2] = "UserName" $aArray[0][3] = "Date" $aArray[0][4] = "Start" $aArray[0][5] = "End" $aArray[0][6] = "Time" $aArray[0][7] = "idItem" Local $ArraySrtfiles = _FileListToArrayRec($sStartPath, "*.ini", $FLTAR_FILES, $FLTAR_RECUR) If Not IsArray($ArraySrtfiles) Then ConsoleWrite($sStartPath & " = Invalid input path" & @CRLF) Return Else For $x = 1 To $ArraySrtfiles[0] ;ConsoleWrite($sStartPath & $ArraySrtfiles[$x]& @CRLF) ReadIniToArray($aArray, $sStartPath & $ArraySrtfiles[$x]) Next Return $aArray EndIf EndFunc ;==>FindAllIniFile ;---------------------------------------------------------------------------------------- Func ReadIniToArray(ByRef $aArray, $TxtFile) ; Read Ini To Array Local $index ;Read the INI section names. This will return a 1 dimensional array. Local $aSections = IniReadSectionNames($TxtFile) ;Check if an error occurred. If Not @error Then ;Enumerate through the array displaying the section names. For $i = 1 To $aSections[0] ReDim $aArray[UBound($aArray) + 1][8] $aArray[0][0] += 1 $index = $aArray[0][0] $aArray[$index][0] = $index ;"index" $aArray[$index][1] = IniRead($TxtFile, $aSections[$i], "Value01", "Null") ;"UserID" $aArray[$index][2] = $aSections[$i] ;"UserName" $aArray[$index][3] = IniRead($TxtFile, $aSections[$i], "Value02", "Null") ;"Date" $aArray[$index][4] = IniRead($TxtFile, $aSections[$i], "Value03", "Null") ;"Start" $aArray[$index][5] = IniRead($TxtFile, $aSections[$i], "Value04", "Null") ;"End" $aArray[$index][6] = "" ;"Time" Next EndIf EndFunc ;==>ReadIniToArray ;---------------------------------------------------------------------------------------- Func MakeMyGuiList() ; GUI Create $hGui = GUICreate("_ank_ File Splitting", 510, 560, -1, -1) $lv = GUICtrlCreateListView("CART ID |DATE |START |END |TIME|NAME AND SURNAME", 10, 30, 490, 520) Local $sLine For $i = 1 To $aData[0][0] $sLine = $aData[$i][1] & "|" & $aData[$i][3] & "|" & $aData[$i][4] & "|" $sLine &= $aData[$i][5] & "|" & $aData[$i][6] & "|" & $aData[$i][2] $aData[$i][7] = GUICtrlCreateListViewItem($sLine, $lv) If $aData[$i][4] > "08:10:00" And $aData[$i][4] < "17:00:00" Then GUICtrlSetBkColor(-1, 0xC0FFFF) If $aData[$i][5] > "08:10:00" And $aData[$i][5] < "17:00:00" Then GUICtrlSetBkColor(-1, 0xC0FFFF) If $aData[$i][4] = "Null" Or $aData[$i][5] = "Null" Then GUICtrlSetBkColor(-1, 0xFFE5FF) Next $idCombo = GUICtrlCreateCombo("Select User", 10, 1, 490, 25) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") For $i = 1 To $aUsers[0][0] _GUICtrlComboBox_AddString($idCombo, $aUsers[$i][1]) Next GUISetState(@SW_SHOW) ToolTip("") EndFunc ;==>MakeMyGuiList ;---------------------------------------------------------------------------------------- Func UpDadeMyGuiList($Filter) ; delete items Local $hlv = GUICtrlGetHandle($lv) _GUICtrlListView_DeleteAllItems($hlv) Local $sLine ; ReMake items For $i = 1 To $aData[0][0] If $Filter = "Select User" Then $sLine = $aData[$i][1] & "|" & $aData[$i][3] & "|" & $aData[$i][4] & "|" $sLine &= $aData[$i][5] & "|" & $aData[$i][6] & "|" & $aData[$i][2] $aData[$i][7] = GUICtrlCreateListViewItem($sLine, $lv) If $aData[$i][4] > "08:10:00" And $aData[$i][4] < "17:00:00" Then GUICtrlSetBkColor(-1, 0xC0FFFF) If $aData[$i][5] > "08:10:00" And $aData[$i][5] < "17:00:00" Then GUICtrlSetBkColor(-1, 0xC0FFFF) If $aData[$i][4] = "Null" Or $aData[$i][5] = "Null" Then GUICtrlSetBkColor(-1, 0xFFE5FF) ContinueLoop Else If $aData[$i][2] = $Filter Then $sLine = $aData[$i][1] & "|" & $aData[$i][3] & "|" & $aData[$i][4] & "|" $sLine &= $aData[$i][5] & "|" & $aData[$i][6] & "|" & $aData[$i][2] $aData[$i][7] = GUICtrlCreateListViewItem($sLine, $lv) If $aData[$i][4] > "08:10:00" And $aData[$i][4] < "17:00:00" Then GUICtrlSetBkColor(-1, 0xC0FFFF) If $aData[$i][5] > "08:10:00" And $aData[$i][5] < "17:00:00" Then GUICtrlSetBkColor(-1, 0xC0FFFF) If $aData[$i][4] = "Null" Or $aData[$i][5] = "Null" Then GUICtrlSetBkColor(-1, 0xFFE5FF) Else $aData[$i][7] = "" EndIf EndIf Next EndFunc ;==>UpDadeMyGuiList ;---------------------------------------------------------------------------------------- Func AddAbsentUser() Local $sLine, $IniFile, $aSpl, $aArray = $aData ;*[Add Absent User to $aData Array Local $aDateUnique = _ArrayUnique($aArray, 3, 1) For $d = 1 To $aDateUnique[0] For $i = 1 To $aUsers[0][0] If _GetThis($aUsers[$i][0] & "-" & $aDateUnique[$d]) = -1 Then ConsoleWrite("- AddAbsentUser: " & $aDateUnique[$d] & " " & $aUsers[$i][0] & "-" & $aUsers[$i][1] & @CRLF) $aData[0][0] += 1 $sLine = $aData[0][0] & "|" & $aUsers[$i][0] & "|" & $aUsers[$i][1] & "|" & $aDateUnique[$d] & "|Null|Null" _ArrayAdd($aData, $sLine) EndIf Next Next ;Add Absent User to $aData Array]* ;*[proper Array Sort order For $i = 1 To $aData[0][0] $aData[$i][6] = TimeDiff($aData[$i][4], $aData[$i][5]) ; format date YYYY.MM.DD.HH.MM.SS $aSpl = StringSplit($aData[$i][3], ".") If StringLen($aSpl[1]) = 1 Then $aSpl[1] = "0" & $aSpl[1] $sLine = $aSpl[3] & "." & $aSpl[2] & "." & $aSpl[1] & "." & $aData[$i][4] $aData[$i][0] = $sLine Next _ArraySort($aData, 0, 1) For $i = 1 To $aData[0][0] $aData[$i][0] = $i Next ;proper Array Sort order]* ;*[Write $aData Array to ini For $i = 1 To $aData[0][0] ;~ ; format date 00.00.0000 for ini FileName ;~ $aSpl = StringSplit($aData[$i][3], ".") ;~ If StringLen($aSpl[1]) = 1 Then $aSpl[1] = "0" & $aSpl[1] ;~ $IniFile = $aSpl[1] & "." & $aSpl[2] & "." & $aSpl[3] & ".ini" $IniFile = $aData[$i][3] & ".ini" ;write ini IniWrite(@ScriptDir & "\Data\" & $IniFile, $aData[$i][2], "Value01", $aData[$i][1]) IniWrite(@ScriptDir & "\Data\" & $IniFile, $aData[$i][2], "Value02", $aData[$i][3]) IniWrite(@ScriptDir & "\Data\" & $IniFile, $aData[$i][2], "Value03", $aData[$i][4]) IniWrite(@ScriptDir & "\Data\" & $IniFile, $aData[$i][2], "Value04", $aData[$i][5]) Next ;Write $aData Array to ini]* EndFunc ;==>AddAbsentUser ;---------------------------------------------------------------------------------------- Func _GetThis($Txt) Local $sIndex For $i = 1 To $aData[0][0] $sIndex = -1 If $aData[$i][1] & "-" & $aData[$i][3] = $Txt Then $sIndex = $i ExitLoop EndIf Next Return $sIndex EndFunc ;==>_GetThis ;---------------------------------------------------------------------------------------- Func TimeDiff($sStartTime, $sEndTime) Local $H, $M, $sDiff, $aSpl1, $aSpl2 $aSpl1 = StringSplit($sStartTime, ":") $aSpl2 = StringSplit($sEndTime, ":") If $aSpl1[0] + $aSpl2[0] <> 6 Then ;ConsoleWrite("! Error No valid time format" & @CRLF) Return SetError(1, 0, "") EndIf ; ** 2020/01/01 ** since all the results are from the same date $M = _DateDiff('n', "2020/01/01 " & $sStartTime, "2020/01/01 " & $sEndTime) $H = Floor($M / 60) $M = Mod($M, 60) $sDiff = StringFormat("%i:%02i", $H, $M) Return $sDiff EndFunc ;==>TimeDiff ;---------------------------------------------------------------------------------------- Func aDataDisplay() _ArrayDisplay($aData, "$aData") EndFunc ;==>MyArrayDisplay ;---------------------------------------------------------------------------------------- Func aUsersDisplay() _ArrayDisplay($aUsers, "$aUsers") EndFunc1 point