Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] ListView-изменение цвета текста всей строки при выборе CHECKBOXES (http://forum.oszone.net/showthread.php?t=336336)

-TRM- 22-08-2018 14:49 2827954

ListView-изменение цвета текста всей строки при выборе CHECKBOXES
 
Приветствую ! Вопрос к профессионалам, скорее всего. Из просторов интернета накидал скрипт, но не могу понять как при выделении чекбокса изменять цвет строки.
Код:

#include-once
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>

GUICreate("Как изменить цвет текста всей строки при выборе CHECKBOXES ?", 600, 600)
Global $ListView_TEST = GUICtrlCreateListView('', 100, 270, 400, 194, $LVS_SHOWSELALWAYS, $LVS_EX_FULLROWSELECT + $LVS_EX_CHECKBOXES + $WS_EX_CLIENTEDGE)
_GUICtrlListView_InsertColumn($ListView_TEST, 0, "Наименование 1", 200)
_GUICtrlListView_InsertColumn($ListView_TEST, 2, "Наименование 2", 200)
_GUICtrlListView_AddItem($ListView_TEST, 'Наименование 1-01', 0)
_GUICtrlListView_AddSubItem($ListView_TEST, 0, "Наименование 2-01", 1)
_GUICtrlListView_AddItem($ListView_TEST, 'Наименование 1-02', 1)
_GUICtrlListView_AddSubItem($ListView_TEST, 1, "Наименование 2-02", 1)
_GUICtrlListView_AddItem($ListView_TEST, 'Наименование 1-03', 2)
_GUICtrlListView_AddSubItem($ListView_TEST, 2, "Наименование 2-03", 1)
_GUICtrlListView_AddItem($ListView_TEST, 'Наименование 1-04', 3)
_GUICtrlListView_AddSubItem($ListView_TEST, 3, "Наименование 2-04", 1)

GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')
GUISetState()
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
GUIDelete()

Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
        Local $tNMHDR, $iIDFrom, $iCode
        $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
        $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
        $iCode = DllStructGetData($tNMHDR, "Code")
        Switch $iIDFrom
                Case $ListView_TEST ; It is our ListView
                        Switch $iCode
                                Case $NM_CUSTOMDRAW
                                        Local $tNMLVCUSTOMDRAW = DllStructCreate($tagNMLVCUSTOMDRAW, $lParam)
                                        Local $dwDrawStage = DllStructGetData($tNMLVCUSTOMDRAW, "dwDrawStage")

                                        Switch $dwDrawStage
                                                Case $CDDS_PREPAINT ; Before the paint cycle begins
                                                        Return $CDRF_NOTIFYITEMDRAW
                                                Case $CDDS_ITEMPREPAINT ; Before painting an item
                                                        Return $CDRF_NOTIFYSUBITEMDRAW ; Notify the parent window of any SUBITEM-related drawing operations

                                                Case BitOR($CDDS_ITEMPREPAINT, $CDDS_SUBITEM) ; Before painting a subitem
                                                        Local $iItemParam = DllStructGetData($tNMLVCUSTOMDRAW, "lItemlParam") ; Item param (item control ID)
                                                        Local $iSubItem = DllStructGetData($tNMLVCUSTOMDRAW, "iSubItem") ; Subitem index

                                                        DllStructSetData($tNMLVCUSTOMDRAW, "ClrText", 0xFF00FF) ; Backcolor white
                                        EndSwitch

                                Case $NM_CLICK ; An item was clicked
                                        $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
                                        $iIndex = DllStructGetData($tInfo, "Index")
                                        $SubItem = DllStructGetData($tInfo, "SubItem")
                                        ;        $iItemParam = DllStructGetData( $tInfo, "lItemlParam" )
                                        If $SubItem = 0 Then
                                                $hListViewRead = _GUICtrlListView_GetItemTextArray($ListView_TEST, $iIndex)
                                                ;        MsgBox_Info($hListViewRead[2] & @CRLF & _GUICtrlListView_GetItemChecked($ListView_TEST, $iIndex))
                                                ;Перевёртышь
                                                If _GUICtrlListView_GetItemChecked($ListView_TEST, $iIndex) = False Then
                                                        ;Выбрано
                                                Else
                                                        ;Не выбрано
                                                EndIf
                                        EndIf
                        EndSwitch
        EndSwitch
EndFunc  ;==>WM_NOTIFY


Iska 22-08-2018 15:02 2827957

-TRM-, такое лучше сразу на Русское сообщество AutoIt помещать, здесь они если и появляются, то очень редко.

Creat0R 23-08-2018 19:18 2828192

Код:

Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
        Local $tNMHDR, $iIDFrom, $iCode
       
        Local $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
        Local $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
        Local $iCode = DllStructGetData($tNMHDR, "Code")
       
        Switch $iIDFrom
                Case $ListView_TEST ; It is our ListView
                        Switch $iCode
                                Case $NM_CUSTOMDRAW
                                        Local $tNMLVCUSTOMDRAW = DllStructCreate($tagNMLVCUSTOMDRAW, $lParam)
                                        Local $dwDrawStage = DllStructGetData($tNMLVCUSTOMDRAW, "dwDrawStage")
                                       
                                        Switch $dwDrawStage
                                                Case $CDDS_PREPAINT ; Before the paint cycle begins
                                                        Return $CDRF_NOTIFYITEMDRAW
                                                Case $CDDS_ITEMPREPAINT ; Before painting an item
                                                        Return $CDRF_NOTIFYSUBITEMDRAW ; Notify the parent window of any SUBITEM-related drawing operations
                                                Case BitOR($CDDS_ITEMPREPAINT, $CDDS_SUBITEM) ; Before painting a subitem
                                                        Local $iIndex = DllStructGetData($tNMLVCUSTOMDRAW, "dwItemSpec")
                                                       
                                                        If _GUICtrlListView_GetItemChecked($ListView_TEST, $iIndex) Then
                                                                DllStructSetData($tNMLVCUSTOMDRAW, "ClrText", 0xFF00FF)
                                                        Else
                                                                DllStructSetData($tNMLVCUSTOMDRAW, "ClrText", 0xFF0000)
                                                        EndIf
                                        EndSwitch
                        EndSwitch
        EndSwitch
EndFunc



Время: 09:27.

Время: 09:27.
© OSzone.net 2001-