找回密码
 加入
搜索
楼主: qsy666888

[AU3基础] 想改变ListView表行的背景色和文本颜色,请大大们如何改?(已解决)

 火.. [复制链接]
发表于 2018-5-16 23:45:01 | 显示全部楼层
回复 14# qsy666888



請看清楚

人家原始的是 select rowid,*

你使用的試 select *

根本沒有 讀取 rowid  要如何有 rowid ??

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2018-5-17 00:13:21 | 显示全部楼层
回复 16# kk_lee69

谢谢K大,弄好了,我确实没有注意到这个细节,不好意思
发表于 2018-5-18 09:44:34 | 显示全部楼层
回复 17# qsy666888
<listview指定欄位無法更改底色顏色>与8楼的效果图的思路你都不理解?
在<listview指定欄位無法更改底色顏色>的例子里,GUICtrlCreateListView的字体与背景色的生成关健字是,
<重要、紧级、一般、普通>,根据关健字去判断。
你的例子需要生成关健字是:
<不及格、及格、良、优>
<60=不及格
<75=及格
<85=良
>85=优
添加列表控件:Global $ListView2 = GUICtrlCreateListView("序号|姓名|语文|分数评定", 8, 8, 458, 358)
在读取列表 $ListView2显示于 $ListView2列表
读取$ListView2列表的‘分数评定’列判断关健字后,生成字体与背景色

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2018-5-18 09:58:10 | 显示全部楼层
回复 18# chzj589

是哈 ,最后我明白了,从数据库把数据写入到listview表格里,第一种输入到listview表格里方法,不显示设置条件好的颜色,换成第二种,就是你发的案例,可以实现了,不过后来我发现一个小小的问题,如果listview表格里设置了图标,首列的图标会丢失
发表于 2018-5-18 10:47:47 | 显示全部楼层
回复 19# qsy666888

使用 IMAGE LIST
 楼主| 发表于 2018-5-18 10:48:48 | 显示全部楼层
回复 18# chzj589
假如说我需要在首列加入图标,换底色就会把图标丢失

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2018-5-18 11:02:51 | 显示全部楼层
回复 21# qsy666888

先設完底色 在上一次圖標
发表于 2018-5-18 11:30:20 | 显示全部楼层
本帖最后由 kk_lee69 于 2018-5-18 11:32 编辑

回复 21# qsy666888

其實我覺得你的方式 不好   試一下我下面的方式吧

#Include <GuiListView.au3>
#include <SQLite.au3>
#include <SQLite.dll.au3>
#Include <GuiListView.au3>
#Include <GuiTreeView.au3>
#include <GuiConstantsEx.au3>
#include <GuiImageList.au3>
#include <WindowsConstants.au3>


Global $hQuery
_SQLite_Startup ()
$SQLite_Data_Path =@ScriptDir&"\SQLite.db"
$Tablekj = "kaojuan"
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("從資料庫裡獲取姓名示例", 478, 412, 481, 210)
GUISetFont(11, 400, 0, "宋體")
Global $ListView1 = GUICtrlCreateListView("序號|姓名|語文", 8, 8, 458, 358)
$hImage = _GUIImageList_Create(20, 20, 5, 3)
          _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll",1);50
         ; _GUIImageList_AddIcon($hImage,   @ScriptDir & "\icon\101.ico")
         _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll",2)
         _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll",3);50

_GUICtrlListView_SetImageList($ListView1, $hImage, 1)

KC_lvdraw()
Global $Button1 = GUICtrlCreateButton("查看分數", 293, 376, 75, 25)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")


GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case -3
                        Exit
              ;  Case $Button1
             ; msgbox(0,"70多分者", _get_N(7, 1))
                      ;    msgbox(0,"分數個位數是5者", _get_N(5, 0))        
        EndSwitch
WEnd

Func _get_N($iNum, $iCode = 1)
        Local $aRow, $hQuery, $sMsg = ''
        Local $sQuery
        If $iCode Then 
            $sQuery = "'" & $iNum & "%'"
        Else
                $sQuery = "'%" & $iNum & "'"
        EndIf
        _SQLite_Open ($SQLite_Data_Path)
        _SQLite_Query(-1, "SELECT * FROM kaojuan WHERE 分數 LIKE " & $sQuery & ";", $hQuery)
        While _SQLite_FetchData($hQuery, $aRow) = $sqlite_ok
                $sMsg &= $aRow[0] & @TAB & $aRow[1] & @CRLF
        WEnd
        Return $sMsg 
EndFunc        

