DBCheckbox no DBGrid - De outra maneira...

Delphi

04/05/2005

Bom dia,

Estava procurando aqui no fórum uma forma de colocar o DBCheckBox dentro do DBGrid, e encontrei.

Mas a minha questão é a seguinte, no mesmo formulário eu tenho 24 DBCheckBox que setam a mesma informação. É possível aproveita-los?


Douglasf

Douglasf

Curtidas 0

Respostas

Raserafim

Raserafim

04/05/2005

douglas, aproveitando, vc pode dizer quais tópicos lhe ajudou a esclarecer como colocar DBCheckBox dentro do DBGrid?


GOSTEI 0
Douglasf

Douglasf

04/05/2005

Como não tenho a pagina irei colocar do jeito que fiz adaptado ao que eu queria, que no caso era s para marcado e n para desmarcado.

Coloquei um ImageList com duas imagens, de desmarcado e marcado.

no Evento OnDrawColumn vem o código:

procedure TfrmCuidados.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
var i : integer;
begin
  for i := 0 to DataModule.Query.FieldCount -1 do
  begin
    if Column.Field.Tag <> 0 then
    begin
      if Column.Field.Tag = DataModule.Query.Fields[i].Tag then
      begin
        DBGrid1.Canvas.FillRect(Rect);
        ImageList1.Draw(DBGrid1.canvas, Rect.Left + 10, Rect.Top + 1, 0);

        if dmPE.qryCuidado.Fields[i].AsString= ´s´ then
          ImageList1.Draw(DBGrid1.canvas, Rect.Left + 10, Rect.Top + 1, 1)
        else
          ImageList1.Draw(DBGrid1.canvas, Rect.Left + 10, Rect.Top + 1, 0);
      end;
    end;
  end;
end;


no caso é só isso.

para isso funcionar ao clicarmos na coluna coloquei :

 with DataModule do
 begin
   Query.Edit;
   if (Column.Field.Tag > 0) and  (Column.Field.Tag < 25) then
     if Column.Field.AsString = ´n´ then
       Column.Field.AsString := ´s´
     else
       Column.Field.AsString := ´n´;
  end;



GOSTEI 0
Douglasf

Douglasf

04/05/2005

Ops....

no código vai aparecer algo como Column.Field.Tag > 0 ou Column.Field.Tag > 25.

para diferenciar os campos, que no caso é as horas do dias que vai de 1 a 24.


GOSTEI 0
Douglasf

Douglasf

04/05/2005

Aproveitando este meu tópico....


estou enfrentando um problema... como citado acima estou utilizando esta função para quando clicar na celula o checkbox no grid aparecer selecionado:

 with DataModule do
 begin
   Query.Edit;
   if (Column.Field.Tag > 0) and  (Column.Field.Tag < 25) then
     if Column.Field.AsString = ´n´ then
       Column.Field.AsString := ´s´
     else
       Column.Field.AsString := ´n´;
  end; 


o problema é que ao clicar mais de uma vez em cima do grid, parece que a imagem vai para segundo plano e o que é mostrado é o valor real do campos, que no caso é[color=red:13d8dd7f09] s[/color:13d8dd7f09] para marcado e [color=red:13d8dd7f09]n[/color:13d8dd7f09] para desmarcado. Tem como colocar imagem para aparecer sempre em cima do grid?


GOSTEI 0
Douglasf

Douglasf

04/05/2005

sobe


GOSTEI 0
POSTAR