MrPinkComputerShrink Posted October 3, 2014 Posted October 3, 2014 Trying to use LV_Format_include1.3.au3 Format Listview Item _GUICtrlListView_FormattingCell($hWnd, $iItem, $iSubItem, $iBkCol=-1, $iCol=-1, $iSize=-1, $iWeight=-1, $sFont=-1) $hWnd Listview handle $iItem Item index $iSubItem SubItem index $iBkCol back color (-1 = default BkCol) $iCol text color (-1 = default txtCol) $iSize height of font (-1 = 14) $iWeight font weight (-1 = 400) $sFont typefont name (-1 = Arial) I need to be able to make variuos rows in the listview differnet colors. i.e. Channel 1 = BLACK Channel 6 = BLUE Channel 11 = NAVE Other = RED Problem Starts at 272 Any help would be great1 expandcollapse popup#include <Array.au3> #include <AVIConstants.au3> #include <Constants.au3> #include <Date.au3> #include <File.au3> #include <GUIConstantsEx.au3> #include <GuiListView.au3> #include <IE.au3> #include <Process.au3> #include <StaticConstants.au3> #include <String.au3> #include <TreeViewConstants.au3> #include <ListViewConstants.au3> #include <ColorConstants.au3> #include <WinAPI.au3> #include <Inet.au3> #include <LV_Format_include1.3.au3> ;~ #include <Services.au3> ;~ #include <NetInfo.au3> #include <WindowsConstants.au3> #include <GuiImageList.au3> Global $g_idListView = 99999 DllCall("kernel32.dll", "int", "Wow64DisableWow64FsRedirection", "int", 1) ; This disables 32bit applications from being redirected to syswow64 instead of system32 by default ; ConsoleWrite("Loaded #include Files" & @CRLF) Global $SSID, $BSSID, $Signal, $Authentication, $Encryption GUICtrlSetState(-1, $GUI_DROPACCEPTED) ; to allow drag and dropping ConsoleWrite("Created Variables" & @CRLF) DirCreate(@TempDir & "\WifiExample") $WifiTempDir = (@TempDir & "\WifiExample") ConsoleWrite("Created $WifiTempDir directory at " & $WifiTempDir & @CRLF) Call("_WifiNetsPrep") Call("_WifiNets") $Gooey = GUICreate("Sortable Wifi Tab", 770, 540) _GUICtrlListView_Formatting_Startup($Gooey, $g_idListView) $Tab = GUICtrlCreateTab(10, 0, 755, 530) ; -15 x -10 $Tab5 = GUICtrlCreateTabItem("Wifi") ;- ========================================================================== Wifi Networks GUICtrlCreateTabItem("") _BuildLV() GUISetState() While 1 Switch GUIGetMsg() Case $Tab Switch GUICtrlRead($Tab) Case $Tab Case 0 ;ConsoleWrite ("1st Tab " & @CRLF ) ; Status Case 1 ;ConsoleWrite ("2nd Tab " & @CRLF ) ; ARP/UPnP Case 2 ;ConsoleWrite ("3rd Tab "& @CRLF ) ; Pings Case 3 ;ConsoleWrite ("4th Tab " & @CRLF ) ; 1400s Case 4 ;~ GUISwitch($Gooey, $Tab5) EndSwitch Case $GUI_EVENT_CLOSE ConsoleWrite("Case $GUI_EVENT_CLOSE in main loop" & @CRLF) DirRemove($WifiTempDir) Exit Case $g_idListView _SortBy() EndSwitch WEnd Func _WifiNetsPrep() Local $rc = _RunDos("netsh wlan show all > " & $WifiTempDir & "WifiData.txt") Global $WifiData2 = $WifiTempDir & "WifiData.txt" ConsoleWrite("WIfiTab $$WifiData2 " & $WifiData2) Local $WifiNets = FileRead($WifiData2) FileOpen($WifiData2, 2) Local $Trim1 = StringInStr($WifiNets, "SSID 1") $WifiNets = StringTrimLeft($WifiNets, $Trim1 - 6) FileWrite($WifiData2, $WifiNets) FileClose($WifiData2) $WifiNets = FileOpen($WifiData2, 1) FileWriteLine($WifiNets, "END") FileClose($WifiNets) EndFunc ;==>_WifiNetsPrep Func _WifiNets() ConsoleWrite("Called _WifiNets()" & @CRLF) $WifiNets = FileOpen($WifiData2, 0) Local $WifiNetsParsed = FileOpen($WifiTempDir & "WifiNetsParsed.txt", 2) Do Local $WifiNetLine = FileReadLine($WifiNets) Local $SSIDCheck = StringInStr($WifiNetLine, "SSID") If $SSIDCheck <> 0 Then FileWriteLine($WifiNetsParsed, $WifiNetLine) Local $AuthenticationCheck = StringInStr($WifiNetLine, "Authentication") If $AuthenticationCheck <> 0 Then FileWriteLine($WifiNetsParsed, $WifiNetLine) Local $EncryptionCheck = StringInStr($WifiNetLine, "Encryption") If $EncryptionCheck <> 0 Then FileWriteLine($WifiNetsParsed, $WifiNetLine) Local $SignalCheck = StringInStr($WifiNetLine, "Signal") If $SignalCheck <> 0 Then FileWriteLine($WifiNetsParsed, $WifiNetLine) Local $ChannelCheck = StringInStr($WifiNetLine, "Channel") If $ChannelCheck <> 0 Then FileWriteLine($WifiNetsParsed, $WifiNetLine) If $ChannelCheck <> 0 Then FileWriteLine($WifiNetsParsed, " ") Until $WifiNetLine = "END" FileClose("$WifiData2") FileWriteLine($WifiNetsParsed, "END") FileClose($WifiNetsParsed) $font = ("MS Sans Serif") GUISetFont(9, 400, 1, $font) Local $iListView = GUICtrlCreateListView("Detected Wifi Networks ", 30, 90, 725, 430) _GUICtrlListView_SetColumnWidth($iListView, 0, $LVSCW_AUTOSIZE_USEHEADER) $WifiNetsParsed = FileOpen($WifiTempDir & "WifiNetsParsed.txt", 0) Do $WifiNets = FileReadLine($WifiNetsParsed) GUICtrlCreateListViewItem($WifiNets, $iListView) Until $WifiNets = "END" EndFunc ;==>_WifiNets Func _BuildLV() ; Wifi data sort ConsoleWrite("Called SortBy" & @CRLF) ;~ Global $g_idListView Local $hImage, $aIcons[3] = [0, 3, 6] Local $iExWindowStyle = BitOR($WS_EX_DLGMODALFRAME, $WS_EX_CLIENTEDGE) Local $iExListViewStyle = BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES, $LVS_EX_GRIDLINES, $LVS_EX_DOUBLEBUFFER) GUISwitch($Gooey, $Tab5) $g_idListView = GUICtrlCreateListView("SSID|BSSID|Channel|Signal|Authentication|Encryption", 20, 25, 730, 500, -1, $iExWindowStyle) ;28, 25, 725, 500 _GUICtrlListView_SetExtendedListViewStyle($g_idListView, $iExListViewStyle) $WifiNets = FileOpen($WifiData2, 0) Do Global $WifiNetLine = FileReadLine($WifiNets) Global $SSIDCheck = StringInStr($WifiNetLine, "SSID") Global $AuthenticationCheck = StringInStr($WifiNetLine, "Authentication") Global $EncryptionCheck = StringInStr($WifiNetLine, "Encryption") Global $BSSIDCheck = StringInStr($WifiNetLine, "BSSID") Global $SignalCheck = StringInStr($WifiNetLine, "Signal") Global $ChannelCheck = StringInStr($WifiNetLine, "Channel") If $SSIDCheck <> 0 And $BSSIDCheck = 0 Then Call("_SSIDTrimmer") If $SSIDCheck <> 0 And $BSSIDCheck <> 0 Then Call("_BSSIDTrimmer") If $AuthenticationCheck <> 0 Then Call("_AuthenticationTrimmer") If $EncryptionCheck <> 0 Then Call("_EncryptionTrimmer") If $SignalCheck <> 0 Then Call("_SignalTrimmer") If $ChannelCheck <> 0 Then Call("_ChannelTrimmer") Until $WifiNetLine = "END" GUISetState(@SW_SHOW) _GUICtrlListView_RegisterSortCallBack($g_idListView) Local $count = 0 EndFunc ;==>_BuildLV Func _SortBy() $Column = GUICtrlGetState($g_idListView) _GUICtrlListView_SortItems($g_idListView, $Column) EndFunc ;==>_SortBy Func _SSIDTrimmer() ;ConsoleWrite( @ScriptLineNumber & " Called _SSIDTrimmer()" & @CRLF) ;msgbox (0, "Func _SSIDTrimmer()", "We're Here Now") Local $Colon = StringInStr($WifiNetLine, ":") $SSID = StringTrimLeft($WifiNetLine, $Colon) ;Local $BSSID_WAP = 0 ;msgbox (0, "$SSID ", $SSID) EndFunc ;==>_SSIDTrimmer Func _BSSIDTrimmer() ;ConsoleWrite( @ScriptLineNumber & " Called _BSSIDTrimmer()" & @CRLF) ;msgbox (0, "Func _BSSIDTrimmer()", "We're Here Now") Local $Colon = StringInStr($WifiNetLine, ":") $BSSID = StringTrimLeft($WifiNetLine, $Colon) ;Local $BSSID_WAP = 1 ;msgbox (0, "$BSSID ", $BSSID) EndFunc ;==>_BSSIDTrimmer Func _AuthenticationTrimmer() ;msgbox (0, "_SignalTrimmer()", "We're Here Now") Local $Colon = StringInStr($WifiNetLine, ":") $Authentication = StringTrimLeft($WifiNetLine, $Colon) ;msgbox (0, "$Authentication ", $Authentication) EndFunc ;==>_AuthenticationTrimmer Func _EncryptionTrimmer() ;msgbox (0, "_SignalTrimmer()", "We're Here Now") Local $Colon = StringInStr($WifiNetLine, ":") $Encryption = StringTrimLeft($WifiNetLine, $Colon) ;msgbox (0, "$Encryption ", $Encryption) EndFunc ;==>_EncryptionTrimmer Func _SignalTrimmer() ;msgbox (0, "_SignalTrimmer()", "We're Here Now") Local $Colon = StringInStr($WifiNetLine, ":") $Signal = StringTrimLeft($WifiNetLine, $Colon) ;msgbox (0, "$Signal ", $Signal) EndFunc ;==>_SignalTrimmer Func _ChannelTrimmer() ConsoleWrite(@ScriptLineNumber & " Called _ChannelTrimmer" & @CRLF) Local $Colon = StringInStr($WifiNetLine, ":") $Channel = StringTrimLeft($WifiNetLine, $Colon) GLobal $bChannel = Number($Channel) ;msgbox (0, "$bChannel ", $bChannel) _AddRow($g_idListView, $SSID & "|" & $BSSID & "|" & $bChannel & "|" & $Signal & "|" & $Authentication & "|" & $Encryption) ; Passing Data to AddRow ;$SSID = "" $BSSID = "" $Authentication = "" $Encryption = "" $Channel = "" $Signal = "" EndFunc ;==>_ChannelTrimmer Func _AddRow($hWnd, $sItem, $iPlus = 0) ConsoleWrite(@ScriptLineNumber & " Called _AddRow" & @CRLF) Local $aItem = StringSplit($sItem, "|") Local $iIndex = _GUICtrlListView_AddItem($hWnd, $aItem[1], +$iPlus, _GUICtrlListView_GetItemCount($hWnd) + 9999) _GUICtrlListView_SetColumnWidth($hWnd, 0, $LVSCW_AUTOSIZE_USEHEADER) ;~ Format Listview Item ;~ _GUICtrlListView_FormattingCell($hWnd, $iItem, $iSubItem, $iBkCol=-1, $iCol=-1, $iSize=-1, $iWeight=-1, $sFont=-1) ;~ $hWnd Listview handle ;~ $iItem Item index ;~ $iSubItem SubItem index ;~ $iBkCol back color (-1 = default BkCol) ;~ $iCol text color (-1 = default txtCol) ;~ $iSize height of font (-1 = 14) ;~ $iWeight font weight (-1 = 400) ;~ $sFont typefont name (-1 = Arial) For $x = 2 To $aItem[0] _GUICtrlListView_AddSubItem($hWnd, $iIndex, $aItem[$x], $x - 1, $iPlus) Local $aItemx = $aItem[$x] ;~ msgbox(0, "$bChannel", $bChannel) ;~ If $bChannel = 1 Then ;~ _GUICtrlListView_FormattingCell($hWnd, $iIndex, $x - 1,-1, $COLOR_RED,-1,-1,-1) ;~ ElseIf $bChannel = 6 Then ;~ _GUICtrlListView_FormattingCell($hWnd, $iIndex, $x - 1,-1, $COLOR_BLUE,-1,-1,-1) ;~ ElseIf $bChannel = 11 Then ;~ _GUICtrlListView_FormattingCell($hWnd, $iIndex, $x - 1,-1, $COLOR_NAVY,-1,-1,-1) ;~ ElseIf $bChannel = 3 Then ;~ _GUICtrlListView_FormattingCell($hWnd, $iIndex, $x - 1,-1, $COLOR_BLACK,-1,-1,-1) ;~ ElseIf $bChannel = 9 Then ;~ _GUICtrlListView_FormattingCell($hWnd, $iIndex, $x - 1,-1, $COLOR_RED,-1,-1,-1) ;~ EndIf _GUICtrlListView_SetColumnWidth($hWnd, $x - 1, $LVSCW_AUTOSIZE) Next ConsoleWrite(@ScriptLineNumber & " Return from _AddRow" & @CRLF) EndFunc ;==>_AddRow Func _CleanUp() FileClose($WifiTempDir & "WifiNetsParsed.txt") FileClose($WifiTempDir & "WifiChannel.txt") Sleep(500) FileDelete($WifiTempDir & "WifiNetsParsed.txt") FileDelete($WifiTempDir & "WifiChannel.txt") EndFunc ;==>_CleanUp LV_Format_include1.3.au3
MrPinkComputerShrink Posted October 4, 2014 Author Posted October 4, 2014 (edited) Either you all think I'm an idiot or this is a tough one. Or both. If you were going to do it without LV_Format_include1.3.au3, how could it be done? Edited October 4, 2014 by MrPinkComputerShrink
Moderators Melba23 Posted October 4, 2014 Moderators Posted October 4, 2014 MrPinkComputerShrink ,Colouring ListView lines is easy - >this post shows how to do it. All you need to do is change the colour depending on the "Channel" value. M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area
MrPinkComputerShrink Posted October 4, 2014 Author Posted October 4, 2014 Thank M23, GUICtrlSetColor does not work with _GUICtrlListView_AddItem or _GUICtrlListView_AddSubItem... :-(
MrPinkComputerShrink Posted October 5, 2014 Author Posted October 5, 2014 Still have not found an answer. I can go with colored text where colored rows follow the sort or I can go with colored background on rows. Key thing is I have seperate colored rows the follow the sort. Help! Please.
LarsJ Posted October 5, 2014 Posted October 5, 2014 Take a look at this example.Just add a new post to your thread, if you need more help about the details.A main issue in custom draw is, that the code for $NM_CUSTOMDRAW events must be short and fast. The code in LV_Format.au3 in this thread is too long and slow. Controls, File Explorer, ROT objects, UI Automation, Windows Message MonitorCompiled code: Accessing AutoIt variables, DotNet.au3 UDF, Using C# and VB codeShell menus: The Context menu, The Favorites menu. Shell related: Control Panel, System Image ListsGraphics related: Rubik's Cube, OpenGL without external libraries, Navigating in an image, Non-rectangular selectionsListView controls: Colors and fonts, Multi-line header, Multi-line items, Checkboxes and icons, Incremental searchListView controls: Virtual ListViews, Editing cells, Data display functions
MrPinkComputerShrink Posted October 5, 2014 Author Posted October 5, 2014 Thank you LarsJ for the Examples. I see that is can be done, unfortunately this is way over my head and I just don't know where to start in implementing it in my code. Automation is my specialty, not GUI. I am presenting this tool on Friday and as usual have a lot of other things on my plate. I think the color rows may have to be in ver. 2 . I do see that the colors are being assigned to rows and I am concerned that it may or may not follow the row when sorting by column is clicked. Scott
LarsJ Posted October 5, 2014 Posted October 5, 2014 Here is a small example:expandcollapse popup#include <WindowsConstants.au3> #include <GUIConstantsEx.au3> #include <GuiListView.au3> $Gooey = GUICreate("Sortable Wifi Tab", 770, 540) $Tab = GUICtrlCreateTab(10, 0, 755, 530) $Tab5 = GUICtrlCreateTabItem("Wifi") $iExWindowStyle = BitOR($WS_EX_DLGMODALFRAME, $WS_EX_CLIENTEDGE) $iExListViewStyle = BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES, $LVS_EX_GRIDLINES, $LVS_EX_DOUBLEBUFFER) $g_idListView = GUICtrlCreateListView("SSID|BSSID|Channel|Signal|Authentication|Encryption", 20, 25, 730, 500, -1, $iExWindowStyle) $hListView = GUICtrlGetHandle( $g_idListView ) _GUICtrlListView_SetExtendedListViewStyle($hListView, $iExListViewStyle) _GUICtrlListView_BeginUpdate( $hListView ) For $i = 0 To 30 $iIndex = _GUICtrlListView_AddItem( $hListView, Random( 0, 1000, 1 ) ) _GUICtrlListView_SetItemParam( $hListView, $iIndex, 0x0000FF + 1000 ) ; Red, BGR For $j = 1 To 5 _GUICtrlListView_AddSubItem( $hListView, $iIndex, Random( 0, 1000, 1 ), $j ) Next Next _GUICtrlListView_SetItemParam( $hListView, 1, 0x000000 + 1000 ) ; Black, BGR _GUICtrlListView_SetItemParam( $hListView, 6, 0xFF0000 + 1000 ) ; Blue, BGR _GUICtrlListView_SetItemParam( $hListView, 11, 0x800000 + 1000 ) ; Navy, BGR _GUICtrlListView_EndUpdate( $hListView ) GUIRegisterMsg( $WM_NOTIFY, "WM_NOTIFY" ) GUISetState() While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam) Local $tNMHDR, $hWndFrom, $iCode $tNMHDR = DllStructCreate($tagNMHDR, $lParam) $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom")) $iCode = DllStructGetData($tNMHDR, "Code") Switch $hWndFrom Case $hListView Switch $iCode Case $NM_CUSTOMDRAW Local $tNMLVCUSTOMDRAW = DllStructCreate($tagNMLVCUSTOMDRAW, $lParam) Local $dwDrawStage = DllStructGetData($tNMLVCUSTOMDRAW, "dwDrawStage") Switch $dwDrawStage ; Holds a value that specifies the drawing stage Case $CDDS_PREPAINT ; Before the paint cycle begins Return $CDRF_NOTIFYITEMDRAW ; Notify the parent window of any item-related drawing operations Case $CDDS_ITEMPREPAINT ; Before painting an item Local $iItemlParam = DllStructGetData($tNMLVCUSTOMDRAW, "lItemlParam") - 1000 ; Item param = color + 1000 DllStructSetData($tNMLVCUSTOMDRAW, "ClrText", 0xFFFFFF) ; Forcolor of item text DllStructSetData($tNMLVCUSTOMDRAW, "ClrTextBk", $iItemlParam) ; Backcolor of item text Return $CDRF_NEWFONT ; $CDRF_NEWFONT must be returned after changing font or colors EndSwitch EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFuncSince color + 1000 is stored in ItemParam, the row will get the proper color even if it's sorted in another order. Zedna 1 Controls, File Explorer, ROT objects, UI Automation, Windows Message MonitorCompiled code: Accessing AutoIt variables, DotNet.au3 UDF, Using C# and VB codeShell menus: The Context menu, The Favorites menu. Shell related: Control Panel, System Image ListsGraphics related: Rubik's Cube, OpenGL without external libraries, Navigating in an image, Non-rectangular selectionsListView controls: Colors and fonts, Multi-line header, Multi-line items, Checkboxes and icons, Incremental searchListView controls: Virtual ListViews, Editing cells, Data display functions
Solution Zedna Posted October 6, 2014 Solution Posted October 6, 2014 @LarsJ Nice example! Resources UDF ResourcesEx UDF AutoIt Forum Search
MrPinkComputerShrink Posted October 13, 2014 Author Posted October 13, 2014 @LarsJ, Thank you for this code. Unfortunately is does not sort on my system. GUI problems have taken 3 times longer than planned. Due to time constraints; sortable,colored listview items have been replaced with colored square icons for this iteration. Ver. 2 I hope. Thank you again. This Forum, AutoIt and You Rock! Scott
LarsJ Posted October 13, 2014 Posted October 13, 2014 At least you've got several ideas in this thread. You may find it useful when have more time for your project.Regards Lars. Controls, File Explorer, ROT objects, UI Automation, Windows Message MonitorCompiled code: Accessing AutoIt variables, DotNet.au3 UDF, Using C# and VB codeShell menus: The Context menu, The Favorites menu. Shell related: Control Panel, System Image ListsGraphics related: Rubik's Cube, OpenGL without external libraries, Navigating in an image, Non-rectangular selectionsListView controls: Colors and fonts, Multi-line header, Multi-line items, Checkboxes and icons, Incremental searchListView controls: Virtual ListViews, Editing cells, Data display functions
MrPinkComputerShrink Posted October 14, 2014 Author Posted October 14, 2014 That's the plan. Was going with colored 16 x 16 boxes today and that did not work out either. I am not a GUI expert, but I will be by Ver 3 of this thing.
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