Me ajudem com Checkbox na Grid

Delphi

26/12/2014

Boa noite pessoal, eu sei que essa pergunta já foi feita por vários membros, porém as respostas ou os tópicos apresentados como soluções foram vagas. Eu consegui em meio a vários comentários a conseguir colocar o checkbox na grid, mas quando eu seleciono as linhas, aparace no fundo do checkbox "False" ou "True". Gostaria que analisassem o meu código e me orientassem.
procedure TfrmEnvSMS.gridTelefonesCellClick(Column: TColumn);
begin
  with dmDados do
  begin
    CDSNumTel.Edit;

    if CDSNumTelSEL.Value = False then
      CDSNumTelSEL.Value := True
    else
      CDSNumTelSEL.Value := False;

    CDSNumTel.Post;
  end;
end;



procedure TfrmEnvSMS.gridTelefonesDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  Check: Integer;
  R: TRect;
begin
  with dmDados do
  begin
    //Desenha um checkbox no dbgrid
    if Column.FieldName = 'SEL' then
    begin
      gridTelefones.Canvas.FillRect(Rect);
      Check := 0;
      if CDSNumTelSEL.Value = True then
        Check := DFCS_CHECKED
      else
        Check := 0;
      R:=Rect;
      InflateRect(R,-2,-2); {Diminue o tamanho do CheckBox}
      DrawFrameControl(gridTelefones.Canvas.Handle,R,DFC_BUTTON, DFCS_BUTTONCHECK or Check);
    end;
  end;
end;


Tenho um ClientDataSet com um Field do tipo Booleano chamado SEL.
Uso Delphi XE
Marlon Minotti

Marlon Minotti

Curtidas 0

Respostas

Renato Rubinho

Renato Rubinho

26/12/2014

Buenos,

Deixa a cor do texto igual à cor da célula, ficando o texto "transparente".

procedure TfrmEnvSMS.gridTelefonesDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  Check: Integer;
  R: TRect;
begin
  with dmDados do
  begin
    //Desenha um checkbox no dbgrid
    if Column.FieldName = 'SEL' then
    begin
      // Deixa a cor do texto igual à cor da celula, ficando o texto "transparente"
      gridTelefones.Canvas.Font.Color  := gridTelefones.Canvas.Brush.Color;
      // ####

      gridTelefones.Canvas.FillRect(Rect);
      Check := 0;
      if CDSNumTelSEL.Value = True then
        Check := DFCS_CHECKED
      else
        Check := 0;
      R:=Rect;
      InflateRect(R,-2,-2); {Diminue o tamanho do CheckBox}
      DrawFrameControl(gridTelefones.Canvas.Handle,R,DFC_BUTTON, DFCS_BUTTONCHECK or Check);
    end;
  end;
end;


Abraççç,
rrubinho
GOSTEI 0
Marlon Minotti

Marlon Minotti

26/12/2014

Valeu man, vou tentar e dou uma resposta mais a noite. Obrigado
GOSTEI 0
Marlon Minotti

Marlon Minotti

26/12/2014

Amigo, não funcionou, ainda aparece o texto.
GOSTEI 0
Marlon Minotti

Marlon Minotti

26/12/2014

Amigo, eu consegui adicionando a seguinte linha também:
 
 gridTelefones.DefaultDrawDataCell(Rect, gridTelefones.columns[datacol].field, State);


Porém o texto não fica transparente totalmente, ele fica com alguns riscos de cor. como resolver?
GOSTEI 0
Renato Rubinho

Renato Rubinho

26/12/2014

Pensei que deixando a cor igual não ficaria visível. Provavelmente alguma falha no canvas.

Dá uma olhada nesse link Checkbox - DBGrid
GOSTEI 0
Jiraya San

Jiraya San

26/12/2014

Como o rrubinho me indicou em outro post, para mim resolvi fazendo assim:

dbgDados.Canvas.Font.Color := clWindow;
dbgDados.Canvas.Brush.Color := clWindow;
dbgDados.Canvas.FillRect(Rect);
GOSTEI 0
Marlon Minotti

Marlon Minotti

26/12/2014

Vou testar a noite e te digo.
GOSTEI 0
Marlon Minotti

Marlon Minotti

26/12/2014

Isso aí amigo, deu certinho. Jiraya sempre Jiraya kkkkkk... Obrigado man, obrigado pela força também rrubinho. Resolvido
GOSTEI 0
POSTAR