Buscar

Personalizando preview do rave reports

nome

Miguel Machado

Colunista ainda sem descrição. Caro colunista, por favor envie-nos sua descrição.

Personalizar o Formulário de Preview do RAVE não é uma tarefa muito simples.
A própria Nevrona já publicou várias formas de se fazer isso. Infelizmente não são práticas nem eficientes.

Vou repassar aqui duas das que considero "interessantes":

Técnica 1 - Modificar os arquivos originais e fazer a sobreposição da compilação

Se você possui o código fonte do RAVE 5.0 (Disponível pra quem pagou pela versão Borland Extended - BEX), faça o seguinte:

1. Vá ao diretório Sources do RAVE e copie os arquivos abaixo para uma outra pasta:

RpFormPreview.pas + RpFormPreview.dfm - Esses dois arquivos contém o formulário de visualização do relatório. Realize as customizações necessárias (Tradução, troca de icones, implementação de novos recursos, etc).

RpFormSetup.pas + RpFormSetup.dfm - É responsável pela apresentação do formulário de seleção do destino da impressão, configuração da impressora, seleção de páginas, etc.

Obs:
Cuidado na hora da personalização, existe um TabSheet invisível (atrás do GroupBox chamado DestGB) que contém as opções de seleção de página. Para evitar esquecimento, vá ao Object Inspector e no ComboBox dos objetos do formulário, escolha o Tabsheet2. Realize as configurações necessárias. Volte ao TabSheet1 (pelo Object Inspector) e configure suas opções conforme sua necessidade.

RpFormStatus.pas + RpFormStatus.dfm - Contém o formulário de status da impressão (aquele que é mostrado enquanto a impressão/geração do preview não finalizar).

2. Realize todas as customizações necessárias nesses arquivos.

3. Na IDE do Delphi, vá no menu principal em TOOLS/Environment Options, clique na Tabsheet "Library" e em Directories/Library Path adicione a pasta onde você realizou as modificações nos arquivos de visualização.

IMPORTANTE: Após adicionar essa pasta, arraste-a para cima de forma ficar hierarquicamente superior à pasta do RAVE 5. Melhor exemplificando, ela deverá vir antes da pasta "$(DELPHI)\Rave5".

Isto é necessário porque o Delphi quando procura pelas units declaradas nos programas o fará iniciando pela primeira pasta desta configuração e descerá até encontrá-la. A primeira sempre terá prioridade sobre as demais. Desta forma ao encontrar os arquivos modificados, ele os ignorará na pasta do rave, assim seu formulário customizado terá prioridade sobre os formulários padrões do RAVE.

4. Pronto. Crie seus relatorios normalmente e na hora da compilação o seu formulario customizado será sobreposto ao do Rave.

Técnica 2 - Usar os eventos OnOverridePreview, OnOverrideStatus e OnOverrideSetup do Objeto TRVSystem.

Esta técnica consiste em criar os 3 formulários do RAVE (Preview, Setup e Status) e forçar a engine de relatórios (TRVSystem) a acioná-los através os eventos de sobreposição de formulários OnOverrideXXXXX. É uma técnica melhor que anterior porque torna os formulários independentes das configurações do Delphi, basta adicionar as units ao seu projeto e apontar os eventos para o novo formulário.

Se você não quiser partir do zero, sugiro copiar os arquivos abaixo da pasta "Sources" do Rave5 e realizar as modificações necessárias:

RpFormPreview.pas + RpFormPreview.dfm,
RpFormSetup.pas + RpFormSetup.dfm,
RpFormStatus.pas + RpFormStatus.dfm,

1. Copie os 6 arquivos para outra pasta.
2. Mude seu nomes para evitar transtornos com os formulários originais do Rave.
Sugiro, por exemplo o seguinte padrão:

CustomFormPreview.pas + CustomFormPreview.dfm,
CustomFormSetup.pas + CustomFormSetup.dfm,
CustomFormStatus.pas + CustomFormStatus.dfm,

Abra o arquivo CustomFormPreview.pas no bloco de notas e troque o nome da unit de "unit RpFormPreview" para "unit CustomFormPreview".

Faça o mesmo para os outros arquivos.

3. Execute o Delphi, abra o arquivo CustomFormPreview e mude o nome do formulário principal de "RavePreviewForm" para "CustomPreviewForm". Salve-o.

Faça o mesmo para os outros arquivos.

Vá se acostumando com a "cara" desses 3 formulários, pois serão eles que você
irá customizar.

4. Abra novamente o arquivo "CustomPreviewForm" e realize as modificações abaixo:

Localize a string TRavePreviewForm e troque todas ocorrências por TCustomPreviewForm

5. Abra o arquivo "CustomStatusForm" e realize as modificações abaixo:

Localize a string TRaveStatusForm e troque todas ocorrências por TCustomStatusForm

6. Pronto, salve todas as modificações.

7. Para testar as customizações, crie um novo projeto contendo um TButton e um TRVSystem.
. Adicione à cláusula uses: CustomFormPreview, CustomFormStatus, CustomFormSetup
. No evento onClick do Button1 escreva: rvSystem1.Execute;
. No Evento onOverridePreview escreva o código abaixo:

case OverrideMode of
omCreate: begin
OverrideForm := TCustomPreviewForm.Create(AOwner);
OverrideForm.Caption := ReportSystem.TitlePreview;
OverrideForm.Width := ReportSystem.SystemPreview.FormWidth;
OverrideForm.Height := ReportSystem.SystemPreview.FormHeight;
OverrideForm.WindowState := ReportSystem.SystemPreview.FormState;
(OverrideForm as TCustomPreviewForm).ReportSystem := ReportSystem;

