Академический Документы
Профессиональный Документы
Культура Документы
Veja como colocar um CheckBox dentro de um DBGrid. Crie interfaces visualmente mais atraentes para edição de
campos booleanos dentro de um DBGrid.
CheckBox em um DBGrid? Para que?
Existem muitas razões possíveis para você querer colocar um campo booleano de um DBGrid como um CheckBox.
Imagine que você esteja desenvolvendo por exemplo um sistema que possua um Form onde você possa listar vários
registros à serem exportados, mas dentre todos somente alguns você pretende exportar.
Daí imagine você colocar em um determinado campo um CheckBox onde você possa selecionar quais os registros que
serão selecionados. Com certeza, será muito mais prático selecionar os registros do que ficar manipulando intruções
SQL ou filtros de registros em tempo de execução!
Por padrão, o DBGrid exibe valores de campos booleanos como "True" ou "False", de acordo com o valor do campo de
dados. Caso você tenha feito alterações no Delphi para tradução de mensagens para o Português, estes campos
também poderão ser apresentados como "Falso" ou "Verdadeiro".
Iniciando a aplicação de exemplo
Com o Delphi aberto, inicie uma nova aplicação contendo em um Form os seguintes componentes:
- DBGrid
- DBNavigator
Ajuste as propriedades de todos os componentes, de forma que você tenha uma aplicação parecida com a imagem
abaixo:
Agora sim! Daqui pra frente iremos melhorar a interface gráfica de nossa aplicação, efetuando a inclusão de um
CheckBox dentro da DBGrid.
Na verdade, iremos inserir o componente TDBCheckBox, uma vez que iremos manipular dados, e para tanto teremos
que utilizar componentes Data-Aware.
O objetivo é fazer com que o DBGrid tenha a aparência como visto na imagem abaixo:
Todo o procedimento de ajustar o componente dentro da DBGrid será realizado em tempo de execução (Run-Time).
Siga as instruções adiante para entender como funciona e ajustar a sua aplicação.
Insira no Form um componente TDBCheckBox. Ajuste a propriedade Visible deste componente como False.
Em seguida, ajuste as propriedades DataSource e DataField do TDBCheckBox para o acesso aos dados e ao
respectivo campo booleano.
Lembre-se, que você poderá também ajustar estes valores para em tempo de execução no evento OnCreate do Form,
como visto no código abaixo:
http://www.kanenberg.com Fornecido por Joomla! Produzido em: 31 March, 2009, 00:41
InfoHome Web Site
begin
DBCheckBox1.DataSource := DataSource1;
DBCheckBox1.DataField := 'SELECIONADO';
DBCheckBox1.Visible := False;
DBCheckBox1.Color := DBGrid1.Color;
DBCheckBox1.Caption := '';
DBCheckBox1.ValueChecked := 'Sim';
DBCheckBox1.ValueUnChecked := 'Não';
end;
Agora que começa a parte mais interessante do projeto, é onde vamos simplesmente desenha do DBCheckBox dentro
da célula do DBGrid.
A maneira mais fácil de conseguir realizar isso é necessário usar a API do Windows. Neste caso usaremos a função
DrawFrameControl.
Veja abaixo o código do evento OnDrawColumnCell da DBGrid, onde iremos realizar o procedimento citado acima.
State: TGridDrawState);
var
DrawState: Integer;
DrawRect: TRect;
begin
begin
begin
DBCheckBox1.Visible := True;
end;
end
else
begin
begin
DrawRect := Rect;
InflateRect(DrawRect,-1,-1);
DrawState := ISChecked[Column.Field.AsBoolean];
DBGrid1.Canvas.FillRect(Rect);
DrawFrameControl(DBGrid1.Canvas.Handle, DrawRect,
DFC_BUTTON, DrawState);
end;
end;
end;
Abaixo segue o código do evento OnColExit, o qual torna o DBCheckBox invisível quando tiramos o foco da célula da
DBGrid:
begin
DBCheckBox1.Visible := False;
end;
Porém, cabe lebrar que precisamos manipular as condições da célula do DBGrid quando simplesmente apertamos
alguma tecla e/ou clicamos dentro do campo para alterar o seu valor.
begin
begin
DBCheckBox1.SetFocus;
end;
end;
E, por final ainda vamos aproveitar para um toque final. Vamos aproveitar que as propriedades ValueChecked e
ValueUnChecked do DBCheckBox para mostrar o valor do campo quando clicarmos nele. Para isso, simplesmente
iremos alterar o Caption do DBCheckBox, em run-time.
begin
if DBCheckBox1.Checked then
DBCheckBox1.Caption := DBCheckBox1.ValueChecked
else
DBCheckBox1.Caption := DBCheckBox1.ValueUnChecked;
end;
Espero que este artigo seja de muita utilidade e tenha ajudado a tornar a interface de seu sistema com uma aparência
e funcionalidades bem legais.
Leia também.:
{quickdown:19}