Você está na página 1de 7

Personalizando o Formulario de Preview do RAVE.

Por Adenilton Rodrigues Personalizar o Formulrio de Preview do RAVE no uma tarefa muito simples. A prpria Nevrona j publicou vrias formas de se fazer isso. Infelizmente no so prticas nem eficientes. Vou repassar aqui duas das que considero "interessantes": Tcnica 1 - Modificar os arquivos originais e fazer a sobreposio da compilao Se voc possui o cdigo fonte do RAVE 5.0 (Disponvel pra quem pagou pela verso Borland Extended - BEX), faa o seguinte: 1. V ao diretrio Sources do RAVE e copie os arquivos abaixo para uma outra pasta: RpFormPreview.pas + RpFormPreview.dfm - Esses dois arquivos contm o formulrio de visualizao do relatrio. Realize as customizaes necessrias (Traduo, troca de icones, implementao de novos recursos, etc). RpFormSetup.pas + RpFormSetup.dfm - responsvel pela apresentao do formulrio de seleo do destino da impresso, configurao da impressora, seleo de pginas, etc. Obs: Cuidado na hora da personalizao, existe um TabSheet invisvel (atrs do GroupBox chamado DestGB) que contm as opes de seleo de pgina. Para evitar esquecimento, v ao Object Inspector e no ComboBox dos objetos do formulrio, escolha o Tabsheet2. Realize as configuraes necessrias. Volte ao TabSheet1 (pelo Object Inspector) e configure suas opes conforme sua necessidade. RpFormStatus.pas + RpFormStatus.dfm - Contm o formulrio de status da impresso (aquele que mostrado enquanto a impresso/gerao do preview no finalizar). 2. Realize todas as customizaes necessrias 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 modificaes nos arquivos de visualizao. IMPORTANTE: Aps 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 necessrio porque o Delphi quando procura pelas units declaradas nos programas o far iniciando pela primeira pasta desta configurao 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 formulrio customizado ter prioridade sobre os formulrios padres do RAVE. 4. Pronto. Crie seus relatorios normalmente e na hora da compilao o seu formulario customizado ser sobreposto ao do Rave. Tcnica 2 - Usar os eventos OnOverridePreview, OnOverrideStatus e OnOverrideSetup do Objeto TRVSystem. Esta tcnica consiste em criar os 3 formulrios do RAVE (Preview, Setup e Status) e forar a engine de relatrios (TRVSystem) a acion-los atravs os eventos de sobreposio de formulrios OnOverrideXXXXX. uma tcnica melhor que anterior porque torna os formulrios independentes das configuraes do Delphi, basta adicionar as units ao seu projeto e apontar os eventos para o novo formulrio. Se voc no quiser partir do zero, sugiro copiar os arquivos abaixo da pasta "Sources" do Rave5 e realizar as modificaes necessrias: 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 formulrios originais do Rave. Sugiro, por exemplo o seguinte padro: 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". Faa o mesmo para os outros arquivos. 3. Execute o Delphi, abra o arquivo CustomFormPreview e mude o nome do formulrio principal de "RavePreviewForm" para "CustomPreviewForm". Salve-o. Faa o mesmo para os outros arquivos. V se acostumando com a "cara" desses 3 formulrios, pois sero eles que voc ir customizar. 4. Abra novamente o arquivo "CustomPreviewForm" e realize as modificaes abaixo: Localize a string TRavePreviewForm e troque todas ocorrncias por TCustomPreviewForm 5. Abra o arquivo "CustomStatusForm" e realize as modificaes abaixo:

Localize a string TRaveStatusForm e troque todas ocorrncias por TCustomStatusForm 6. Pronto, salve todas as modificaes. 7. Para testar as customizaes, crie um novo projeto contendo um TButton e um TRVSystem. . Adicione clusula uses: CustomFormPreview, CustomFormStatus, CustomFormSetup . No evento onClick do Button1 escreva: rvSystem1.Execute; . No Evento onOverridePreview escreva o cdigo 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 no compativel com o Rave 5.0.04 } { Baixe a atualizao para o 5.0.08 no site da borland } { ou ento remova-a } (OverrideForm as TCustomPreviewForm).OnAfterPreviewPrint := ReportSystem.OnAfterPreviewPrint; end; omShow: begin (OverrideForm as TCustomPreviewForm).RvRenderPrinter.MacroData.Assign(ReportSystem.StorageMacro Data); (OverrideForm as TCustomPreviewForm).RvRenderPreview.MacroData.Assign(ReportSystem.StorageMacr oData); { as duas linhas abaixo no so 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 cdigo 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 cdigo 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 customizaes sero compiladas e os formulrios sero sobrepostos aos standard do Rave5. 9. Voc certamente achar um grande inconveniente ter que escrever todo esse cdigo a cada novo projeto. A minha recomendao criar uma Unit, por exemplo "CustomPreview.pas", declarar as 3 rotinas como procedure. Para utiliza-las, bastaria adicionar a CustomPreview clusula Uses do seu programa e cham-las em cada evento. 10. Infelizmente no posso publicar o cdigo completo dos formulrios aqui porque eles pertencem Nevrona e s esto disponveis para os usurios registrados do RAVE BEX. Estou disponibilizando as DCU's dos arquivos modificados (clique aqui). No garanto o funcionamento em todas as verses do RAVE (Realizei os testes nas versoes 5.0.04, 5.0.08 e 5.1.0). Estou disposio para eventuais esclarecimentos em aden@aden.com.br.

Preview em Portugus

Status da impresso No esquea de atualizar o RAVE. A verso 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 formao superior em Anlise de Sistemas. Consultor em Tecnologias de Desenvolvimento Internet e atualmente responde pelo Departamento de Tecnologia da SOL - Servios Online (http://www.solnet.com.br/), onde implanta solues em Delphi, Java e .NET.