Valor do checkbox aparece no dbgrid

Delphi

24/04/2013

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

Curtidas 0

Respostas

Diego Garcia

Diego Garcia

24/04/2013

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
GOSTEI 0
Marcelo Junqueira

Marcelo Junqueira

24/04/2013

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
GOSTEI 0
Diego Garcia

Diego Garcia

24/04/2013

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;
GOSTEI 0
Diego Garcia

Diego Garcia

24/04/2013

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;
GOSTEI 0
Marcelo Junqueira

Marcelo Junqueira

24/04/2013

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.
GOSTEI 0
Diego Garcia

Diego Garcia

24/04/2013

Precisando é só falar!
GOSTEI 0
POSTAR