Página 1 de 1

Item con color de texto individualemente

Publicado: 16 Oct 2014, 22:34
por yasmany
BUenas con todos, he estado intentando poner color por lo menos a un item del listView pero hasta ahora no lo he logrado.
Como podria hacerlo pero sin la necesidad de declarar una variable por item. ya que en el software real hace un analisis y son muchos los items listados.
ubicando items con GuiCtrlCreateListViewItem el ListView parpadea un poco aunque le ponga el estilo extendido $LVS_EX_DOUBLEBUFFER por eso utilizao el AddItem con esto ya no parpadea.
Trato de ubicar un color diferente por item... espero de su ayuda.

Podria alguien ayudarme a solventar este problem.

Código: Seleccionar todo

#include <ColorConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>

Global $lista
Example()

Func Example()

	GUICreate("ListView Set Text Color", 400, 300)
	$lista = GUICtrlCreateListView("col01|col02|col03", 2, 2, 394, 268)
	_GUICtrlListView_SetExtendedListViewStyle($lista, BitOR($LVS_EX_DOUBLEBUFFER, $LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES, $LVS_EX_BORDERSELECT, $LVS_REPORT))
	$btnPuColor = GUICtrlCreateButton("Put Color", 340, 272)
	_GUICtrlListView_SetColumnWidth($lista, 0, 100)
	GUISetState(@SW_SHOW)

	; Add items
	_GUICtrlListView_BeginUpdate($lista)
	For $iI = 1 To 10
		_GUICtrlListView_AddItem($lista, "Item " & $iI)
	Next
	_GUICtrlListView_EndUpdate($lista)

	While 1
		$msg = GUIGetMsg()
		If $msg = $GUI_EVENT_CLOSE Then ExitLoop
		If $msg = $btnPuColor Then _ponerColorItems()
	WEnd
	GUIDelete()
EndFunc   ;==>Example

Func _ponerColorItems()
_GUICtrlListView_SetTextBkColor($lista, $CLR_MONEYGREEN)
EndFunc
Saludos... :smt024

Re: Item con color de texto individualemente

Publicado: 17 Oct 2014, 14:38
por Dany
dices si le das al check box del item que cambie de color?

Saludos

Re: Item con color de texto individualemente

Publicado: 17 Oct 2014, 15:30
por Dany
si es eso, puedes hacer algo asi:

Código: Seleccionar todo

#include <ColorConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>


Global $lista, $hListView, $State



Example()

Func Example()

	GUICreate("ListView Set Text Color", 400, 300)
	$lista = GUICtrlCreateListView("col01|col02|col03", 2, 2, 394, 268)
	$hListView = GUICtrlGetHandle(-1)
	_GUICtrlListView_SetExtendedListViewStyle($lista, BitOR($LVS_EX_DOUBLEBUFFER, $LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES, $LVS_EX_BORDERSELECT, $LVS_REPORT))
	_GUICtrlListView_SetColumnWidth($lista, 0, 130)
	_GUICtrlListView_SetColumnWidth($lista, 1, 130)
	_GUICtrlListView_SetColumnWidth($lista, 2, 130)

	GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
	GUISetState(@SW_SHOW)

	; Add items
	_GUICtrlListView_BeginUpdate($lista)
	For $iI = 1 To 10
		_GUICtrlListView_AddItem($lista, "Item " & $iI)
	Next
	_GUICtrlListView_EndUpdate($lista)

	While 1
		$msg = GUIGetMsg()
		If $msg = $GUI_EVENT_CLOSE Then ExitLoop
;~       If $msg = $btnPuColor Then _ponerColorItems()
	WEnd
	GUIDelete()
EndFunc   ;==>Example



Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)

	Local $tNMHDR, $hWndFrom, $IDFrom, $Code, $tNMLISTVIEW, $iItem
	$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
	$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
	$Code = DllStructGetData($tNMHDR, "Code")

	Switch $hWndFrom
		Case $hListView
			Switch $Code

				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
					If _GUICtrlListView_GetItemChecked($hListView, $iItem) Then
						$iColor = RGB2BGR(0xFF0000)
						DllStructSetData($tCustDraw, "clrTextBk", $iColor)
						Return $CDRF_NEWFONT
					EndIf

			EndSwitch
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY

Func RGB2BGR($iColor)
	Return BitAND(BitShift(String(Binary($iColor)), 8), 0xFFFFFF)
EndFunc   ;==>RGB2BGR
Saludos

Re: Item con color de texto individualemente

Publicado: 17 Oct 2014, 22:28
por yasmany
disculpa no haber respondido pronto me encontraba de viaje...
es perfecto lo que tu me acabas de ayudar me surgieron algunas ideas más, pero en si me refería a aplicar un color al texto del item no a la seleccion idependientemente de que esté chekeado o no con solo pulsar el boton de poner color.

mil gracias por tu ayuda, espero se pueda. :smt024

Re: Item con color de texto individualemente

Publicado: 17 Oct 2014, 22:46
por yasmany
YA LE ENTENDÍ UN POQUITIN EL CODE :smt026 ... SOLO HAY Q CAMBIAR ESTO
DllStructSetData($tCustDraw, "clrTextBk", $iColor) por esto DllStructSetData($tCustDraw, "clrText", $iColor)

Mil Gracias Dany.... :smt024

Re: Item con color de texto individualemente

Publicado: 17 Oct 2014, 23:00
por yasmany
mejor me explico... disculpame Dany
querría algo como QUE cuando haces clic en el boton Poner Color, se ponga color solo al texto de los items chekeados.
:smt024

Re: Item con color de texto individualemente

Publicado: 17 Oct 2014, 23:44
por Dany
luego te paso un ejemplo :)

saludos

Re: Item con color de texto individualemente

Publicado: 18 Oct 2014, 00:21
por yasmany
Gracias Dany... esperaré, ando intentando hasta mientras :smt001
Saludos... :smt024