Версия AutoIt:
3.3.8.1
Описание проблемы:
Есть исходный код в котором цвет, а также фон "области" в списке ListView задается с помощью специального массива. Проблема заключается в том что из-за отсутствия должных знаний я к сожалению так и не смог понять как мне динамически расширять массив в зависимости от количества строк. Надеюсь я доступно описал проблему
Исходный код:
Примечания:
Это пример (код) уважаемого мной модератора Y's-a (просто не помню как точно пишется его ник)
3.3.8.1
Описание проблемы:
Есть исходный код в котором цвет, а также фон "области" в списке ListView задается с помощью специального массива. Проблема заключается в том что из-за отсутствия должных знаний я к сожалению так и не смог понять как мне динамически расширять массив в зависимости от количества строк. Надеюсь я доступно описал проблему
Исходный код:
Код:
#Include <GUIConstantsEx.au3>
#Include <GUIListView.au3>
#Include <WindowsConstants.au3>
Dim $ColorData[5][2][2] ; если размер заранее не известен?
For $i = 0 To UBound($ColorData) - 1
For $j = 0 To UBound($ColorData, 2) - 1
$ColorData[$i][$j][0] = 0
$ColorData[$i][$j][1] = 0xFFFFFF
Next
Next
$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_DOUBLEBUFFER, $LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $WS_EX_CLIENTEDGE))
_GUICtrlListView_AddItem($hListView, 'Item')
_GUICtrlListView_SetItemColors($hListView, 0, 0, 0)
_GUICtrlListView_AddSubItem($hListView, 0, 'Error', 1)
_GUICtrlListView_SetItemColors($hListView, 0, 1, 0, 0x0000FF)
_GUICtrlListView_AddItem($hListView, 'Error2')
_GUICtrlListView_SetItemColors($hListView, 1, 0, 0, 0x0000FF)
_GUICtrlListView_AddItem($hListView, 'Item')
_GUICtrlListView_SetItemColors($hListView, 2, 0, 0, 0xFFFFFF)
_GUICtrlListView_AddItem($hListView, 'Item')
_GUICtrlListView_SetItemColors($hListView, 3, 0, 0, 0xFFFFFF)
_GUICtrlListView_AddItem($hListView, 'Item666')
_GUICtrlListView_SetItemColors($hListView, 4, 0, 0, 0x0000FF)
GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')
GUISetState()
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
Func _GUICtrlListView_SetItemColors($hWnd, $iItem, $iSubItem, $iColor, $iBkColor = 0xFFFFFF, $fRedraw = False)
If ($iItem < 0) Or ($iItem > UBound($ColorData) - 1) Then
Return 0
EndIf
If ($iSubItem < 0) Or ($iSubItem > UBound($ColorData, 2) - 1) Then
Return 0
EndIf
$ColorData[$iItem][$iSubItem][0] = $iColor
$ColorData[$iItem][$iSubItem][1] = $iBkColor
If $fRedraw Then
_GUICtrlListView_RedrawItems($hWnd, $iItem, $iItem)
EndIf
Return 1
EndFunc ;==>_GUICtrlListView_SetItemColors
Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
Local $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
Local $hWndFrom = DllStructGetData($tNMHDR, 'hWndFrom')
Local $iCode = DllStructGetData($tNMHDR, 'Code')
Switch $hWndFrom
Case $hListView
Switch $iCode
Case $NM_CUSTOMDRAW
Local $tNMLVCD = DllStructCreate($tagNMLVCUSTOMDRAW, $lParam)
Local $iDrawStage = DllStructGetData($tNMLVCD, 'dwDrawStage')
Local $iItem = DllStructGetData($tNMLVCD, 'dwItemSpec')
Local $iSubItem = DllStructGetData($tNMLVCD, 'iSubItem')
Switch $iDrawStage
Case $CDDS_PREPAINT
Return $CDRF_NOTIFYITEMDRAW
Case $CDDS_ITEMPREPAINT
Return $CDRF_NOTIFYSUBITEMDRAW
Case BitOR($CDDS_ITEMPREPAINT, $CDDS_SUBITEM)
DllStructSetData($tNMLVCD, 'clrTextBk', $ColorData[$iItem][$iSubItem][1])
DllStructSetData($tNMLVCD, 'clrText', $ColorData[$iItem][$iSubItem][0])
Return $CDRF_NEWFONT
EndSwitch
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
Примечания:
Это пример (код) уважаемого мной модератора Y's-a (просто не помню как точно пишется его ник)