segunda-feira, 21 de setembro de 2009

String grid colorido

Unit
Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Grids;

type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure StringGrid1DrawCell(Sender: TObject; Col, Row: Longint;
Rect: TRect; State: TGridDrawState);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure StringGrid1DblClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
C, R: Integer;
Value: Integer;
begin
{Encher o String Grid de valores Inteiros e Ramdomicos}
Randomize;
for C := 1 to StringGrid1.ColCount-1 do
for R := 1 to StringGrid1.RowCount-1 do
begin
Value := Random(10) - 5;
StringGrid1.Cells[C,R] := IntToStr(Value);
StringGrid1.Objects[C,R] := Pointer(clBlack);
end;
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; Col, Row: Longint;
Rect: TRect; State: TGridDrawState);
const
LM = 3; {each indiviual cell's left margin}
TM = 2; {each indiviual cell's top margin}
var
ptr: Pointer;
begin
{qualquer cor é armazenada no ponteiro do objeto}
ptr := StringGrid1.Objects[Col, Row];
StringGrid1.Canvas.Font.Color := LongInt(ptr);
{deixe as filas fixas e as colunas fixas em prata }
if gdFixed in State then
StringGrid1.Canvas.Brush.Color := clSilver;
{puxemos o destaque do modo seguinte quando a celula for selecionada }
if gdSelected in State then
begin
StringGrid1.Canvas.Brush.Color := clHighlight;
StringGrid1.Canvas.Font.Color := clHighlightText;
end;
{finalmente, faça o desenho de celula atual }
StringGrid1.Canvas.TextRect(Rect, Rect.Left + LM, Rect.Top + TM, StringGrid1.Cells[col,row]);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
C, R: Integer;
begin
for C := 1 to StringGrid1.ColCount-1 do
for R := 1 to StringGrid1.RowCount-1 do
begin
{faça os objetos de todos o grid apontar a nada }
StringGrid1.Objects[C, R] := nil;
{se nós tivéssemos armazenado objetos no grid, nós deveríamos os livrar assim:
StringGrid1.Objects[C, R].Free;}
end;
end;

procedure TForm1.StringGrid1DblClick(Sender: TObject);
begin
With StringGrid1 do
Case Random(4) of
0 : Objects[Col,Row] := Pointer(clRed);
1 : Objects[Col,Row] := Pointer(clLime);
2 : Objects[Col,Row] := Pointer(clBlue);
3 : Objects[Col,Row] := Pointer(clFuchsia);
end;
end;

end.

Nenhum comentário:

Postar um comentário