COLORIR LISTVIEW

JORGESALES 23/11/2016 23:17:10
#469188
Pessoal boa noite, em primeiro lugar gostaria de me desculpar pelo longo tempo ausente, mas
infelizmente foi por motivo de saúde (mas ainda não foi dessa vez...).
Gostaria da ajuda de vocês para, se for possível, modificar um código que dá cor as linhas
da listview.
Public Sub ColorListviewRow(LV As ListView, RowNbr As Long, RowColor As OLE_COLOR) [ô]Colorir listview
Dim itmX As ListItem
Dim lvSI As ListSubItem
Dim intIndex As Integer
On Error GoTo ErrorRoutine
Set itmX = LV.ListItems(RowNbr)
itmX.ForeColor = RowColor
For intIndex = 1 To LV.ColumnHeaders.Count - 1
Set lvSI = itmX.ListSubItems(intIndex)
lvSI.ForeColor = RowColor
Next
Set itmX = Nothing
Set lvSI = Nothing
Exit Sub
ErrorRoutine:
Exit Sub
End Sub

Para chamar a função:
    Dim f As Integer
Dim coluna As String
With lstAlterar.ListItems
For f = 1 To .Count
coluna = lstAlterar.ListItems(f).ListSubItems(14).Text
Select Case coluna
Case [Ô]S[Ô]: ColorListviewRow lstAlterar, .Item(f).Index, &H8000&
Case [Ô]N[Ô]: ColorListviewRow lstAlterar, .Item(f).Index, vbBlue
End Select
Next f
End With

Minha intenção seria colorir os campos no momento do preenchimento (para evitar percorrer toda listview)
mas eu não sei como pegar o item (linha) atual, minha ideia seria mais ou menos essa:
   rs.Open [Ô]Select * from tbClientes[Ô],db,3,3
do until rs.EOF
Set Item = lstAlterar.ListItems.Add(, , [Ô][Ô] & [Ô] [Ô] & rs!Nome)
With item
.SubItems(1) = [Ô][Ô] & rs!Codigo
.SubItems(2) = [Ô][Ô] & rs!Celular
.SubItems(3) = [Ô][Ô] & rs!Telefone
.SubItems(14) = [Ô][Ô] & rs!sit
If rs!sit = [Ô]S[Ô] Then ColorListviewRow lstAlterar, lstAlterar.ListItems.Item(Item).Index, &H8000&
If rs!sit = [Ô]N[Ô] Then ColorListviewRow lstAlterar, lstAlterar.ListItems.Item(Item).Index, vbBlue
rs.MoveNext
End With
Loop

Acho que deu pra compreender....
KERPLUNK 23/11/2016 23:27:34
#469189
Resposta escolhida
O ítem ou linha atual você pode pegar o contador de linhas do listview, mais ou menos assim:

rs.Open [Ô]Select * from tbClientes[Ô],db,3,3
do until rs.EOF
Set Item = lstAlterar.ListItems.Add(, , [Ô][Ô] & [Ô] [Ô] & rs!Nome)
With item
.SubItems(1) = [Ô][Ô] & rs!Codigo
.SubItems(2) = [Ô][Ô] & rs!Celular
.SubItems(3) = [Ô][Ô] & rs!Telefone
.SubItems(14) = [Ô][Ô] & rs!sit
If rs!sit = [Ô]S[Ô] Then ColorListviewRow lstAlterar, lstAlterar.ListItems.Item([txt-color=#0000f0]lstAlterar.ListItems.Count[/txt-color] - 1).Index, &H8000&
If rs!sit = [Ô]N[Ô] Then ColorListviewRow lstAlterar, lstAlterar.ListItems.Item([txt-color=#0000f0]lstAlterar.ListItems.Count[/txt-color] - 1).Index, vbBlue
rs.MoveNext
End With
Loop


PS: não tenho certeza da propriedade correta, mas o que está em azul, seria uma maneira de pegar o número de ítens. O que acontece ali é que assim que o ítem é adicionado, busca-se o número de ítens no listview. Isso nos daria sempre o último ítem.
KERPLUNK 23/11/2016 23:28:32
#469190
Ah, ia digitar, mas cliquei no botão antes e esqueci, você estava doente? Está se sentindo melhor? O que houve?
JORGESALES 23/11/2016 23:40:32
#469191
Citação:

:
Ah, ia digitar, mas cliquei no botão antes e esqueci, você estava doente? Está se sentindo melhor? O que houve?


Estava doente sim e muito obrigado por perguntar, na minha idade doenças tem aos montes, fora a indisposição
pra tudo.
Os médicos disseram que foi uma virose....
Quanto ao código vou testar aqui e desde já muito obrigado.
JORGESALES 23/11/2016 23:58:52
#469192
Funcionou perfeitamente!!
Muito obrigado Kerplunk....

Com isso já economizo um pouco de recurso do sistema.
JORGESALES 24/11/2016 00:00:19
#469193
Ah, só não precisou do
.count - 1
ficou só
.count
mesmo...
Tópico encerrado , respostas não são mais permitidas