Fórum Me ajudem com Checkbox na Grid #505519

26/12/2014

0

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

Responder

Posts

29/12/2014

Renato Rubinho

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
Responder

Gostei + 0

29/12/2014

Marlon Minotti

Valeu man, vou tentar e dou uma resposta mais a noite. Obrigado
Responder

Gostei + 0

29/12/2014

Marlon Minotti

Amigo, não funcionou, ainda aparece o texto.
Responder

Gostei + 0

30/12/2014

Marlon Minotti

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?
Responder

Gostei + 0

30/12/2014

Renato Rubinho

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

Dá uma olhada nesse link Checkbox - DBGrid
Responder

Gostei + 0

30/12/2014

Jiraya San

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);
Responder

Gostei + 0

30/12/2014

Marlon Minotti

Vou testar a noite e te digo.
Responder

Gostei + 0

30/12/2014

Marlon Minotti

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

Gostei + 0

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

Aceitar