Fórum DBGridZebrado #280455

06/05/2005

0

galera...
Tenho este componente que eh um DbGrid que zebra...
mas desenvolvi em Ado...
Mas quero usar agora com BDE...

Entao fiz as adaptações...
MAs ele nao zebra o Grid quando se usa a ADO, soh com ADOQuery

Me ajudem

Codigo Abaixo:

unit DBGridZebrado;

interface

uses
SysUtils, Classes, Controls, Grids, DBGrids, Graphics, ADODB, types, DBTables;

type
TDBGridZebrado = class(TDBGrid)
private
FZebrado: Boolean;
FAdoQuery: TADOQUery;
FSelectedBrushColor: TColor;
FZebraColor: TColor;
FSelectedFont: TFont;
FCorColuna: TColor;
FQuery: TQUery;

procedure PrintData(sText : string; Column : TColumn; Rect : TRect);


procedure SetQuery(const Value: TQUery);
procedure SetSelectedBrushColor(const Value: TColor);
procedure SetSelectedFont(const Value: TFont);
procedure SetZebraColor(const Value: TColor);
procedure SetZebrado(const Value: Boolean);
procedure SetCorColuna(const Value: TColor);
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }

Constructor Create(AOWner : TComponent);override;

Destructor Destroy;override;

procedure DrawColumnCell(const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);override;

procedure TitleClick( Column : TColumn );override;

published
{ Published declarations }
Property Query : TQUery read FQuery write SetQuery;
Property SelectedBrushColor : TColor read FSelectedBrushColor write SetSelectedBrushColor;
Property SelectedFont : TFont read FSelectedFont write SetSelectedFont;
property ZebraColor : TColor read FZebraColor write SetZebraColor;
property Zebrado : Boolean read FZebrado write SetZebrado;
property CorColuna : TColor read FCorColuna write SetCorColuna;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents(´Fernando´, [TDBGridZebrado]);
end;

{ TDBGridZebrado }

constructor TDBGridZebrado.Create(AOWner: TComponent);
begin
inherited;
FSelectedBrushColor := clNavy;
FSelectedFont := TFont.Create;
FSelectedFont.Color := clwhite;
FZebraColor := $F0E0E0;
FZebrado := True;
FCorColuna := clRed;

end;

destructor TDBGridZebrado.Destroy;
begin
FSelectedFont.Free;
inherited;
end;

procedure TDBGridZebrado.DrawColumnCell(const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
stext : string;
begin
inherited;

if not Zebrado then Exit;

if DataSource.DataSet = NIL then Exit;

sText := Column.Field.Text;

if gdSelected in State then
begin
Canvas.Brush.Color:=FSelectedBrushColor;
Canvas.Font := FSelectedFont;
Canvas.Rectangle(Rect);
PrintData(sText,Column,Rect);
end
else if Odd( DataSource.DataSet.RecNo ) then
begin
Canvas.Brush.Color:=FZebraColor;
Canvas.Rectangle(Rect);
PrintData(sText,Column,Rect);
end; // IF Odd



end;

procedure TDBGridZebrado.PrintData(sText: string; Column : TColumn; Rect : TRect);
var
W : Integer;
begin
W := Canvas.TextWidth(sText);

if Column.Alignment = taLeftJustify
then
Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, sText);

if Column.Alignment = taRightJustify
then
Canvas.TextRect(Rect, Rect.Right - W - 2,Rect.Top + 2, sText);

if Column.Alignment = taCenter
then
Canvas.TextRect(Rect,
Rect.Left + (Rect.Right-Rect.Left) div 2 - W div 2,
Rect.Top + 2, sText);

end;

procedure TDBGridZebrado.SetQuery(const Value: TQuery);
begin
FQuery := Value;
end;

procedure TDBGridZebrado.SetCorColuna(const Value: TColor);
begin
FCorColuna := Value;
Invalidate;
end;

procedure TDBGridZebrado.SetSelectedBrushColor(const Value: TColor);
begin
FSelectedBrushColor := Value;
Invalidate;
end;

procedure TDBGridZebrado.SetSelectedFont(const Value: TFont);
begin
FSelectedFont.Assign( Value );
Invalidate;
end;

procedure TDBGridZebrado.SetZebraColor(const Value: TColor);
begin
FZebraColor := Value;
Invalidate;
end;

procedure TDBGridZebrado.SetZebrado(const Value: Boolean);
begin
FZebrado := Value;
Invalidate;
end;

procedure TDBGridZebrado.TitleClick(Column: TColumn);
var
sOrdem, s : string;
iPos, i : integer;
begin
inherited;
if FQuery = NIL then Exit;

if Columns.Count = 0 then Exit;

if Column.Field.Origin = ´´ then Exit;

sOrdem := ´´;
s := Column.Title.Caption;
s := Copy( s, Length( s ) - 2, 3 );

if s = ´(A)´ then sOrdem := ´ DESC´;

with FQuery do begin
Close;
iPos := Pos(´ORDER BY´,UpperCase(SQL.Text));
SQL.Text := Copy(SQL.Text,1,iPos+8)+
´ ´+Column.Field.Origin + sOrdem;
Open;
end; // WITH

for i := 0 to Columns.Count-1 do
with Columns[ i ] do begin
Color := clWhite;
Title.Font.Style := [];
Title.Caption := Field.DisplayLabel;
end; // WITH

Column.Color := FCorColuna;
Column.Title.Font.Style := [fsBold];

if sOrdem = ´ DESC´ then
Column.Title.Caption :=
Column.Title.Caption + ´ (D)´
else
Column.Title.Caption :=
Column.Title.Caption + ´ (A)´;
end;

end.


Tremonti

Tremonti

Responder

Posts

09/05/2005

Nilza

oi

essa unit faz a mesma coisa

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; 
  


[]´s


Responder

Gostei + 0

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

Aceitar