PDA

View Full Version : Colorir todas as linhas da cDbCJGridPromptList



uandzleonel
13-Mar-2020, 01:17 PM
Olá,

Gostaria de saber se é possível colorir de maneira dinâmica todas as células de uma cDbCJGridPromptList.
Com as dbList e dbGrid eu consigo colorir todas as células que estão sendo exibidas através do Displayable_Rows (número de linhas), Item_Limit (número de colunas) e Base_Item (célula base).
Com a cDbCJGridPromptList eu não sei como fazer isso, pois eu consigo apenas utilizar o OnSetDisplayMetrics para colorir a coluna atual (o código vai na coluna), onde consegui apenas colorir a linha selecionada (vide imagem) e a coluna que tem o OnSetDisplayMetrics.
Em resumo, eu queria colorir todas as colunas da cDbCJGridPromptList sem precisa sair colocando coluna por coluna o OnSetDisplayMetrics (novato com cDbCJGridPromptList).




Procedure OnSetDisplayMetrics Handle hoGridItemMetrics Integer iRow String ByRef sValue
String currentStatus
Integer currentColor

Get RowValue of oCTICKETS_STATUS iRow to currentStatus
Get Get_ArrayColor currentStatus hStatus to currentColor
Set ComBackColor of hoGridItemMetrics to currentColor
Set piHighlightBackColor of oSelList to currentColor
End_Procedure

13534

Agradeço desde já.

Edgard
16-Mar-2020, 05:25 AM
Leonel,

Se for dinamicamente entendo, que o seu método está correto.

Se não for dinamicamente entendo, que o melhor seria:
13536

Particularmente, prefiro a troca da cor no texto, que controlo via propriedades.

Em complemento de seu código:



Function piFocusCellForeColor Returns Integer
Handle hoDataSource hoColumn
Integer iQtdSin iRow

Get phoDataSource to hoDataSource
Get SelectedRow of hoDataSource;
to iRow

Get RowValue of oAPOLICE_SINISTRO;
iRow to iQtdSin
Get SelectedColumnObject to hoColumn

Set piHighlightForeColor to (If( (iQtdSin>0), (piMyTextColorWarning(Self)) , clNone))
Set piSelectedRowForeColor to (If( (iQtdSin>0), (piMyTextColorWarning(Self)) , (piMySelectedRowForeColor(Self)) ))


Function_Return (If( (iQtdSin>0), (piMyTextColorWarning(Self)) , (piMyFocusCellForeColor(Self)) ))
End_Function




At.;

Edgard

uandzleonel
16-Mar-2020, 08:16 AM
Leonel,

Se for dinamicamente entendo, que o seu método está correto.

Se não for dinamicamente entendo, que o melhor seria:
13536

Particularmente, prefiro a troca da cor no texto, que controlo via propriedades.

Em complemento de seu código:



Function piFocusCellForeColor Returns Integer
Handle hoDataSource hoColumn
Integer iQtdSin iRow

Get phoDataSource to hoDataSource
Get SelectedRow of hoDataSource;
to iRow

Get RowValue of oAPOLICE_SINISTRO;
iRow to iQtdSin
Get SelectedColumnObject to hoColumn

Set piHighlightForeColor to (If( (iQtdSin>0), (piMyTextColorWarning(Self)) , clNone))
Set piSelectedRowForeColor to (If( (iQtdSin>0), (piMyTextColorWarning(Self)) , (piMySelectedRowForeColor(Self)) ))


Function_Return (If( (iQtdSin>0), (piMyTextColorWarning(Self)) , (piMyFocusCellForeColor(Self)) ))
End_Function




At.;

Edgard

Edgard,

Testei com a Function piFocusCellForeColor, mas ela estava colorindo apenas quando o foco era células que ficam habilitadas para selecionar (normalmente as que fazem parte de índice).
Coloquei o mesmo código na OnComFocusChanging e agora sim ela estava colorindo independentemente da célula/coluna selecionada.
No entanto, eu queria que todas as linhas tivessem a cor aplicada sem precisar selecionar.

13538

No caso da imagem acima, queria que a linha 1, 2 e 4 também estivessem colorida, independentemente de terem o foco.

13539

Não tem problema se der para fazer apenas com o ForeColor (cor do texto), pois a única coisa que quero evitar é colocar OnSetDisplayMetrics em todas as colunas que for para ter cor.

Edgard
16-Mar-2020, 09:20 AM
Ou você cria uma nova classe ou coloca em todas as colunas.

Eu acabei optando por introduzir o código em todas as colunas.

No meu caso foi para compensar a cor das letras e de fundo, quando o sistema é executado no TS.

uandzleonel
16-Mar-2020, 10:03 AM
É, eu não queria colocar por coluna por conta de precisar ficar lembrando de colorir quando adicionar uma nova coluna.
Pelo jeito a melhor maneira é criar uma classe com esse comportamento.
Obrigado!

ivankaupa
16-Mar-2020, 10:51 AM
Prezado,

A classe original do DataFlex não possui este recurso.

Na classe cMFDbCJGrid do MenuFlex, existe um evento OnSetDisplayMetrics para fazer justamente isso: http://www.developerflex.com.br/?page=MenuFlex/Documenta%E7%E3o/Guia-do-desenvolvedor/Classes/cMFDbCJGrid/Eventos/OnSetDisplayMetrics-1224

Atenciosamente,
Ivan Kaupa

uandzleonel
18-Mar-2020, 06:15 AM
Ivan,

É exatamente isso. Obrigado!