LV_Color Dúvida

Tire suas dúvidas sobre programação em AutoHotkey

Moderator: Gio

thalesduarte
Posts: 95
Joined: 13 Sep 2021, 06:08

LV_Color Dúvida

Post by thalesduarte » 06 Oct 2022, 08:47

Opa, bom dia.

Estou utilizando o LV_Color para personalizar minhas listview, porém notei uma situação que está acontecendo, queria saber se vocês tiveram alguma experiência com isso também.

Quando fico organizando minhas colunas ou descendo as linhas que estão coloridas, de vez em quando dá aquele freeze, e fica travado a tela, como se fosse um bug visual.
Ai para voltar ao normal, preciso fechar o programa ou aguardar alguns minutos/segundos para voltar a normalidade.

Alguém já passou por isso e conseguiu contornar essa situação de alguma forma?

Estou usando o LV_Colors dessa forma.
Foi uma das formas que vi que acontece com menos frequência esse erro.

Code: Select all

CLV := New LV_Colors(HLV, True, False, true)
CLV.Critical := 100 
Grato pela atenção.

Link do LV_Color
viewtopic.php?t=1081

garry
Posts: 3736
Joined: 22 Dec 2013, 12:50

Re: LV_Color Dúvida

Post by garry » 15 Oct 2022, 15:01

não tenho resposta talvez pergunte também no fórum alemão ou inglês
exemplo de teste :

Code: Select all

;- https://www.autohotkey.com/boards/viewtopic.php?t=1081  ;- from user 'just me' 
#Include <Class_LV_Colors>  ;- class_lv_colors.ahk is in "C:\Program Files\AutoHotkey\LIB"
#NoEnv
SetBatchLines, -1
Gui, Margin, 20, 20
Gui, Add, ListView, w600 r15 Grid -ReadOnly vVLV hwndHLV
   , Column 1|Column 2|Column 3|Column 4|Column 5|Column6
Loop, 256
   LV_Add("", "Value " . A_Index, "Value " . A_Index, "Value " . A_Index, "Value " . A_Index, "Value "
        . A_Index, "Value " . A_Index)
Loop, % LV_GetCount("Column")
   LV_ModifyCol(A_Index, 95)
; Create a new instance of LV_Colors
CLV := New LV_Colors(HLV)
; Set the colors for selected rows
CLV.SelectionColors(0xF0F0F0)
If !IsObject(CLV) {
   MsgBox, 0, ERROR, Couldn't create a new LV_Colors object!
   ExitApp
}
Gui, Add, CheckBox, w120 vColorsOn gSubShowColors Checked, Colors On
Gui, Add, Radio, x+120 yp wp vColors gSubColors, Colors
Gui, Add, Radio, x+0 yp wp vAltRows gSubColors, Alternate Rows
Gui, Add, Radio, x+0 yp wp vAltCols gSubColors, Alternate Columns
Gui, Show, , ListView & Colors
; Redraw the ListView after the first Gui, Show command to show the colors, if any.
WinSet, Redraw, , ahk_id %HLV%
Return
; ----------------------------------------------------------------------------------------------------------------------
GuiClose:
GuiEscape:
ExitApp
; ----------------------------------------------------------------------------------------------------------------------
SubShowColors:
Gui, Submit, NoHide
If (ColorsOn)
   CLV.OnMessage()
Else
   CLV.OnMessage(False)
GuiControl, Focus, %HLV%
Return
; ----------------------------------------------------------------------------------------------------------------------
SubColors:
Gui, Submit, NoHide
GuiControl, -Redraw, %HLV%
CLV.Clear(1, 1)
If (Colors)
   GoSub, SetColors
If (AltRows)
   CLV.AlternateRows(0x808080, 0xFFFFFF)
If (AltCols)
   CLV.AlternateCols(0x808080, 0xFFFFFF)
