Exibir campo de imagem (Foto) no Dbgrid

14/12/2005

15

bom dia pessoal

utilizo delphi7 e FB 1.5
tenho uma tabela q possui um campo Blob q é a foto do cliente.
como faço para exibi-la no TDBgrid padrão do delphi sem adotar componentes de 3ºs ?

obrigado

Diogo


Responder

Posts

15/12/2005

Diogoalles

olá pessoal

pesquisei , pesquisei , tentei , tentei e não consegui

será que alguem teria uma dica

obrigado


Responder

15/12/2005

Adriano Santos

olá pessoal pesquisei , pesquisei , tentei , tentei e não consegui será que alguem teria uma dica obrigado


To vendo um exemplo aqui cara, acho que vai dar certo...se der eu passo.


Responder

15/12/2005

Adriano Santos

Só precisa dar uma arrumada no tamanho das imagens.

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  bitmap : TBitmap;
  fixRect : TRect;
  bmpWidth : integer;
  imgIndex : integer;
begin
  fixRect := Rect;
  if Column.Field = EmployeeTableBMP then
  begin
    Bitmap := TBitmap.Create;
    try
      //Pega o grafico da Tabela
      Bitmap.Assign(EmployeeTable.FieldByName(´BMP´));
      //Desenha
      DBGrid1.Canvas.StretchDraw(fixRect, bitmap);
    finally
      bitmap.Free;
    end;
    // Limpa a saida do Retangulo
    fixRect := Rect;
    fixRect.Left := fixRect.Left + bmpWidth;
  end;
  //draw default text (fixed position)
  DBGrid1.DefaultDrawColumnCell(fixRect, DataCol, Column, State);
end;



Responder

20/12/2005

Diogoalles

e ai galera..

Adriano,
ocorreu o erro ´EInvalidGraphic : ´bitmap image is not valid´´
na linha Bitmap.Assign(EmployeeTable.FieldByName(´BMP´));

:roll:

o q será ?

obrigado
Diogo


Responder

20/12/2005

Adriano Santos

e ai galera.. Adriano, ocorreu o erro ´EInvalidGraphic : ´bitmap image is not valid´´ na linha Bitmap.Assign(EmployeeTable.FieldByName(´BMP´)); :roll: o q será ? obrigado Diogo


O que está armazenado no blog? Bitmap ou JPEG? Por ser isso. Fiz só levando em consideração BMP. Talvez precise de alguma adaptação a sua necessidade.


Responder

20/12/2005

Diogoalles

Já havia verificado
Estou adicionando ao Blob tipo Bitmap.
Mesmo assim ocorre o erro.

No caso se eu adicionasse um Jpeg ñ funcionaria ?

obrigado

Diogo


Responder

20/12/2005

Edilcimar

Só uma pergunta, o campo realmente tem a imagem, de repente ele está vazio!


Responder

20/12/2005

Adriano Santos

Só uma pergunta, o campo realmente tem a imagem, de repente ele está vazio!


Não se quando o campo não possui imgem pararece esta msg, mas de qualquer forma vc pode testar com NIL.

if no Bitmap = Nil then
//mostra a imagem



Responder

20/12/2005

Diogoalles

blz...
testei o campo

if EmployeeTable.FieldByName(´BMP´)) <> nil
...

e deu certo..

eu tenho o dbgrid com o tamanho das linhas alteradas, para que as imagens não fiquem totalmente cortadas,
mas só tem um problema, a imagem ocupa toda célula, fica distorcida..
vi que voce comentou sobre isso.. eu gostaria de manter ela no tamanho original.. como teria que fazer? ou no exemplo que vc postou em que parte eu devo mexer/implementar ?

obrigado
Diogo


Responder

20/12/2005

Adriano Santos

blz... testei o campo if EmployeeTable.FieldByName(´BMP´)) <> nil ... e deu certo..


Fico feliz que tenha funcionado.

