Ir ao conteúdo
  • Cadastre-se

colorir celula stringgrid


guilhermerayol

Posts recomendados

:angry:alo to querendo colorir uma celula de um stringgrid

1- tenho uma linha preenchida com valores de 1 a 10;

2- quero localizar por exemplo o numero 6

3-se achar , selecionar a celula e colorir , mas nao da certo da pra dizer o que esta errado?

procedure TForm1.sg1DrawCell(Sender: TObject; ACol, ARow: Integer;

Rect: TRect; State: TGridDrawState);

var

i: integer;

acha: integer;

begin

acha:=2;

for i:=0 to 4 do

begin

if acha= strtoint(sg1.Cells[i,0]) then

begin

sg1.Col:= i;

sg1.Row:=0;

sg1.Canvas.Brush.color:=clblack;

end;

end;

end;

segunda duvida por acaso em um evento é para se passar parametros?

o quer dizer Rect, Acol,Arow;

Link para o comentário
Compartilhar em outros sites

"Rect, Acol,Arow" penso que são variáveis. Tem este nome, mas poderiam ter outro qualquer. Foi o nome que o autor lhe quis atribuir.

Vou colocar aqui parte de um código que fiz para um programa de totoloto que usa uma StringGrid. À medida que se carrega no número, a célula muda de cor. Já não me lembra muito bem como funciona.


procedure TFormRegApostTotoloto.SGNumerosDrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);
procedure DrawCellText;
var Text: array[0..255] of Char;
begin
StrPCopy(Text, SGNumeros.Cells[ ACol, ARow ] );
ExtTextOut( SGNumeros.Canvas.Handle, Rect.Left + 2, Rect.Top + 2,
ETO_CLIPPED or ETO_OPAQUE, @Rect, Text, StrLen(Text), nil );
end;
{***}
procedure DrawCellColor( CorFundo, CorLetra : TColor );
var
S1, S2 : TColor;
begin
with SGNumeros.Canvas do
begin
S1 := Brush.Color;
S2 := Font.Color;
try
{pinta o fundo com a cor desejada}
Brush.Color := CorFundo;
FillRect( Rect );
{pinta as letras com a cor desejada}
Font.Color := CorLetra;
DrawCellText;
finally
{restaura as cores}
Brush.Color := S1;
Font.Color := S2;
end;{try}
end;{with}
end;
{***}
begin
if ArrayCor[ACol,ARow] = 'AZUL' then DrawCellColor(clBlue, clWindowText)
else DrawCellColor(clWhite, clWindowText);
end;

procedure TFormRegApostTotoloto.SGNumerosSelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
begin
if ArrayCor[ACol,ARow] = 'AZUL' then
begin
ArrayCor[ACol,ARow]:= '';
ArrayApostas[ACol,ARow]:= '';
Contador:= Contador - 1;
end
else
begin
ArrayCor[ACol,ARow]:= 'AZUL';
ArrayApostas[ACol,ARow]:= SGNumeros.Cells[ACol,ARow];
Contador:= Contador + 1;
end;
Coluna:=0;
Linha:=0;
VarAposta:= '';
while Linha < 7 do
begin
while Coluna < 7 do
begin
if ArrayApostas[Coluna,Linha] <> '' then
begin
// ArrayNumeros[Numeros]:= ArrayApostas[Coluna,Linha];
if VarAposta = '' then VarAposta:= ArrayApostas[Coluna,Linha]
else VarAposta:= VarAposta + '+'+ArrayApostas[Coluna,Linha];
end;
Coluna:= Coluna+1;
end;
Coluna:= 0;
Linha:= Linha+1;
end;
EdAposta.Text:= VarAposta;
LbNumeros.Caption:= '(' + IntToStr(Contador) + ')';
end;

Espero que seja útil.

Eu experimentei com o código colocado acima, mas acho que é difícil conseguires o que pretendes com este código. A celula muda de cor, mas com dados não sei se é possivel desta forma. Aqui fica o código


unit UStringGrids2;

interface

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

type
TForm1 = class(TForm)
sg1: TStringGrid;
procedure sg1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
ax: string;

implementation

{$R *.dfm}

procedure TForm1.sg1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
ax:= '2';
try
If (IntToStr(ACol) = ax) and (Arow=2) then
begin
SG1.Canvas.Brush.Color:= clRed;
SG1.Canvas.Font.Color:=clBlack;
SG1.Canvas.FillRect(Rect);
// sg1.Cells[ARow,ACol]:= IntToStr(ARow+ACol);
// StringGrid1.Canvas.TextOut(Rect.left, Rect.Top, StringGrid1.Cells[1, 1]);
end;
except
end;
end;

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!