dickep Posted November 22, 2011 Share Posted November 22, 2011 (edited) OK, I have my app below. It does what I want but I need to have only conlumns 1 and 2 colored light green BUT ONLY if it is YES. I can't find out how to do that. Cut and paste the following HEX string into the input box for testing if necessary: 0xE001FFFD7D5F0400007000140000435FFF32 P.S. This is a cluge of many others works. I don't remember where they all came from but am sure glad this forum and the folks willing to help is here!! Thanks E expandcollapse popup#include <Color.au3> #include <GUIConstantsEX.au3> #include <GuiListView.au3> #include <GuiImageList.au3> #include <String.au3> #include <WindowsConstants.au3> Global Const $HX_REF="0123456789ABCDEF" Global Const $color1 = 0x99A8AC Global Const $color2 = 0xFFFFFF ;bold Global $aFont1 = DLLCall("gdi32.dll","int","CreateFont", "int", 14, "int", 0, "int", 0, "int", 0, "int", 700, _ "dword", 0, "dword", 0, "dword", 0, "dword", 0, "dword", 0, "dword", 0, "dword", 0, _ "dword", 0, "str", "") ;italic Global $aFont2 = DLLCall("gdi32.dll","int","CreateFont", "int", 14, "int", 0, "int", 0, "int", 0, "int", 400, _ "dword", 1, "dword", 0, "dword", 0, "dword", 0, "dword", 0, "dword", 0, "dword", 0, _ "dword", 0, "str", "") $Gui = GUICreate("Plan Decoder", 400, 350, 161, 166) GUISetIcon (@windowsdir & "system32Calc.exe",-1,$Gui) $Size = WinGetClientSize($Gui) $GoButton = GUICtrlCreateButton ("Go", 300, 100, 60, 20) GUICtrlSetBkColor(-1,0xA1AFB2) $label = GUICtrlCreateLabel("", 10, 15, 50, 15) GUICtrlSetBkColor(-1,0xA1AFB2) $labelout2 = GUICtrlCreateLabel("Cut and paste the HEX information below", 10, 5, 300, 15) GUICtrlSetBkColor(-1,0xAEBABD) $labelout = GUICtrlCreateLabel("Plan", 10, 45, 70, 15) GUICtrlSetBkColor(-1,0xAEBABD) $Input1 = GUICtrlCreateInput("", 100, 40, 250, 21) ;~ $list1 = GUICtrlCreateList("Ch # Selected",50, 75, 250, 250, BitOr($WS_BORDER, $WS_VSCROLL)) Local $list1 = GUICtrlCreateListView("", 10, 75, 300 - 20, 250, BitOR($LVS_REPORT, $LVS_SINGLESEL, $WS_BORDER), $LVS_EX_FULLROWSELECT) $hListView = ControlGetHandle($gui, '', $list1) _GUICtrlListView_InsertColumn($hListView, 0, "Ch #", 40,2) _GUICtrlListView_InsertColumn($hListView, 1, "Selected", 60, 2) _GUICtrlListView_InsertColumn($hListView, 2, "Test info", 140, 2) _GUICtrlCreateGradient($color1, $color2, 0, 0, $size[0]*1.5, $size[1]) GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") GUISetState() While 1 $msg = GUIGetMsg() Select Case $msg = $GUI_EVENT_CLOSE ExitLoop Case $msg = $GoButton ; delete anything in the listview first _GUICtrlListView_DeleteAllItems($list1) $input2process = GUICtrlRead($Input1) $inputNew = stringmid($input2process, 7, stringlen($input2process) - 8) $BinaryString = StringMid(_HexToBinaryString(StringStripWS($inputNew,8)), 1, 124) ConsoleWrite('Binary String returned: ' & $BinaryString & @CRLF & 'Binary len: ' & StringLen($BinaryString) & @CRLF) if $BinaryString = 0 Then MsgBox(0,"Error","Wrong input, try again ...") ContinueLoop EndIf $y = 1 for $i = 1 to StringLen($BinaryString) ConsoleWrite($i + 4 & " - " & StringMid($BinaryString, $i, 1) & @CRLF) Switch $i + 4 Case 5 To 9 $channelNum = ' ' & $i + 4 Case 10 To 99 $channelNum = ' ' & $i + 4 Case 100 To 999 $channelNum = ' ' & $i + 4 Case Else $channelNum = $i + 4 EndSwitch if StringMid($BinaryString, $i, 1) = 1 Then $chanSelected = " Yes" Else $chanSelected = "" EndIf $ch = "" ; check the len of the input line anfor output to the screen for the channel hex information if $y <= StringLen($inputNew) Then switch $i case 1 $ch = 'Channels 005-012: 0x' & StringLower(StringMid($inputNew, $y, 2)) case 2 $ch = 'Channels 013-020: 0x' & StringLower(StringMid($inputNew, $y, 2)) Case 3 $ch = 'Channels 021-028: 0x' & StringLower(StringMid($inputNew, $y, 2)) Case 4 $ch = 'Channels 029-036: 0x' & StringLower(StringMid($inputNew, $y, 2)) Case 5 $ch = 'Channels 037-044: 0x' & StringLower(StringMid($inputNew, $y, 2)) Case 6 $ch = 'Channels 045-052: 0x' & StringLower(StringMid($inputNew, $y, 2)) Case 7 $ch = 'Channels 053-060: 0x' & StringLower(StringMid($inputNew, $y, 2)) Case 8 $ch = 'Channels 061-068: 0x' & StringLower(StringMid($inputNew, $y, 2)) Case 9 $ch = 'Channels 069-076: 0x' & StringLower(StringMid($inputNew, $y, 2)) Case 10 $ch = 'Channels 077-084: 0x' & StringLower(StringMid($inputNew, $y, 2)) Case 11 $ch = 'Channels 085-092: 0x' & StringLower(StringMid($inputNew, $y, 2)) Case 12 $ch = 'Channels 093-100: 0x' & StringLower(StringMid($inputNew, $y, 2)) Case 13 $ch = 'Channels 101-108: 0x' & StringLower(StringMid($inputNew, $y, 2)) Case 14 $ch = 'Channels 109-116: 0x' & StringLower(StringMid($inputNew, $y, 2)) Case 15 $ch = 'Channels 117-124: 0x' & StringLower(StringMid($inputNew, $y, 2)) Case 16 to 1000 $ch = '' EndSwitch $y += 2 EndIf ConsoleWrite("I = " & $i & ' Channels variable: ' & $ch & @CRLF) _GUICtrlListView_AddItem($hListView, $i+4, $channelNum, $i-1) _GUICtrlListView_AddSubItem ($hListView, $i-1, $chanSelected, 1) _GUICtrlListView_AddSubItem ($hListView, $i-1, $ch, 2) Next EndSelect WEnd ; Conversion Code - Chart ; DECIMAL 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ; HEX 0 1 2 3 4 5 6 7 8 9 A B C D E F 10 ; BINARY 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 10000 ; --------------------- Functions ----------------------------- ; Hex To Binary Func _HexToBinaryString($hexvalue) Local $Allowed = '0123456789ABCDEF' Local $Test,$n Local $Result = '' if $hexvalue = '' then SetError(-2) Return EndIf $hexvalue = StringSplit($hexvalue,'') for $n = 1 to $hexValue[0] if not StringInStr($Allowed,$hexvalue[$n]) Then SetError(-1) return 0 EndIf Next Local $bits = "0000|0001|0010|0011|0100|0101|0110|0111|1000|1001|1010|1011|1100|1101|1110|1111" $bits = stringsplit($bits,'|') for $n = 1 to $hexvalue[0] $Result &= $bits[Dec($hexvalue[$n])+1] Next Return $Result EndFunc Func _GUICtrlCreateGradient($nStartColor, $nEndColor, $nX, $nY, $nWidth, $nHeight) Local $color1R = _ColorGetRed($nStartColor) Local $color1G = _ColorGetGreen($nStartColor) Local $color1B = _ColorGetBlue($nStartColor) Local $nStepR = (_ColorGetRed($nEndColor) - $color1R) / $nHeight Local $nStepG = (_ColorGetGreen($nEndColor) - $color1G) / $nHeight Local $nStepB = (_ColorGetBlue($nEndColor) - $color1B) / $nHeight GuiCtrlCreateGraphic($nX, $nY, $nWidth, $nHeight) For $i = 0 To $nHeight - $nY $sColor = "0x" & StringFormat("%02X%02X%02X", $color1R+$nStepR*$i, $color1G+$nStepG*$i, $color1B+$nStepB*$i) GUICtrlSetGraphic(-1, $GUI_GR_COLOR, $sColor, 0xffffff) GUICtrlSetGraphic(-1, $GUI_GR_MOVE, 0, $i) GUICtrlSetGraphic(-1, $GUI_GR_LINE, $nWidth, $i) Next EndFunc Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam) Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR $tNMHDR = DllStructCreate($tagNMHDR, $lParam) $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom")) $iIDFrom = DllStructGetData($tNMHDR, "IDFrom") $iCode = DllStructGetData($tNMHDR, "Code") Switch $hWndFrom Case $hListView Switch $iCode Case $NM_CUSTOMDRAW If Not _GUICtrlListView_GetViewDetails($hWndFrom) Then Return $GUI_RUNDEFMSG Local $tCustDraw = DllStructCreate('hwnd hwndFrom;int idFrom;int code;' & _ 'dword DrawStage;hwnd hdc;long rect[4];dword ItemSpec;int ItemState;dword Itemlparam;' & _ 'dword clrText;dword clrTextBk;int SubItem;' & _ 'dword ItemType;dword clrFace;int IconEffect;int IconPhase;int PartID;int StateID;long rectText[4];int Align', _ ;winxp or later $lParam), $iDrawStage, $iItem, $iSubitem, $hDC, $iColor1, $iColor2, $iColor3 $iDrawStage = DllStructGetData($tCustDraw, 'DrawStage') If $iDrawStage = $CDDS_PREPAINT Then Return $CDRF_NOTIFYITEMDRAW ;request custom drawing of items If $iDrawStage = $CDDS_ITEMPREPAINT Then Return $CDRF_NOTIFYSUBITEMDRAW ;request drawing each cell separately If Not BitAND($iDrawStage, $CDDS_SUBITEM) Then Return $CDRF_DODEFAULT $iItem = DllStructGetData($tCustDraw, 'ItemSpec') $iSubitem = DllStructGetData($tCustDraw, 'SubItem') ;~ Return $CDRF_NEWFONT EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>WM_NOTIFY Func RGB2BGR($iColor) Return BitAND(BitShift(String(Binary($iColor)), 8), 0xFFFFFF) EndFunc Edited November 22, 2011 by dickep Link to comment Share on other sites More sharing options...
Zedna Posted November 22, 2011 Share Posted November 22, 2011 http://www.autoitscript.com/forum/index.php?s=&showtopic=71681&view=findpost&p=524639 Resources UDF ResourcesEx UDF AutoIt Forum Search Link to comment Share on other sites More sharing options...
dickep Posted November 22, 2011 Author Share Posted November 22, 2011 I guess I forgot to put a word in the above. I need the background to be light green. Not the text. Link to comment Share on other sites More sharing options...
Zedna Posted November 22, 2011 Share Posted November 22, 2011 I guess I forgot to put a word in the above. I need the background to be light green. Not the text. ;~ DllStructSetData($tCustDraw, 'clrText', 0x5555DD) DllStructSetData($tCustDraw, 'clrTextBk', 0xFFFF00) Resources UDF ResourcesEx UDF AutoIt Forum Search Link to comment Share on other sites More sharing options...
dickep Posted November 23, 2011 Author Share Posted November 23, 2011 Thanks Zedna, but I am still confused. How do I just do the first 2 columns of the 3 IF and ONLY IF the variable $chanSelected is "Yes"? I looked over the thread you referenced, but I guess my feeble mind can't figure out how to put that to use in my app. Again, thanks and hope you can understand that I am not an expert programmer, more of an advanced novice. Link to comment Share on other sites More sharing options...
Zedna Posted November 23, 2011 Share Posted November 23, 2011 Very simple way is to use global array and store $chanSelected yes/no state for each listview item into it. Index of that array will be the same as listview item index. In WM_NOTIFY you can find appropriate yes/no state from that array based on item index and set appropriate color for subitems (of that particular item). Now I have no time to write sample script for you ... Resources UDF ResourcesEx UDF AutoIt Forum Search Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted November 23, 2011 Moderators Share Posted November 23, 2011 dickep, Add these few lines to your exiting code: $iItem = DllStructGetData($tCustDraw, 'ItemSpec') $iSubitem = DllStructGetData($tCustDraw, 'SubItem') ; ~~~~~~~~~~ NEW ~~~~~~~~~~~~~~~~ ; Does the second column say "Yes" If StringInStr(_GUICtrlListView_GetItemText($hListView, $iItem, 1), "Yes") Then ; Then colour the first 2 rows If $iSubitem <> 2 Then DllStructSetData($tCustDraw, 'clrTextBk', 0x88FF88) Else DllStructSetData($tCustDraw, 'clrTextBk', 0xFEFEFE) EndIf EndIf ; ~~~~~~~~~~ NEW ~~~~~~~~~~~~~~~~ Return $CDRF_NEWFONT That works for me. Thanks for the question - I learnt a lot about colouring ListViews today. 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 Link to comment Share on other sites More sharing options...
Zedna Posted November 23, 2011 Share Posted November 23, 2011 Add these few lines to your exiting code: You are right Melba.I didn't notice that $chanSelected is used also in column text :-) Resources UDF ResourcesEx UDF AutoIt Forum Search Link to comment Share on other sites More sharing options...
dickep Posted November 23, 2011 Author Share Posted November 23, 2011 Thanks both Zedna and Melba. Melba, your help made this work. I also learned a lot from doing this "project" Thanks hugely to all 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