DbCrtlGrid - Fazer piscar determinados registros
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
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
Marcelo Massaro
Curtidas 0