Что нового

[Элементы GUI] Динамическое увеличение массива строк в ListView (?)

Автор
T

The Dream

Новичок
Сообщения
393
Репутация
3
Yashied, спасибо большое за ответ, вроде бы все просто. Я просто не думал, что есть такая возможность а именно - чтобы в ф-циях UDF (listview) можно было бы хранить свои личные параметры, мало того еще и при этом использовать для этого выделенный размер памяти.

Вроде бы все просто, пока к сожалению руки еще не доходят к реализации, но еще раз - спасибо.

Жаль, что на вопрос так и не ответили.
 
Автор
T

The Dream

Новичок
Сообщения
393
Репутация
3
Yashied, все отлично, но вот как хранить там еще и subitem - ума не приложу.

Хранить данные к целой строке - просто очень.
Но вот как хранить цвет каждой sub-ячейки, проблематично.

Пробовал вплоть то ini-файла, но это извращение.
Выход - может быть массив, но увы, у меня не получилось.
Вашу статью прочитал с удовольствием, но увы, у меня ничего не получилось.

В итоге опять вернулся к прежнему варианту.

Код:
Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)

	Local $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
	Local $hWndFrom = DllStructGetData($tNMHDR, 'hWndFrom')
	Local $iCode = DllStructGetData($tNMHDR, 'Code')
	Local $sItemText

	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)
							Local $sItemText = _GUICtrlListView_GetItemText($hWndFrom, $iItem, $iSubItem)
                            Local $iColor

                           Select
								Case StringInStr($sItemText, '[True]')
									$iColor = 0x95FF9F
									_GUICtrlListView_SetItemText($hWndFrom, $iItem, StringReplace($sItemText,'[True]',''),$iSubItem); убрали ярлык цвета
									; также здесь записываем цвет и кому он принадлежит, иными словами - индекс колонки (subitem)
								Case StringInStr($sItemText, '[False]')
									 $iColor = 0xFF9595
									 _GUICtrlListView_SetItemText($hWndFrom, $iItem, StringReplace($sItemText,'[False]',''),$iSubItem); убрали ярлык цвета
								Case StringInStr($sItemText, '[Warning]')
									$iColor = 0xFFDD95
									_GUICtrlListView_SetItemText($hWndFrom, $iItem, StringReplace($sItemText,'[Warning]',''),$iSubItem); убрали ярлык цвета
								Case Else
									$iColor = 0xFDFFB9
							EndSelect

                             ; здесь сначала считываем параметры, и потом на основе их - окрашиваем
                            DllStructSetData($tNMLVCD, 'clrTextBk', _BGRColor($iColor))

							Return $CDRF_NEWFONT
					EndSwitch

				Case $NM_CLICK ; Sent by a list-view control when the user moves the mouse over an item
					$tInfo = DllStructCreate($tagNMLISTVIEW, $lParam)
					$iSubItem = DllStructGetData($tInfo, "SubItem")
					If $iSubItem <> $iSubItemLast Then
						If $iSubItemLast = 0 Then
							$iWidth = 180
						Else
							$iWidth = 60
						EndIf
						_GUICtrlListView_SetColumnWidth($hListView, $iSubItemLast, $iWidth)
						_GUICtrlListView_SetColumnWidth($hListView, $iSubItem, 180)
						_GUICtrlListView_BeginUpdate($hListView)
						_GUICtrlListView_EndUpdate($hListView)
						$iSubItemLast = $iSubItem
					EndIf

				Case $NM_RCLICK
					$aIndex = _GUICtrlListView_GetSelectedIndices($hListView, True)
					If $aIndex[0] <> 0 Then
						_ShowMenu($hGui, $hMenu, $hListView)
					EndIf

			EndSwitch
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY


Так, как это "Стол заказов", то напишу пожелание - интересует способ, чтобы как-то хранить данные, а именно цвет sub-ячейки и способ извлекать эти данные. Черновики могу предоставить, промучался пару часов.

Спасибо..
 
Верх