Valor do checkbox aparece no dbgrid

24/04/2013

0

Bom dia.
Tenho um dbgrid e dentro dele são gerados checkbox de acordo com a quantidade de registros que tem na tabela.
Está tudo certo, ele faz certinho, porém quando clico no checkbox ele mostra o valor true ou false ao marcar ou desmarcar o checkbox, gostaria de saber como faço para ela não ficar aparecendo o valor.

Segue o código que usei para desenhar o checkbox

procedure TF_VinculoVeiTransporte.DBGrid1CellClick(Column: TColumn);
begin
DataModule1.ADOTableDET30VINVEITRANSPORTE.Edit;
if DataModule1.ADOTableDET30VINVEITRANSPORTE.FieldByName(''Transporte'').AsBoolean = true then
DataModule1.ADOTableDET30VINVEITRANSPORTE.FieldByName(''Transporte'').AsBoolean := false
else
DataModule1.ADOTableDET30VINVEITRANSPORTE.FieldByName(''Transporte'').AsBoolean := true;
DataModule1.ADOTableDET30VINVEITRANSPORTE.Post;
end;

procedure TF_VinculoVeiTransporte.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
Check: Integer;
R: TRect;
begin
if Column.FieldName = ''Transporte'' then //COLOQUE O NOME DA COLUNA, NO MEU CASO ''CONCLUIDO''
begin
DBGrid1.Canvas.FillRect(Rect);
Check := 0;
if DataModule1.ADOTableDET30VINVEITRANSPORTE.FieldByName(''Transporte'').AsBoolean = true then
Check := DFCS_CHECKED
else
Check := 0;
R:=Rect;
InflateRect(R,-2,-2); {Diminue o tamanho do CheckBox}
DrawFrameControl(DBGrid1.Canvas.Handle,R,DFC_BUTTON, DFCS_BUTTONCHECK or Check);
end;
end;

Obrigado.
Marcelo Junqueira

Marcelo Junqueira

Responder

Posts

24/04/2013

Diego Garcia

isso é meio chato mesmo, uma solução de contorno que arrumei foi deixar o grid rowSelected e fazer com que se clicar naquela célula (ou pressionar espaço por exemplo) eu marco ou desmarco o check, mas isso não fica legal se tiver mais de um checkBox por linha do grid
Responder

26/04/2013

Marcelo Junqueira

isso é meio chato mesmo, uma solução de contorno que arrumei foi deixar o grid rowSelected e fazer com que se clicar naquela célula (ou pressionar espaço por exemplo) eu marco ou desmarco o check, mas isso não fica legal se tiver mais de um checkBox por linha do grid[/quote

E como você fez essa segunda parte:
e fazer com que se clicar naquela célula (ou pressionar espaço por exemplo) eu marco ou desmarco o check, mas isso não fica legal se tiver mais de um checkBox por linha do grid

Desde ja agradeço sua ajuda
Responder

26/04/2013

Diego Garcia

procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if key = VK_SPACE then
  begin
    DBGrid1.DataSource.DataSet.Edit;
    DBGrid1.DataSource.DataSet.FieldByName('campoCheck').Value := not DBGrid1.DataSource.DataSet.FieldByName('campoCheck').AsBoolean;
    DBGrid1.DataSource.DataSet.Post;
  end;
end;


procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
  if Column.Field.FieldName = AnsiLowerCase('campoCheck') then
  begin
    DBGrid1.DataSource.DataSet.edit;
    DBGrid1.DataSource.DataSet.FieldByName('campoCheck').Value := not DBGrid1.DataSource.DataSet.FieldByName('campoCheck').AsBoolean;
    DBGrid1.DataSource.DataSet.Post;
  end;
end;
Responder

26/04/2013

Diego Garcia

uma outra dica é no evento OnGetText do field em questão colocar esse código:

procedure Tform1.dataSetCampoCheckGetText(Sender: TField;
  var Text: string; DisplayText: Boolean);
begin
  Text := EmptyStr;
end;
Responder

26/04/2013

Marcelo Junqueira

uma outra dica é no evento OnGetText do field em questão colocar esse código:

procedure Tform1.dataSetCampoCheckGetText(Sender: TField;
  var Text: string; DisplayText: Boolean);
begin
  Text := EmptyStr;
end;


drgarcia1986 muito obrigado pela ajuda.
Responder

26/04/2013

Diego Garcia

Precisando é só falar!
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar