Eder Postado Agosto 3, 2016 Denunciar Share Postado Agosto 3, 2016 Ola, pessoal, depois de muitos anos voltei ao forum, rss, novos caminhos profissionais. Preciso de uma ajudinha, estou meio destreinado no delphi, Estou usando este código para pintar a célula selecionada no DbGrid, mas precio que além dela pintar que ela "pisque". Vi vários exemplo na net e no forum mas não consegui chegar nem próximo ao que quero. Por gentileza, vejam se conseguem me ajudar, segue meu código: procedure TFormColetas.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if column.Field.AsString = 'CANCELADA' then begin DBGrid1.Canvas.Brush.Color:= clred; DBGrid1.Canvas.Font.Color:= clblack; DBGrid1.Canvas.Font.Style:= [fsbold]; DBGrid1.Canvas.FillRect(Rect); DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); end; Abs a todos! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Agosto 3, 2016 Denunciar Share Postado Agosto 3, 2016 Tem um exemplo que eu coloquei neste post ou exemplo completo 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. OBS: A celula que voce clicar com o mouse vai ficar piscando ( isso porque a posição de linha e coluna do DBGrid é passado para o timer ) se a idéia é fazer com que valores de varias celulas fiquem piscando ao mesmo tempo, nesse caso voce deve armazenar em uma matriz todos os valores de posições de linha e coluna onde a celula vai ficar piscando, independente da posição do cursor. exemplo de armazenamento de posições de linha e coluna do DBGrid Rect = (Left:274;Top:54;Rigth:352;Bottom:71;TopLeft:(X:274;Y:54);BottomRight:(X:352;Y:71)) voce teria que armazenar em uma matriz o valor de cada Rect, que a condição colocada no evento OnDrawDataCell achar ou voce pode pesquisar na net para ver se tem componente com essa propriedade. Abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Eder Postado Agosto 17, 2016 Autor Denunciar Share Postado Agosto 17, 2016 Jonas, parceiro, desculpa a demora estava em viagem e agora pude ver. Vou dar uma analisada no seu código e ver se consigo resolver. Obrigado e Grande Abraço. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Eder
Ola, pessoal, depois de muitos anos voltei ao forum, rss, novos caminhos profissionais.
Preciso de uma ajudinha, estou meio destreinado no delphi,
Estou usando este código para pintar a célula selecionada no DbGrid, mas precio que além dela pintar que ela "pisque".
Vi vários exemplo na net e no forum mas não consegui chegar nem próximo ao que quero.
Por gentileza, vejam se conseguem me ajudar, segue meu código:
procedure TFormColetas.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if column.Field.AsString = 'CANCELADA' then begin DBGrid1.Canvas.Brush.Color:= clred; DBGrid1.Canvas.Font.Color:= clblack; DBGrid1.Canvas.Font.Style:= [fsbold]; DBGrid1.Canvas.FillRect(Rect); DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); end;
Abs a todos!
Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.