Selecionar a linha toda em um DbGrid sem usar RowSelect

Delphi

06/11/2007

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


Adssistemas

Adssistemas

Curtidas 0

Respostas

Jáder Medeiros

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:
   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
[/quote:4a29a21c39]

Citei este texto no tópico 88876 [url]http://forum.devmedia.com.br/viewtopic.php?t=88876[/url].


GOSTEI 0
Aasn

Aasn

06/11/2007

A solução apresentada pelo Jáder é perfeita!!!


GOSTEI 0
Aasn

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


GOSTEI 0
Webjoel

Webjoel

06/11/2007

Muito bom mesmo!

Tinha encontrado outra solução, mas essa matou, valeu Jáder!!!!


GOSTEI 0
Danielrsanches

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
POSTAR