Fórum Imagem em dbgrid mestre detalhe #371923

02/07/2009

0

Tenho uma grid mestre e outra detalhe. Na grid mestre tenho um campo onde tem uma imagem de + quando clico aparece outra grid detalhe e muda a imagem para -.
Só que quando clico na imagem - ela some.
Mas deveria mudar para a imagem + e sumir com a grid detalhe.

Se alguém puder me ajudar eu agradeço, segue o endereço das imagens e do fonte:
http://img27.imageshack.us/i/imagem2sjp.png/
http://img528.imageshack.us/i/imagem1o.png/
http://rapidshare.com/files/251187945/DBGridMD.rar.html


Leufmt

Leufmt

Responder

Posts

06/07/2009

Leufmt

sobe


Responder

Gostei + 0

07/07/2009

Lehapan

Olá leufmt,

Estou lhe pasando o meu código que utilizo para desenhar o campo CheckBox no DBGrid, tentei fazer algo parecido com o seu código, mas de uma olhada para ver se não precisa de alguns ajustes, pois não testei o código.

dbgrTeste -> TDBGrid
Campo "T" deve ser do tipo inteiro

procedure dbgrTesteCellClick(Column: TColumn);
begin
  with cdsTeste do
  begin
    if  not IsEmpty then
      begin
        if  Column.Field = FindField(´T´) then
          begin
            Edit;
            FieldByName(´T´).AsInteger := Abs( FieldByName(´T´).AsInteger - 1 );
            Post;
          end
        ;
      end
    ;
  end;
end;


procedure dbgrTesteDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if  UpperCase(Column.FieldName) = UpperCase(´T´) then
      ImagemCheckBoxDBGrid( dbgrTeste, Rect, Column, State, ´1´, False, ImageList1 )
  ;
end;


{ Desenha a imagem do CheckBox na coluna do DBGrid, conforme o valor do campo
  que está sendo passado como parâmetro (ValorChecked) }
procedure ImagemCheckBoxDBGrid( DBGrid: TDBGrid; Rect: TRect; Column: TColumn;
  State: TGridDrawState; ValorChecked: string; AjustaAltura: Boolean = False;
  ImageList: TImageList);
Const
  IMG_UNCHECKED = 0;
  IMG_CHECKED   = 1;
var
  PosLeft, PosTop: integer;
begin
  if  Column.Field.AsString <> ´´ then
    begin
      DBGrid.Canvas.FillRect(Rect);

      { Tenta posicionar a imagem do CheckBok no centro da coluna,
        independentemente da largura }
      PosLeft := Round( (column.Width - ImageList.Width) / 2 );

      if  not AjustaAltura then
          PosTop := 1
      else
          PosTop := Round( (Rect.Bottom - Rect.Top) / 2 ) - 6;
      ;

      if  Column.Field.AsString = ValorChecked then
          ImageList.Draw(
            DBGrid.Canvas, Rect.Left + PosLeft, Rect.Top + PosTop, IMG_CHECKED )
      else
          ImageList.Draw(
            DBGrid.Canvas, Rect.Left + PosLeft, Rect.Top + PosTop, IMG_UNCHECKED )
      ;

    end
  ;
end;


Espero ter ajudado[/code]


Responder

Gostei + 0

07/07/2009

Leufmt

Obrigado pela atenção, mas não é isto que estou querendo


Responder

Gostei + 0

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

Aceitar