Buscar

String grid colorido

Código

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.

Publicidade

Vote na dica




Quantidade de votos: 0 votos
Aceitação: 0%


Detalhes da dica

Categoria: Componentes
Adicionada dia: 24/06/03
Por: Felipe Monteiro
Visualizada: 5725 vezes

Planeta Delphi - Tudo sobre programação Delphi Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009