Fonte: www.activedelphi.com.br
Conheceremos uma maneira muito fácil e simples para colocar um CheckBox em um StringGrid ou DBGrid.
Para fazer este exemplo vamos precisar de um StringGrid e um ImageList.
Bom antes que muito perguntem o porque do ImageList vou explicar: Podemos utilizar o canvas para desenhar um CheckBox no Grid, porém com o ImageList podemos variar a imagem do CheckBox como quisermos!
É bem simples. Faça o desenho do seu CheckBox como quiser (uma imagem do checkBox checado e a outra não), e coloque as duas no ImageList.
Vamos trabalhar em cima da propriedade OnDrawCell, que é a responsável por desenhar cada célula do grid.
Neste evento temos as variaveis ARow (Linha), Acol (Coluna) e Rect (área de cada célula identificada por ARow e Acol).
Neste exemplo eu coloquei o "index 0" do ImageList com a imagem checada e o "index 1" como não checada.
Veja o código abaixo: se a Coluna(ACol) for igual a 1 ,ou seja, a segunda coluna, e Linha (ARow) maior que "0" (não sendo o titulo), então ele testa se nesta célula tem o texto ' .' (que eu em particular escolhi, para representar o valor verdadeiro). Então ele desenha o CheckBox já "Checado", e caso esteja vazia a celula (''), desenha o checkBox não checado!.
As variáveis Rect.Left e Rect.Top representam o lugar onde o checkbox será desenhado dentro da celula.
procedure TForm1.GridDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
R: TRect;
begin
if (Acol = 1) and (ARow > 0) then
if Grid.Cells[ACol,ARow] = ' .' then
ImageList1.Draw(Grid.Canvas, Rect.Left+4, Rect.Top+4, 0)
else
if Grid.Cells[ACol,ARow] = '' then
ImageList1.Draw(Grid.Canvas, Rect.Left+4, Rect.Top+4, 1);
end;
Para fazer este exemplo vamos precisar de um StringGrid e um ImageList.
Bom antes que muito perguntem o porque do ImageList vou explicar: Podemos utilizar o canvas para desenhar um CheckBox no Grid, porém com o ImageList podemos variar a imagem do CheckBox como quisermos!
É bem simples. Faça o desenho do seu CheckBox como quiser (uma imagem do checkBox checado e a outra não), e coloque as duas no ImageList.
Vamos trabalhar em cima da propriedade OnDrawCell, que é a responsável por desenhar cada célula do grid.
Neste evento temos as variaveis ARow (Linha), Acol (Coluna) e Rect (área de cada célula identificada por ARow e Acol).
Neste exemplo eu coloquei o "index 0" do ImageList com a imagem checada e o "index 1" como não checada.
Veja o código abaixo: se a Coluna(ACol) for igual a 1 ,ou seja, a segunda coluna, e Linha (ARow) maior que "0" (não sendo o titulo), então ele testa se nesta célula tem o texto ' .' (que eu em particular escolhi, para representar o valor verdadeiro). Então ele desenha o CheckBox já "Checado", e caso esteja vazia a celula (''), desenha o checkBox não checado!.
As variáveis Rect.Left e Rect.Top representam o lugar onde o checkbox será desenhado dentro da celula.
procedure TForm1.GridDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
R: TRect;
begin
if (Acol = 1) and (ARow > 0) then
if Grid.Cells[ACol,ARow] = ' .' then
ImageList1.Draw(Grid.Canvas, Rect.Left+4, Rect.Top+4, 0)
else
if Grid.Cells[ACol,ARow] = '' then
ImageList1.Draw(Grid.Canvas, Rect.Left+4, Rect.Top+4, 1);
end;
Nenhum comentário:
Postar um comentário