eu tenho o dbgrid com o tamanho das linhas alteradas, para que as imagens não fiquem totalmente cortadas, mas só tem um problema, a imagem ocupa toda célula, fica distorcida.. vi que voce comentou sobre isso.. eu gostaria de manter ela no tamanho original.. como teria que fazer? ou no exemplo que vc postou em que parte eu devo mexer/implementar ? obrigado Diogo


Bom, não sei se entendi muito bem. Para dar um efeito diferente no dbgrid eu disse (em outro topíco a um camarada) pra ir na propriedade fonte do DBGrid e aumentar para uns 25 e depois clicar duas vezes no grid e mudar a propriedade fonte das colunas para o tamanho original...certo? [color=red:da3428c850]É só pular esta etapa que falei e tah tudo certo[/color:da3428c850]


Responder

25/01/2015

Leandro Silva

Eu não estou conseguindo. Ele me diz que TBitmap não pode fazer Create, nada que quisesse fazer com TBitmap.
Então modifique e funcionou.
Ficou assim:

procedure TIWFrameLancamento.DBGridCartoesDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  IMG       : TImage;
  fixRect   : TRect;
  imgWidth  : integer;
  imgHeight : integer;
begin
  fixRect := Rect;
  if ((Column.Title.Caption = 'IMAGEM') AND (ZQuery_CartaoIMAGEMBMP.AsString<>'')) then
  begin
    IMG := TImage.Create(Self);
    try
      //Pega o grafico da Tabela
      IMG.Picture.LoadFromFile(ZQuery_CartaoIMAGEMBMP.AsString);
      imgWidth  :=  IMG.Picture.Width;
      imgHeight :=  IMG.Picture.Height;
      //Desenha
      DBGridCartoes.Canvas.StretchDraw(fixRect, IMG.Picture.Bitmap);
    finally
      IMG.Picture.Graphic:=nil;
    end;
    // Limpa a saida do Retangulo
    fixRect := Rect;
    fixRect.Left := fixRect.Left + imgWidth;
    fixRect.Top  := fixRect.Top + imgHeight;
    if IMGCOLUM=0 then
    begin
      Column.Width := 80;
      IMGCOLUM:=1;
    end;
  end;
  //draw default text (fixed position)
  DBGridCartoes.DefaultDrawColumnCell(fixRect, DataCol, Column, State);
Responder

25/01/2015

Leandro Silva

Eu não estou conseguindo. Ele me diz que TBitmap não pode fazer Create, nada que quisesse fazer com TBitmap.
Então modifique e funcionou.
Ficou assim:

procedure TIWFrameLancamento.DBGridCartoesDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  IMG       : TImage;
  fixRect   : TRect;
  imgWidth  : integer;
  imgHeight : integer;
begin
  fixRect := Rect;
  if ((Column.Title.Caption = 'IMAGEM') AND (ZQuery_CartaoIMAGEMBMP.AsString<>'')) then
  begin
    IMG := TImage.Create(Self);
    try
      //Pega o grafico da Tabela
      IMG.Picture.LoadFromFile(ZQuery_CartaoIMAGEMBMP.AsString);
      imgWidth  :=  IMG.Picture.Width;
      imgHeight :=  IMG.Picture.Height;
      //Desenha
      DBGridCartoes.Canvas.StretchDraw(fixRect, IMG.Picture.Bitmap);
    finally
      IMG.Picture.Graphic:=nil;
    end;
    // Limpa a saida do Retangulo
    fixRect := Rect;
    fixRect.Left := fixRect.Left + imgWidth;
    fixRect.Top  := fixRect.Top + imgHeight;
    if IMGCOLUM=0 then
    begin
      Column.Width := 80;
      IMGCOLUM:=1;
    end;
  end;
  //draw default text (fixed position)
  DBGridCartoes.DefaultDrawColumnCell(fixRect, DataCol, Column, State);
End;
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira