[已解决]如何讓 listview 裡面偵測到 AAA 就讓所有 AAA 顯示為紅色?
本帖最后由 ipmitool 于 2016-10-16 10:41 编辑如何讓 listview 裡面偵測到 AAA 就讓所有 AAA 顯示為紅色?
回复 1# ipmitool
http://www.autoitx.com/forum.php?mod=viewthread&tid=15521&highlight=%2Blistview%2B
http://www.autoitx.com/search.php?searchid=91&orderby=lastpost&ascdesc=desc&searchsubmit=yes 回复 1# ipmitool
是这样就比较简单
如果要显示Listview单例就复杂多了 回复 3# chzj589
可能是要这种效果
回复 4# chzj589
您好, 我想要全部show出來, 然後AAA是紅色這樣可以嗎? 可以跟您要code嗎? 謝謝喔~ 回复 5# ipmitool
只能这种效果
详见代码:
回复 4# chzj589
哪个例子{:1_305:} 回复 7# chzj589
要怎麼改才能指定關鍵字為紅色就好了啊……好難啊… 回复 8# ipmitool
我知道 你要的 ................. 你不想要全部同一行都變色你只需要有問題的變色對吧
解決方法 就是我上次給你的虛擬 LISTVIEW 可以做到 本帖最后由 chzj589 于 2016-10-15 11:18 编辑
回复 8# ipmitool
你要的是4楼的第2张图?不需背景?
回复 8# ipmitool
回复 11# kk_lee69
我只能让整列改变颜色
兄弟,这是如何实现的。请赐教! 本帖最后由 kk_lee69 于 2016-10-15 17:35 编辑
回复 12# chzj589
你的方法跟我的方法不一樣 但是觀念是一樣的
我下午為了舉這個例子才解決出來
重點邏輯是你必須要讓整行 先變一次 顏色 所變的顏色 是 有變等於沒變DllStructSetData($tCustDraw, 'clrTextBk',0xFFFFFF);BGR格式顏色值 背景(等於無) 設置這個 可讓顏色恢復正常
DllStructSetData($tCustDraw, 'clrText',0x000000);BGR格式顏色值 文字(等於黑) 設置這個 可讓顏色恢復正常
然後 你在 判斷要變顏色的時候 才不會整行受到影響
之前的狀況是通常 你在某個位置變了顏色後面 整個受到影響
要在前面加哪兩句 才不會受到影響 If $cSub = $nCLID Then ;設置首列, 即專案
$iColor = RGB2BGR(0xFF0000)
;_WinAPI_SelectObject($hDC, $Font1)
DllStructSetData($tCustDraw, "clrText", $iColor)
DllStructSetData($tCustDraw, "clrTextBk", RGB2BGR(0xFFFF80));設置文本背景色
EndIf
位置放哪 你要在琢磨一下 因為你的方法跟我的不一樣所以我無法告訴你應該放哪個位置
但是我覺得邏輯是這樣的
等同你變了顏色後 應該要再把他還原回來 回复 13# kk_lee69
谢谢!我再琢磨琢磨。
子项目行可以设置不同颜色。
列还不能设置不同颜色 本帖最后由 tubaba 于 2016-10-15 21:19 编辑
回复 14# chzj589 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' & _
';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;int Align', $ilParam)
Local $iDrawStage, $iItem, $iSubItem, $hDC, $iColor
$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')
If StringRegExp($RelativeEncryptCol, '(?:\A|\D)(' & $iSubItem & ')(?:\D|\z)') Then
Local $iColor = RGB2BGR(0x0000FF)
Else
Local $iColor = RGB2BGR(0x000000)
EndIf
DllStructSetData($tCustDraw, 'clrText', $iColor)
Return $CDRF_NEWFONT$iItem = DllStructGetData($tCustDraw, 'ItemSpec')
$iSubItem = DllStructGetData($tCustDraw, 'SubItem')
这两个等同于listview某项位置,如果使用虚拟列表,在array中$iItem是第一维,$iSubItem是第二维,搜索array,只要附合要求就变色.应该可以一次完成,设置结构中的 clrTextBk可以变更背景色