Func KC_lvdraw() 
        _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($ListView1))
        Global $Irval, $Aresult, $Irows, $Icolumns,$sQuery,$aRowa,$a = '',$b = '',$c = ''


        $Irval = _SQLite_GetTable2d( _SQLite_Open ($SQLite_Data_Path), "select rowid,* from kaojuan;", $Aresult, $Irows, $Icolumns)
                ;GUICtrlSetColor($ListView1, 0x000000)
                        
        _ArrayDelete($aresult, 0)
       _GUICtrlListView_AddArray($ListView1, $Aresult)
           _SQLite_QueryFinalize($hQuery)
         
           
EndFunc

Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo
;~  Local $tBuffer
    $hWndListView = $ListView1
    If Not IsHWnd($ListView1) Then $hWndListView = GUICtrlGetHandle($ListView1)

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
        Case $hWndListView
            Switch $iCode
                                Case $NM_CUSTOMDRAW  ;顏色的處理部份 需搭配  上面繪圖的處理
                                        Local $iDrawStage, $iIndex, $iSub,$iColor, $hDC
                                        Local $tCustDraw = DllStructCreate($tagNMLVCUSTOMDRAW, $ilParam)
                                        Local $iDrawStage = DllStructGetData($tCustDraw, "dwDrawStage")
                                        If $iDrawStage = $CDDS_PREPAINT Then Return $CDRF_NOTIFYITEMDRAW
                                        If $iDrawStage = $CDDS_ITEMPREPAINT Then Return $CDRF_NOTIFYSUBITEMDRAW
                                        If Not BitAND($iDrawStage, $CDDS_SUBITEM) Then Return $CDRF_DODEFAULT
                                        Local $iIndex = DllStructGetData($tCustDraw, "dwItemSpec")
                                        Local $iSub = DllStructGetData($tCustDraw, "iSubItem")
                                        ;$CHKIDSerch=$iIndex
                                        ;$VLSIDSerch=_GUICtrlListView_GetSelectedIndices($VListViewSerch,True)
                                        ;這一段處理變色 跟判斷
                                        IF   _GUICtrlListView_GetItemText($hWndListView,$iIndex,2) <60   Then         
                                                DllStructSetData($tCustDraw, "clrText", 0x55FF55)
                                                DllStructSetData($tCustDraw, "clrTextBk", 0x80FFFF)
                                        Else
                                                
                                        EndIf
                                        
                                        Return $CDRF_NEWFONT
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2018-5-18 11:34:55 | 显示全部楼层
回复 23# kk_lee69
能不能达到这种效果,我这是ps的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2018-5-18 11:36:05 | 显示全部楼层
回复 24# qsy666888

你的圖標不放前面嗎
 楼主| 发表于 2018-5-18 11:41:56 | 显示全部楼层
回复 25# kk_lee69
因为加后面的图标,前面就自动加图标了,如果再加底色界面就更难看了,影响美观,如果前面的图标干脆去掉,保留后面设置的图标,就更加完美了
 楼主| 发表于 2018-5-18 11:47:33 | 显示全部楼层
本帖最后由 qsy666888 于 2018-5-18 11:48 编辑

回复 25# kk_lee69

你这好些,你加了WM_NOTIFY段程序,我是直后面判断。
While _SQLite_FetchData($hQuery, $aRowa) = $SQLITE_OK
                        $a = $aRowa[0]
                                $b = $aRowa[1]
                                $c = $aRowa[2]
                            Local $Item = GUICtrlCreateListViewItem($a&'|'&$b&'|'&$c, $ListView1) 
                            If $c > 60 And $c < 70 Then
                                GUICtrlSetColor(_GUICtrlListView_GetItemParam($ListView1, $a), '0xFF00FF');获取列表视图项目的应用程序特定值 
                    GUICtrlSetBkColor(_GUICtrlListView_GetItemParam($ListView1, $a), '0x66CD00')
                        EndIf 
        
                    WEnd
发表于 2018-5-18 11:56:33 | 显示全部楼层
回复 26# qsy666888

可以前面沒有圖標  只有後面有圖標
发表于 2018-5-18 11:58:51 | 显示全部楼层
回复 27# qsy666888

你沒注意到邏輯與法的不同
你使用
                                GUICtrlSetColor(_GUICtrlListView_GetItemParam($ListView1, $a), '0xFF00FF');获取列表视图项目的应用程序特定值


                    GUICtrlSetBkColor(_GUICtrlListView_GetItemParam($ListView1, $a), '0x66CD00')

影響的是 整個控件 之類

但是我 用那    WM_NOTIFY 處理 只有影響  listview 本身的著色問題

所以我的圖標可以顯示  而你的方法 受到了影響
 楼主| 发表于 2018-5-18 12:05:53 | 显示全部楼层
回复 29# kk_lee69

是的,难点在大佬面前迎刃而解了,现在只要在后面加图标,前面就自动加图标了,然而想前面用不着图标,只保留后面的图标
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-24 02:14 , Processed in 0.255451 second(s), 14 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表