Como sublinhar linha no DbGrid em Delphi

Veja nesta Quick Tip, onde vou mostrar como sublinha e mudar a cor de uma célula do DBGrid quando o mouse estiver sobre ela.

Olá galera, vamos a esta Quick Tip, onde vou mostrar como sublinha e mudar a cor de uma célula do DBGrid quando o mouse estiver sobre ela.
Vamos precisar do seguinte :

1 - DBGrid
1 - ClientDataSet
1 - DataSorce

Veja a imagem abaixo, o que importa não é a conexão e sim seu DBGrid com registro para podermos ver o exemplo funcionando.


Vamos criar uma classe no nosso formulário que herda de TDBGrid, para podermos acessar propriedades privadas da class TDBGrid, veja como criar. type THackDBGrid = class(TDBGrid); TForm1 = class(TForm)
Com o layout montado vamos agora precisar de uma property para poder armazenar e mudar a posição do mouse. No private do próprio formulário faça o seguinte :

private property MouseOverRow: integer;

Ao fazer isso, você irá apertar CTRL + SHIFT + C , para poder implementar o código completo, sem você ter trabalho. Em seguida seu código irá ficar assim :

private FMouseOverRow: integer; procedure SetMouseOverRow(const Value: integer); { Private declarations } property MouseOverRow: integer read FMouseOverRow write SetMouseOverRow; public

Feito isso vamos agora implementar no método SetMouseOverRow, o seguinte:

procedure TForm1.SetMouseOverRow(const Value: integer); begin FMouseOverRow := Value; DbGrid1.Repaint; end;

Agora vamos aos efeitos do DBGrid, selecione o mesmo e em Events, localize o evento :

onDBGrid1DrawColumnCell e implemente o seguinte :

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if not ((gdFocused in State) or (gdSelected in state)) and (MouseOverRow = 1 + THackDBGrid(TDBGrid(Sender)).DataLink.ActiveRecord) then begin TDBGrid(Sender).Canvas.Brush.Color := $00C1FFFF; TDBGrid(Sender).Canvas.Font.Color := clBlue; TDBGrid(Sender).Canvas.Font.Style := [fsUnderline]; end; TDBGrid(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State); end;

onDBGrid1MouseMove e implemente o seguinte :

procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var pPosicao: TGridCoord; begin pPosicao := TDBGrid(Sender).MouseCoord(x,y); MouseOverRow := pPosicao.Y; end;

Depois disso tudo pronto, veja o resultado :



Fico por aqui e até a próxima Quick Tip.

Um abraço
Wesley Y
www.lithic.com.br

 
Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados