Listview怎么在使用_AddItem下面改变背景颜色(已解决)
本帖最后由 sour 于 2011-11-23 21:19 编辑我搜索半天只有这个帖子能在这个情况下改变颜色
http://www.autoitx.com/forum.php?mod=viewthread&tid=15686&highlight=listview%283%29
但是怎么样简单的改变,比如符合条件的改变颜色不符合的不改变...
这个帖子里面只能指定行改变....
如果用GUICtrlCreateListViewItem可以很方便的改变颜色,但是用这个方式如果item过多
下一个listview就会出错,读取不到选择项,我测试了很久才发现的。
最后放弃了这个方法,太复杂麻烦了,而且创建的时候右键菜单都要重新写 本帖最后由 netegg 于 2011-11-23 14:13 编辑
那个只是告诉你怎么改,不是告诉你怎么用,逻辑问题还是自己想想吧 if subitem你改成switch $subitem试试看
netegg 发表于 2011-11-23 14:11 http://www.autoitx.com/images/common/back.gif
谢谢原作者的回复
我看不懂的地方是怎么把选择项目传递到这个样式中
比如里面有个项目是1 我需要1的时候要变成红色,但是这个1怎么传递到WM_NOTIFY里面,我看不大明白.... 是项还是子项,背景还是内容 是项还是子项,背景还是内容
netegg 发表于 2011-11-23 14:16 http://www.autoitx.com/images/common/back.gif
整行的背景,项和子项一起改 条件是子项的内容作为条件,不过通过子项找项也挺容易写,我不知道怎么把他写在里面
如果有个例子是内容是1的一个颜色,内容是2的是一个颜色我就能明白了 本帖最后由 netegg 于 2011-11-23 14:30 编辑
看这个帖子,那个不适合这个问题
http://www.autoitx.com/thread-15521-1-1.html
条件好好想想,无非是确定$item的事 这个帖子我也看了
颜色选择是用_GUICtrlListView_GetItemChecked这个来判断的,如果checked然后变颜色
如果硬要套上去,我只有再加列,把满足条件的checked变成ture..这个好像绕的有点远
我再看看怎么改这个例子的条件把那个筛选出来,谢谢 我原来的代码是这样的
其实很简单的,但是如果用_GUICtrlListView_AddItem就不知道该如何做了
$item_PM = GUICtrlCreateListViewItem($aRow & "|" & $pmdate & "|" & $aRow & "|" & $list_PM & "|" & $list_PM & "±" & $list_PM & "|" & $list_PM & "|" & $list_PM & "|" & $list_PM & "|" & $list_PM & "|" & $list_PM & "|" & $list_PM & "|" & $list_PM & "|" & $list_PM & "|" & $list_PM & "|" & $list_PM & "|" & $aRow, $ListView3)
Select
Case $aRow="on-going"
GUICtrlSetBkColor($item_PM, 0XFFBBFF)
Case $aRow="fail"
GUICtrlSetBkColor($item_PM, 0XFF4500)
Case $aRow="close"
GUICtrlSetBkColor($item_PM, 0x38F709)
EndSelect 只好这样凑合着用了#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
#include <FontConstants.au3>
#include <WinAPI.au3>
Global Const $CDDS_SUBITEMPREPAINT = BitOR($CDDS_ITEM, $CDDS_SUBITEM, $CDDS_PREPAINT)
Global $Font1 = _WinAPI_CreateFont(14, 0, 0, 0, $FW_BOLD)
Global $Font2 = _WinAPI_CreateFont(14, 0, 0, 0, $FW_NORMAL, False, False, False, $DEFAULT_CHARSET, $OUT_DEFAULT_PRECIS, _
$CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, 0, "MS Sans Serif")
$hGUI = GUICreate("Test", 300, 200)
$hListView = _GUICtrlListView_Create($hGUI, "Items|SubItems|", 10, 10, 280, 180, $LVS_REPORT, $WS_EX_CLIENTEDGE)
_GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_INFOTIP))
For $i = 1 To 10
_GUICtrlListView_AddItem($hListView, "Item" & $i)
_GUICtrlListView_AddSubItem($hListView, $i - 1, "SubItem" & $i, 1)
_GUICtrlListView_AddSubItem($hListView, $i - 1, "SubItem" & $i, 2)
Next
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUISetState()
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
_WinAPI_DeleteObject($Font1)
_WinAPI_DeleteObject($Font2)
Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)
Local $tNMHDR, $hWndFrom, $iCode
$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
$hWndFrom = DllStructGetData($tNMHDR, "hWndFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hListView
Switch $iCode
Case $NM_CUSTOMDRAW
Local $tCustDraw = DllStructCreate($tagNMLVCUSTOMDRAW, $lParam)
Local $iDrawStage = DllStructGetData($tCustDraw, "dwDrawStage")
If $iDrawStage = $CDDS_PREPAINT Then Return $CDRF_NOTIFYITEMDRAW
If $iDrawStage = $CDDS_ITEMPREPAINT Then Return $CDRF_NOTIFYSUBITEMDRAW
Local $iSubItem = DllStructGetData($tCustDraw, "iSubItem")
Local $iItem = DllStructGetData($tCustDraw, "dwItemSpec")
Local $iColor, $hDC
$iI = _GUICtrlListView_FindText($hListView, "item4")
Switch $iItem
Case $iI
$hDC = DllStructGetData($tCustDraw, "hdc")
If $iSubItem = 0 Then ;设置首列, 即项目
$iColor = RGB2BGR(0xFF0000)
_WinAPI_SelectObject($hDC, $Font1)
DllStructSetData($tCustDraw, "clrText", $iColor)
ElseIf $iSubItem = 1 Then ;设置子项, 即列索引大于0时
$iColor = RGB2BGR(0x000000)
_WinAPI_SelectObject($hDC, $Font2);设置用于设备场景内文本的字体
DllStructSetData($tCustDraw, "clrText", $iColor);设置文本色
DllStructSetData($tCustDraw, "clrTextBk", RGB2BGR(0xFFFF80));设置文本背景色
ElseIf $iSubItem = 2 Then
$iColor = RGB2BGR(0x008080)
_WinAPI_SelectObject($hDC, $Font1)
DllStructSetData($tCustDraw, "clrText", $iColor)
DllStructSetData($tCustDraw, "clrTextBk", RGB2BGR(0xFFFFFF))
EndIf
Return $CDRF_NEWFONT
EndSwitch
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
Func RGB2BGR($iColor)
Return BitAND(BitShift(String(Binary($iColor)), 8), 0xFFFFFF)
EndFunc ;==>RGB2BGR() 成功倒是成功了,不过速度非常缓慢,显示一行需要1s时间 本帖最后由 netegg 于 2011-11-23 15:26 编辑
字体设置去掉,子项去掉,只设置项目,另外,是什么引起的速度慢,不一定是颜色设置的问题,有可能是查找匹配子项的事情 我最后还是放弃这样的方式了 最近也用到 listview,先关注此帖.. 多搜索就知道啦,我以前也是这么写的哈
页:
[1]
2