Impressão de fotos utilizando o QuickReport
Prezado,
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.
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
Curtidas 0
Respostas
Vagner Almeida
28/03/2013
Olha, no Paradox eu não sei, até porque eu nunca quis ter o trabalho de montar um software para depois migrar de Banco de Dados.
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:
Tá fácil de entender, mas como eu disse, no PARADOX eu não sei se é a mesma coisa, até porque nunca usei.
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.
GOSTEI 0
Marcio
28/03/2013
é só declarar a unit JPeg no uses...
uses
...., JPeg;
uses
...., JPeg;
GOSTEI 0
Vagner Almeida
28/03/2013
isso
GOSTEI 0
João Victor
28/03/2013
Com esse seu codigo esta aparecendo a mesma imagem para todos os registro cadastrados, o que faço?
GOSTEI 0
Vagner Almeida
28/03/2013
João Victor, detalhe melhor seu problema para que eu possa ajuda-lo.
GOSTEI 0
João Victor
28/03/2013
Ao abrir o relatório so esta aparecendo a primeira imagem para todos os registro cadastrados
GOSTEI 0
João Victor
28/03/2013
[img]http://arquivo.devmedia.com.br/forum/imagem/412794-20150220-140312.jpg[/img]
GOSTEI 0
João Victor
28/03/2013
Tipo assim(imagem), vagner_rj.
Agradeço.
Agradeço.
GOSTEI 0
Vagner Almeida
28/03/2013
Grave imagens totalmente diferentes nos registros e faça o teste, porque o nome que está aparecendo na imagem não está se repetindo.
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.
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.
GOSTEI 0
João Victor
28/03/2013
[img]http://arquivo.devmedia.com.br/forum/imagem/412794-20150220-205120.png[/img]
Verifiquei tudo, mas infelizmente aparentemente está tudo de acordo.
Verifiquei tudo, mas infelizmente aparentemente está tudo de acordo.
GOSTEI 0
João Victor
28/03/2013
Essas fotos são todas totalmente diferentes, mas o problema é esse - aparece sempre a foto do primeiro registro para todos os registro.
GOSTEI 0
Vagner Almeida
28/03/2013
Mande o print do FORM em tempo de desenvolvimento, com os componentes do quick e se possível o trecho do script que você utiliza para carregar a foto.
GOSTEI 0
João Victor
28/03/2013
Esse aqui é o codigo pra colocar a image no banco. Codigo usando o ONDATACHANGE do datasource:
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.
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.
GOSTEI 0
João Victor
28/03/2013
[img]http://arquivo.devmedia.com.br/forum/imagem/412794-20150220-210917.png[/img]
[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!
[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!
GOSTEI 0
João Victor
28/03/2013
Esse aqui é o codigo pra colocar a image no banco. Codigo usando o ONDATACHANGE do datasource:
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.
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
GOSTEI 0
Vagner Almeida
28/03/2013
Amigo!
Tive um imprevisto aqui, e não vou poder te dar atenção agora, mas vamos fazer o seguinte...
Vou mais tarde te mando um form de um de meus sistemas para você utilizar como exemplo.
Assim que eu folgar aqui entro em contato novamente pra ver se você conseguiu desenrolar.
Aproveitando, teste o fast report eu migrei do quick para o fast, é muito mais fácil e anos luz mais produtivo.
Para migrar, remontar os relatórios não dará muito trabalho, o fast é muito bom.
Mando o form com os fontes ainda hoje, assim que puder. (provavelmente na parte da tarde)
Abraços...
Tive um imprevisto aqui, e não vou poder te dar atenção agora, mas vamos fazer o seguinte...
Vou mais tarde te mando um form de um de meus sistemas para você utilizar como exemplo.
Assim que eu folgar aqui entro em contato novamente pra ver se você conseguiu desenrolar.
Aproveitando, teste o fast report eu migrei do quick para o fast, é muito mais fácil e anos luz mais produtivo.
Para migrar, remontar os relatórios não dará muito trabalho, o fast é muito bom.
Mando o form com os fontes ainda hoje, assim que puder. (provavelmente na parte da tarde)
Abraços...
GOSTEI 0
João Victor
28/03/2013
Ok, muito obrigado!
GOSTEI 0