dbGrid Zebrado
05/04/2003
0
Estou precisando de uma ajuda para montar um dbGrid zebrado. É mais ou menos assim:
Quando o table1.recno dividido por 2 der o resto = 0, eu quero que a linha fique branca, se o resto for <> 0, quero que fique verde clarinho.
Eu não sei qual a função que retorna o resto de uma divisão e também não sei se dá para usar o table1.recno como se ele fosse um número sequencial da tabela, porque eu tentei usar ele só mostrou -1 como resultado, não sei por que...
Será que alguém pode me ajudar?
Obrigada
Mariangela
Anonymous
Posts
05/04/2003
Anonymous
313 - DbGrid Zebrado
O exemplo abaixo mostra como deixar cada linha do componente DBGrid de uma cor diferente, dando assim um efeito zebrado. O controle é feito no evento OnDrawColumnCell.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Db, DBTables, Grids, DBGrids, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
DBGrid1: TDBGrid;
Table1: TTable;
DataSource1: TDataSource;
procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
If odd(Table1.RecNo) then
begin
DBGrid1.Canvas.Font.Color:= clWhite;
DBGrid1.Canvas.Brush.Color:= clGreen;
end
else
begin
DBGrid1.Canvas.Font.Color:= clBlack;
DBGrid1.Canvas.Brush.Color:= clWhite;
end;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.Canvas.TextOut(Rect.Left+2,Rect.Top,Column.Field.AsString);
end;
05/04/2003
Anonymous
Será que alguém já fez isso e deu certo?
05/04/2003
Rafael Heise
bom ... dai você pode fazer o seguinte.... para pintar a grid.. você deve fazer o seguinte...
no OnDrawDataCell , você tem que saber em qual linha está.. e dai ....
if Linha mod 2 = 0 then
grid.Canvas.Brush.Color := clWhite
else
grid.Canvas.Brush.Color := clLightGreen;
grid.DefaultDrawDataCell(Rect,Column.Field,State);
...
eu não estou bem certo sobre a ultima linha, mas acho que é assim.. não estou me lembrando direito ...
bom .. e quanto a saber qual linha está... daria pra ver... considerando a altura de uma linha que é a diferença do Rect (Rect.Bottom - Rec.Top). ...
e dai , considerando o Rect.Top, você deduz qual a linha está.... dividindo o Top pela altura da linha... bom.. a lógica é essa.. tem que testar certinho e ver dai como fica. bele ?? tudo mastigado não dá né.. a idéia está ai ... agora.. só por em prática.. belezinha.. qualquer coisa .. manda email ...
abraçoss
05/04/2003
Anonymous
Mariangela
Clique aqui para fazer login e interagir na Comunidade :)