{ esta linha abaixo não é compativel com o Rave 5.0.04 }
{ Baixe a atualização para o 5.0.08 no site da borland }
{ ou então remova-a }

(OverrideForm as TCustomPreviewForm).OnAfterPreviewPrint := ReportSystem.OnAfterPreviewPrint;
end;
omShow: begin
(OverrideForm as TCustomPreviewForm).RvRenderPrinter.MacroData.Assign(ReportSystem.StorageMacroData);
(OverrideForm as TCustomPreviewForm).RvRenderPreview.MacroData.Assign(ReportSystem.StorageMacroData);

{ as duas linhas abaixo não são compativeis com o Rave 5.0.04 }
(OverrideForm as TCustomPreviewForm).RvRenderPrinter.OnDecodeImage := ReportSystem.OnDecodeImage;
(OverrideForm as TCustomPreviewForm).RvRenderPreview.OnDecodeImage := ReportSystem.OnDecodeImage;

ReportSystem.SystemPreview.InitPreview((OverrideForm as TCustomPreviewForm).RvRenderPreview);
if Assigned(ReportSystem.OnPreviewSetup) then begin
ReportSystem.OnPreviewSetup((OverrideForm as TCustomPreviewForm).RvRenderPreview);
end;

(OverrideForm as TCustomPreviewForm).InputFileName := ReportSystem.SystemFiler.Filename;
(OverrideForm as TCustomPreviewForm).InputStream := ReportSystem.SystemFiler.Stream;
(OverrideForm as TCustomPreviewForm).InitFromRPSystem;

if soPreviewModal in ReportSystem.SystemOptions then begin
OverrideForm.ShowModal;
end else begin
OverrideForm.Show;
end;
end;
omWait: begin
if not (soPreviewModal in ReportSystem.SystemOptions) then begin
repeat
Sleep(250);
Application.ProcessMessages;
until not OverrideForm.Visible;
end;
end;
omFree: begin
if (ReportSystem.SystemFiler.StreamMode in [smTempFile,smFile]) then begin
(OverrideForm as TCustomPreviewForm).RvRenderPreview.NDRStream.Free;
(OverrideForm as TCustomPreviewForm).RvRenderPreview.NDRStream := nil;
end;
FreeAndNil(OverrideForm);
end;
end;


. No Evento onOverrideSetup escreva o código abaixo:
case OverrideMode of
omCreate: begin
OverrideForm := TCustomSetupForm.Create(Self);
OverrideForm.Caption := ReportSystem.TitleSetup;
(OverrideForm as TCustomSetupForm).ReportSystem := ReportSystem;
end;
omShow: begin
with OverrideForm as TCustomSetupForm,ReportSystem do begin
PreviewSetup := false;
Aborted := ShowModal = mrCancel;
end;
end;
omWait: begin
end;
omFree: begin
FreeAndNil(OverrideForm);
end;
end;

. No Evento onOverrideStatus escreva o código abaixo:

if not (soShowStatus in ReportSystem.SystemOptions) then Exit;

case OverrideMode of
omCreate: begin
OverrideForm := TCustomStatusForm.Create(AOWner);
OverrideForm.Caption := ReportSystem.TitleStatus;
(OverrideForm as TCustomStatusForm).ReportSystem := ReportSystem;
end;
omShow: begin
with OverrideForm as TCustomStatusForm,ReportSystem do begin
BaseReport.StatusLabel := StatusLabel;
CancelButton.Caption := Trans('Cancelar');
Show;
end;
end;
omWait: begin
with OverrideForm as TCustomStatusForm,ReportSystem do begin
if soWaitForOK in SystemOptions then begin
CancelButton.Caption := Trans('Ok');
CancelButton.ModalResult := mrOk;
FormClosed := false;
repeat
Application.ProcessMessages;
until FormClosed;
end;
end;
end;
omFree: begin
FreeAndNil(OverrideForm);
end;
end;

8. Execute o programa e você verá que as customizações serão compiladas e os formulários serão sobrepostos aos standard do Rave5.

9. Você certamente achará um grande inconveniente ter que escrever todo esse código a cada novo projeto. A minha recomendação é criar uma Unit, por exemplo "CustomPreview.pas", declarar as 3 rotinas como procedure.

Para utiliza-las, bastaria adicionar a CustomPreview à cláusula Uses do seu programa e chamá-las em cada evento.

10. Infelizmente não posso publicar o código completo dos formulários aqui porque eles pertencem à Nevrona e só estão disponíveis para os usuários registrados do RAVE BEX.

Estou disponibilizando as DCU's dos arquivos modificados (clique aqui). Não garanto o funcionamento em todas as versões do RAVE (Realizei os testes nas versoes 5.0.04, 5.0.08 e 5.1.0). Estou à disposição para eventuais esclarecimentos em aden@aden.com.br.


Preview em Português






Status da impressão

Não esqueça de atualizar o RAVE. A versão que acompanha o Delphi 7.0 é a 5.0.04. Atualize para 5.0.08 em:ftp://ftpd.borland.com/devsupport/delphi/d7/rave/rave_be_5_0_8.exe

Publicidade

Vote no artigo




Quantidade de votos: 0 votos
Aceitação: 0%


Detalhes do artigo

Categoria: Componentes
Adicionado dia: 26/04/05
Por: Miguel Machado
Visualizado: 43456 vezes

Planeta Delphi - Tudo sobre programação Delphi Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009