Personalizando o Formulario de Preview do RAVE.
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
Adenilton Rodrigues tem formação superior em Análise de Sistemas. É Consultor em Tecnologias de Desenvolvimento Internet e atualmente responde pelo Departamento de Tecnologia da SOL - Serviços Online (http://www.solnet.com.br/), onde implanta soluções em Delphi, Java e .NET. |