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!
Powered by vBulletin® Version 4.2.5 Copyright © 2023 vBulletin Solutions Inc. All rights reserved.