dbGrid Zebrado

05/04/2003

0

Olá pessoal,
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

Anonymous

Responder

Posts

05/04/2003

Anonymous

Dica retirada das 750 Dicas Delphi de www.lloydsoft.hpg.ig.com.br

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;


Responder

05/04/2003

Anonymous

Essa rotina deixa o fundo verde e as letras brancas, mas em todas as linhas do grid, o que eu quero é que fique zebrado mesmo, uma linha de cada cor.
Será que alguém já fez isso e deu certo?


Responder

05/04/2003

Rafael Heise

Bom... a questão de RecNo aparecer -1 é pelo banco de dados... esse RecNo é pego direto pelo banco, e alguns bancos com DB2, MySQL, INTRBASE eu acho também, não tem isso .. dai o valor é 0 quando não tiver registro e -1 para todos os registros.....
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


Responder

05/04/2003

Anonymous

Valeu, Zerneo, vou tentar fazer isso, muito obrigada pela dica.
Mariangela


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar