DbCrtlGrid - Fazer piscar determinados registros

14/10/2021

3

Boa Noite pessoal,

Tenho uma DbCtrlGrid que possui um shape no painel, este shape faço mudar de cor conforme o status de um determinado campo através do onpaintpanel.
Porém preciso que este shape fique piscando para chamar a atenção para determinados registros. Encontrei a seguinte referência, porém estou com dificuldade em armazenar o Rect do shape corretamente para depois pedir para repintar em um timer. Alguém pode me ajudar a adaptar este código para uma dbctrlgrid?

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, DBTables, Grids, DBGrids, ExtCtrls;

type
TForm1 = class(TForm)
DBGrid1: TDBGrid;
DataSource1: TDataSource;
Query1: TQuery;
Button1: TButton;
Timer1: TTimer;
procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
posicao : TRect;
cor : TColor;
implementation

{$R *.dfm}

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if gdSelected in State then
begin
With (Sender as TDbGrid).Canvas do
begin
Brush.Color := clBlue;
FillRect(Rect);
posicao:= Rect;
end;
end;

DBGrid1.DefaultDrawDataCell(Rect, Column.Field, State);

end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin

with DbGrid1 do
begin
if cor = clWhite then
begin
cor := clBlue;
Canvas.Font.Color := clWhite;
end
else
begin
cor := clWhite;
Canvas.Font.Color := clBlack;
end;

Canvas.Brush.Color := cor;
Canvas.TextRect(posicao, posicao.Left + 2, posicao.Top + 2, DBGrid1.SelectedField.Text);
end;

end;


end.

Obrigado

Anderson
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar