GARANTIR DESCONTO

Fórum Selecionar a linha toda em um DbGrid sem usar RowSelect #348546

06/11/2007

0

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

Responder

Posts

07/11/2007

Jáder Medeiros

[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].


Responder

Gostei + 0

14/11/2007

Aasn

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


Responder

Gostei + 0

14/11/2007

Aasn

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


Responder

Gostei + 0

29/04/2008

Webjoel

Muito bom mesmo!

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


Responder

Gostei + 0

17/12/2012

Danielrsanches


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...

Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar