Me ajudem com Checkbox na Grid
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.
Tenho um ClientDataSet com um Field do tipo Booleano chamado SEL.
Uso Delphi XE
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
Curtidas 0
Respostas
Renato Rubinho
26/12/2014
Buenos,
Deixa a cor do texto igual à cor da célula, ficando o texto "transparente".
Abraççç,
rrubinho
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
26/12/2014
Valeu man, vou tentar e dou uma resposta mais a noite. Obrigado
GOSTEI 0
Marlon Minotti
26/12/2014
Amigo, não funcionou, ainda aparece o texto.
GOSTEI 0
Marlon Minotti
26/12/2014
Amigo, eu consegui adicionando a seguinte linha também:
Porém o texto não fica transparente totalmente, ele fica com alguns riscos de cor. como resolver?
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
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
Dá uma olhada nesse link Checkbox - DBGrid
GOSTEI 0
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
26/12/2014
Vou testar a noite e te digo.
GOSTEI 0
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