sexta-feira, 17 de julho de 2009

Imagem de cabeçalho dinâmica no Rave Reports

Você tem o seu sistema, emite relatórios em Rave Reports e precisa customizar o relatório para atualização dos cabeçalhos de relatório a cada novo cliente? E porque não usar cabelhos com imagens e atribui-las dinamicamente ao Rave em tempo de execução? - Neste post veremos como passar para o Rave, através de parâmetros o caminho de um Bitmap que deverá ser carregado em tempo de execução e ser exibido como sendo o cabeçalho do relatório.

Inciando pelo Rave, crie um novo documento de relatórios, crie uma estrutura utilizando os componentes Region e Band e adicione um componente Bitmap Component. Acessando agora o Event Editor do Bitmap, selecione o evento onBeforePrint e insira seguinte linha de código:

function Bitmap1_OnBeforePrint(Self: TRaveBitmap);
begin
Bitmap1.FileLink := Raveproject.getparam('pImagem');
end OnBeforePrint;


Obs.: Clique em compile e certifique-se que o código seja aceito pelo Rave.

O código faz com que o caminho seja atribuido para a imagem em tempo de execução de acordo com o valor recebido no parâmetro "pImagem" que deverá ser criado na propriedade Parameters do relatório.

Agora criando a aplicação Delphi, adicione os componente RvProject e RvSystem, faça a configuração dos mesmos (ver configurações), adicione um componente OpenDialog para localizar o Bitmap e adicione um botão vinculando a ele o seguinte código que irá atribuir o arquivo selecionado ao parâmetro e exibir o relatório:


procedure TForm1.Button1Click(Sender: TObject);
begin
OpenDialog1.Filter := 'Bitmap (*.bmp)|*.bmp';
if OpenDialog1.Execute then
begin
RvProject1.Open;
RvProject1.SelectReport('Report1',False);
RvProject1.SetParam('pImagem',OpenDialog1.FileName);
RvProject1.Execute;
end;
end;


Pronto, execute agora a aplicação e clique sobre o botão, localize a imagem do cabeçalho na extensão .bmp e veja que a mesma é exbida no relatório do Rave Reports. Na sua aplicação, crie uma seção de parâmetros em alguma tabela do banco de dados ou mesmo no arquivo de configurações *.INI (ver configurações) e mantenha o caminho do cabeçalho de relatório sempre salvo. Abraço e até o próximo post.

4 comentários:

Sem querer ser dono da verdade disse...

Quando coloco o evento onbeforeprint no bitmap, da um erro de access violation at address 00000008. Read at address 00000008. e não abre o preview.

Maikel Scheid disse...

Procure ver se não há nenhum problema no código que você adicionou no Rave Reports ou mesmo se não há algum outro problema com componentes. Faça o teste criando um relatório novo... isso é problema do Rave Reports essa mensagem que você passou.

Att

Anônimo disse...

usei somente
Bitmap1.FileLink := Raveproject.getparam('pImagem');
no evento onBeforeprint do rave, funcionou perfeitamente... obrigado por essa postagem, me ajudou bastante!

Adriano Parisi disse...

Caro Maikel,

Bem fiz tudo como esta no seu tutorial porém minha imagem não esta aparecendo não sei se é por causa que eu gero um pdf tb.

Fiz tudo no Rave, no meu Delphi esta assim:

RvProject1.SetParam('pRPS', trim(DM1.SQLQryNFRPS.AsString));
RvProject1.SetParam('pDataHora', trim(DM1.SQLQryNFNFEDATAHORA.AsString));
RvProject1.SetParam('pCodigoVerificacao', trim(DM1.SQLQryNFNFERECIBO.AsString));

RvProject1.SetParam('pLogo',vImagem); // é aqui onde chamo minha imagem (vImagem vem de um campo na tabela onde referencio o caminho + imagem)

FNFe.RvSystem1.SystemSetups := FNFe.RvSystem1.SystemSetups - [ssAllowSetup];
FNFe.RvSystem1.DefaultDest := rdFile;
FNFe.RvSystem1.DoNativeOutput := False;
FNFe.RvSystem1.RenderObject := FNFe.RvRenderPDF1;

FNFe.RvSystem1.OutputFileName := DM1.SQLQryEmpresaNFEPATH.value+
'Pasta\'+
formatdatetime('yyyymm',DM1.SQLQryNFDTEMISSAO.Value)+'\'+
DM1.SQLQryNFEmpresa.AsString+'-'+
DM1.SQLQryNFNumero.AsString+
'.pdf';

FNFe.RvProject1.Execute;

FNFe.RvProject1.Open;

FNFe.RvProject1.SelectReport('rptRPS', True);