Impressão de fotos utilizando o QuickReport
28/03/2013
0
Tenho uma tabela em paradox onde o campo FOTO (string, 20 posições) guarda o nome do arquivo da foto (ex.: gilberto.jpg).
No relatorio usando o quickreport, utilizei o componente QrImage como também o QrDbImage e em ambos não funciona.
Por favor, preciso de sua orientação em imprimir esta foto
Para teste, fiz a seguinte linha de comando: QrDbImage1.Picture.LoadFromFile('D:\NovaIEAD\Dados\gilberto.jpg');
e sempre retorna uma mensagem de erro " UNKNOWN PICTURE FILE EXTENSION(.JPG)". Também testei a seguinte linha de comando:
QrDbImage1.Picture.LoadFromFile('gilberto.jpg'). O mesmo erro acima.
Aguardo e agradeço.
Gilberto Moreira
Posts
28/03/2013
Vagner Almeida
Esforcesse um pouco para usar o FireBird que é um banco mais chegado ao paradox, mas anos luz melhor.
Tanto no FireBird como no MySQL eu uso o seguinte código:
procedure Tfrm_printpromissoria.qckrpDuplicataBeforePrint( Sender: TCustomQuickRep; var PrintReport: Boolean); var BlobStream: TStream; JPEGImage: TJPEGImage; begin with dm.qEmpresa do begin // Componente que fica no DataModule contendo o script "select" que possui o campo com a foto Close; // Fecha a tabela se estiver aberta Open; // Abre a tabela if FieldByName('foto').AsString <> '' then begin BlobStream:= FieldbyName('foto').DataSet.CreateBlobStream(FieldbyName('foto'),bmRead); JPEGImage := TJPEGImage.Create; try JPEGImage.LoadFromStream(BlobStream); dFoto.Picture.Assign(JPEGImage); fFoto.Picture.Assign(JPEGImage); finally BlobStream.Free; JPEGImage.Free; end; end; end; end; OBS.: Declare em USES as libs "JPEG" e "Classes"
Tá fácil de entender, mas como eu disse, no PARADOX eu não sei se é a mesma coisa, até porque nunca usei.
20/02/2015
João Victor
20/02/2015
Vagner Almeida
20/02/2015
João Victor
20/02/2015
João Victor
20/02/2015
Vagner Almeida
Veja se o objeto da imagem está totalmente dentro da banda que você está utilizando.
Se não resolver mande um print da tela do form.
20/02/2015
João Victor
Verifiquei tudo, mas infelizmente aparentemente está tudo de acordo.
20/02/2015
João Victor
20/02/2015
Vagner Almeida
20/02/2015
João Victor
var
jpg:TJPEGImage;
stream: TMemoryStream;
begin
inherited;
// Se houver foto para o aluno
if not (dm.tb_alunoimagem.Isnull) then begin
try
//Aloca espaço na memoria{cria instancia das classes}
jpg:=TJPEGImage.Create;
stream:=TMemoryStream.Create;
// Carrega imagem do campo imagem para stream{Memoria RAM do PC }
dm.tb_alunoimagem.SaveToStream(stream);
//Volta o ponteiro para o INICIO do stream
stream.seek(0, soFromBeginning);
//Grava o Stream pra dentro do jpg
jpg.loadFromStream(stream);
//Carrega a foto na caixa de imagem
image.picture.Assign(jpg);
//Liberar a memoria {apagar as instancias}
jpg.free;
stream.free;
except
on e:exception do begin // Caso aconteça algum erro no carregamento da imagem
jpg.free;
stream.free;
MessageBox(application.Handle, Pchar(e.Message) , Pchar('Falha ao Carregar a imagem do Aluno'), MB_OK+MB_ICONWARNING);
end;
end;
end
else begin // Se não tiver foto cadastrada
image.Picture.Assign(nil);
end;
end;
Agora essa é no DBclick da imagem, pra abrir o dialog pra carregar a foto.
procedure TF_ALUNO.imageDblClick(Sender: TObject);
var
jpg:TJPEGImage;
begin
if odfoto.execute then begin
try
// Colocar a tabela imagem em modo de edição
ds_aluno.dataset.edit;
//Criar instancia da CLASSE TJPEGIMAGE
jpg:=TJPEGImage.create;
//Salvar Imagem no Banco de dados
dm.tb_alunoimagem.LoadFromFile(odFoto.FileName);
//Carrega Imagem na instancia JPG
jpg.LoadFromFile(odfoto.FileName);
//Assimila JPG para image{Mostra imagem no formulario}
image.Picture.assign(jpg);
//Destroi a instancia jpg da imagem{Libera a memoria RAM}
jpg.free;
except
on E:exception do begin
jpg.free;
MessageBox(Application.handle,Pchar('É permitido apenas arquivo JPG para imagem'), Pchar('Falha ao carregar imagem do arquivo'), MB_OK+mb_ICONWARNING);
end;
end;
end;
end;
Esse codigo quando eu der 2 clicks na imagem ele vai carregar a imagem e salvar a foto no banco de dados.
20/02/2015
João Victor
[img]http://arquivo.devmedia.com.br/forum/imagem/412794-20150220-210946.png[/img]
vai ai a form do relatorio e a parte dos codigos.
Agradeço a atenção!
20/02/2015
João Victor
var
jpg:TJPEGImage;
stream: TMemoryStream;
begin
inherited;
// Se houver foto para o aluno
if not (dm.tb_alunoimagem.Isnull) then begin
try
//Aloca espaço na memoria{cria instancia das classes}
jpg:=TJPEGImage.Create;
stream:=TMemoryStream.Create;
// Carrega imagem do campo imagem para stream{Memoria RAM do PC }
dm.tb_alunoimagem.SaveToStream(stream);
//Volta o ponteiro para o INICIO do stream
stream.seek(0, soFromBeginning);
//Grava o Stream pra dentro do jpg
jpg.loadFromStream(stream);
//Carrega a foto na caixa de imagem
image.picture.Assign(jpg);
//Liberar a memoria {apagar as instancias}
jpg.free;
stream.free;
except
on e:exception do begin // Caso aconteça algum erro no carregamento da imagem
jpg.free;
stream.free;
MessageBox(application.Handle, Pchar(e.Message) , Pchar('Falha ao Carregar a imagem do Aluno'), MB_OK+MB_ICONWARNING);
end;
end;
end
else begin // Se não tiver foto cadastrada
image.Picture.Assign(nil);
end;
end;
Agora essa é no DBclick da imagem, pra abrir o dialog pra carregar a foto.
procedure TF_ALUNO.imageDblClick(Sender: TObject);
var
jpg:TJPEGImage;
begin
if odfoto.execute then begin
try
// Colocar a tabela imagem em modo de edição
ds_aluno.dataset.edit;
//Criar instancia da CLASSE TJPEGIMAGE
jpg:=TJPEGImage.create;
//Salvar Imagem no Banco de dados
dm.tb_alunoimagem.LoadFromFile(odFoto.FileName);
//Carrega Imagem na instancia JPG
jpg.LoadFromFile(odfoto.FileName);
//Assimila JPG para image{Mostra imagem no formulario}
image.Picture.assign(jpg);
//Destroi a instancia jpg da imagem{Libera a memoria RAM}
jpg.free;
except
on E:exception do begin
jpg.free;
MessageBox(Application.handle,Pchar('É permitido apenas arquivo JPG para imagem'), Pchar('Falha ao carregar imagem do arquivo'), MB_OK+mb_ICONWARNING);
end;
end;
end;
end;
Esse codigo quando eu der 2 clicks na imagem ele vai carregar a imagem e salvar a foto no banco de dados.
OBS: Declarar na USES JPEG
Clique aqui para fazer login e interagir na Comunidade :)