Fórum Exibir campo de imagem (Foto) no Dbgrid #305368
14/12/2005
0
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
Diogoalles
Curtir tópico
+ 0Posts
15/12/2005
Diogoalles
pesquisei , pesquisei , tentei , tentei e não consegui
será que alguem teria uma dica
obrigado
Gostei + 0
15/12/2005
Adriano Santos
To vendo um exemplo aqui cara, acho que vai dar certo...se der eu passo.
Gostei + 0
15/12/2005
Adriano Santos
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;
Gostei + 0
20/12/2005
Diogoalles
Adriano,
ocorreu o erro ´EInvalidGraphic : ´bitmap image is not valid´´
na linha Bitmap.Assign(EmployeeTable.FieldByName(´BMP´));
:roll:
o q será ?
obrigado
Diogo
Gostei + 0
20/12/2005
Adriano Santos
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.
Gostei + 0
20/12/2005
Diogoalles
Estou adicionando ao Blob tipo Bitmap.
Mesmo assim ocorre o erro.
No caso se eu adicionasse um Jpeg ñ funcionaria ?
obrigado
Diogo
Gostei + 0
20/12/2005
Edilcimar
Gostei + 0
20/12/2005
Adriano Santos
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
Gostei + 0
20/12/2005
Diogoalles
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
Gostei + 0
20/12/2005
Adriano Santos
Fico feliz que tenha funcionado.
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]
Gostei + 0
25/01/2015
Leandro Silva
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);Gostei + 0
25/01/2015
Leandro Silva
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;Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)