GuiControl, +Redraw, %HLV%
Return
; ----------------------------------------------------------------------------------------------------------------------
SetColors:
Loop, % LV_GetCount() {
   If (A_Index & 1) {
      CLV.Cell(A_Index, 1, 0x808080, 0xFFFFFF)
      CLV.Cell(A_Index, 3, 0x808080, 0xFFFFFF)
      CLV.Cell(A_Index, 5, 0x808080, 0xFFFFFF)
   }
   Else {
      CLV.Cell(A_Index, 2, 0x808080, 0xFFFFFF)
      CLV.Cell(A_Index, 4, 0x808080, 0xFFFFFF)
      CLV.Cell(A_Index, 6, 0x808080, 0xFFFFFF)
   }
}
Return

thalesduarte
Posts: 95
Joined: 13 Sep 2021, 06:08

Re: LV_Color Dúvida

Post by thalesduarte » 17 Oct 2022, 13:03

Boa tarde, tudo bem?
Obrigado por responder.
Não é necessariamente isso que estou em busca.

O que acontece é que o LV_Color, possui um erro em sua performance.

Não encontrei nada que possa contornar essa situação.
Talvez utilizar as ListView sem Cores para solucionar de vez.

Abri um Help Request na parte em inglês.

viewtopic.php?f=76&t=109530

Caso tenha algum conhecimento, fico grato!

Atenciosamente,
Thales

User avatar
Gio
Posts: 1247
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: LV_Color Dúvida

Post by Gio » 17 Oct 2022, 16:55

Boa tarde a todos.

Nunca utilizei esta classe LV_Color, mas já utilzei a classe que creio ser a antecessora dela (se chama Lv_AltColoredRows). Ambas são do usuário Just Me. Lembro que ela também usava uma sistemática de classe e com método "attach", mas não posso afirmar agora o quão semelhantes os dois códigos são.

Curiosamente eu também tive em algum momento problemas de bugar o desenho. Lembro que tinha algo relacionado a uma dificuldade da tela redesenhar o controle automaticamente quando alguma mudança na listviews era feita. Vi que alguns usuários no tópico do Lv_Color já estão usando códigos com uma solução parecida com a que ia propor.

Por exemplo, neste post, o usuário colocou o seguinte código:

Code: Select all

~Down::
GuiControl, -Redraw, VLV ; added this line
ControlSend, SysListview321, {Down}, A
GuiControl, +Redraw, VLV ; added this line
Return
Esse uso do Guicontrol, Redraw (tanto -Redraw antes quanto depois +Redraw) sempre que se faz mudança na listview parece muito estar relacionado com o problema.

Agora olhando pelo meu código de quando usei o Lv_AltColoredRows, vejo que a classe tinha chamadas ao comando WinSet, Redraw, , ahk_id %HWND%. Este comando também está relacionado a redesenhar a janela e/ou os controles.

:arrow: Em suma: Tente escrever código para redesenhar o controle e/ou a janela logo após cada modificação na listview. Você pode atrelar isso a uma g-label por exemplo (de modo que quando o usuário clique para reordenar, o código de redesenho rode).

thalesduarte
Posts: 95
Joined: 13 Sep 2021, 06:08

Re: LV_Color Dúvida

Post by thalesduarte » 17 Oct 2022, 18:59

@Gio Boa noite, obrigado pela atenção.


Dei um olhadinha nessa classe, não entendo muito da logistica dela da LV_AltColoredRows, mas teria alguma maneira de individualizar a coloração das células da listview?


O problema que acontece comigo, é no momento do SCROLLLOCK ou se a pessoa ficar subindo e descendo a barra de rolagem rapidamente.
Acaba que da um freeze na listview e só é corrigido ao apertar Windows + D.
Ou se o usuario aguardar alguns minutos para que seja normalizado.


Realizei alguns procedimentos a respeito do Winset, ao momento que utilizem o Wheeldown ou Wheelup dê um winset, porém não obtive sucesso também.

Post Reply

Return to “Ajuda e Suporte Geral”