Impressão de fotos utilizando o QuickReport

28/03/2013

2

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.

Responder

Posts

28/03/2013

Vagner Almeida

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:

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.
Responder

29/03/2013

Marcio

é só declarar a unit JPeg no uses...

uses
...., JPeg;
Responder

30/03/2013

Vagner Almeida

isso
Responder

20/02/2015

João Victor

Com esse seu codigo esta aparecendo a mesma imagem para todos os registro cadastrados, o que faço?
Responder

20/02/2015

Vagner Almeida

João Victor, detalhe melhor seu problema para que eu possa ajuda-lo.
Responder

20/02/2015

João Victor

Ao abrir o relatório so esta aparecendo a primeira imagem para todos os registro cadastrados
Responder

20/02/2015

João Victor

[img]http://arquivo.devmedia.com.br/forum/imagem/412794-20150220-140312.jpg[/img]
Responder

20/02/2015

João Victor

Tipo assim(imagem), vagner_rj.
Agradeço.
Responder

20/02/2015

Vagner Almeida

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.
Responder

20/02/2015

João Victor

[img]http://arquivo.devmedia.com.br/forum/imagem/412794-20150220-205120.png[/img]




Verifiquei tudo, mas infelizmente aparentemente está tudo de acordo.
Responder

20/02/2015

João Victor

Essas fotos são todas totalmente diferentes, mas o problema é esse - aparece sempre a foto do primeiro registro para todos os registro.
Responder

20/02/2015

Vagner Almeida

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.
Responder

20/02/2015

João Victor

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.
Responder

20/02/2015

João Victor

[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!
Responder

20/02/2015

João Victor

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.





OBS: Declarar na USES JPEG
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira