Selecionar a linha toda em um DbGrid sem usar RowSelect
Amigos,
Necessito selecionar (pintar) toda a linha ativa de um dbGrid sem utilizar o comando RowSelect porque ele impede a navegação entre as colunas
Se alguem suber como impedir o travamento da navegação tb serve.
Abraços
Necessito selecionar (pintar) toda a linha ativa de um dbGrid sem utilizar o comando RowSelect porque ele impede a navegação entre as colunas
Se alguem suber como impedir o travamento da navegação tb serve.
Abraços
Adssistemas
Curtidas 0
Respostas
Jáder Medeiros
06/11/2007
[quote:4a29a21c39=´Jáder´]Sua pontuação está meio confusa para determinar qual exatamente é sua dúvida, mas coloque este código no evento OnDrawColumnCell que acho que resolve seu problema:
[/quote:4a29a21c39]
Citei este texto no tópico 88876 [url]http://forum.devmedia.com.br/viewtopic.php?t=88876[/url].
if DBGrid1.DataSource.DataSet.State in [dsEdit, dsInsert, dsBrowse] then //Cor da linha selecionada if Rect.Top = TStringGrid(DBGrid1).CellRect(0,TStringGrid(DBGrid1).Row).Top then begin DBGrid1.Canvas.FillRect(Rect); DBGrid1.Canvas.Brush.Color := TColor($F0CAA6); DBGrid1.DefaultDrawDataCell(Rect,Column.Field,State) end; if gdSelected in State then begin //Cor da célula selecionada DBGrid1.Canvas.Brush.Color := TColor($808000); DBGrid1.Canvas.FillRect(Rect); DBGrid1.DefaultDrawDataCell(Rect,Column.Field,State) end
Citei este texto no tópico 88876 [url]http://forum.devmedia.com.br/viewtopic.php?t=88876[/url].
GOSTEI 0
Aasn
06/11/2007
A solução apresentada pelo Jáder é perfeita!!!
GOSTEI 0
Aasn
06/11/2007
Só uma pequena dica:
mudar de
if Rect.Top = TStringGrid(DBGrid1).CellRect( 0 ,TStringGrid(DBGrid1).Row).Top then
para
if Rect.Top = TStringGrid(DBGrid1).CellRect( DataCol ,TStringGrid(DBGrid1).Row).Top then
assim, quando houver muitas colunas fora da área visível do grid, ao rolar essas colunas e mudar a linha o destaque continuará ok.
[]´s
AASN
mudar de
if Rect.Top = TStringGrid(DBGrid1).CellRect( 0 ,TStringGrid(DBGrid1).Row).Top then
para
if Rect.Top = TStringGrid(DBGrid1).CellRect( DataCol ,TStringGrid(DBGrid1).Row).Top then
assim, quando houver muitas colunas fora da área visível do grid, ao rolar essas colunas e mudar a linha o destaque continuará ok.
[]´s
AASN
GOSTEI 0
Webjoel
06/11/2007
Muito bom mesmo!
Tinha encontrado outra solução, mas essa matou, valeu Jáder!!!!
Tinha encontrado outra solução, mas essa matou, valeu Jáder!!!!
GOSTEI 0
Danielrsanches
06/11/2007
Só uma pequena dica:
mudar de
if Rect.Top = TStringGrid(DBGrid1).CellRect( 0 ,TStringGrid(DBGrid1).Row).Top then
para
if Rect.Top = TStringGrid(DBGrid1).CellRect( DataCol ,TStringGrid(DBGrid1).Row).Top then
assim, quando houver muitas colunas fora da área visível do grid, ao rolar essas colunas e mudar a linha o destaque continuará ok.
eu sei que isto é velho, mas precisei hoje e encontrei este post que não deu 100% certo...
a forma perfeita do código é a seguinte:
if Rect.Top = TStringGrid(DBGrid1).CellRect( 0 ,TStringGrid(DBGrid1).Row).Top then
pois se substituir o 0 pelo DataCol, aí sim quando tiver muitas colunas não vai funcionar...
GOSTEI 0