Sie sind auf Seite 1von 13

Criando relatrios em Delphi 7 - Parte 1

por Adenilton Rodrigues

A Saga dos Relatrios


Criar relatrios sempre foi um desafio aos desenvolvedores de solues para
gerenciamento de informaes em bancos de dados. O usurio quase sempre tende a
avaliar um sistema pela qualidade de suas informaes de sada. A entrada dos dados
vista como um mero detalhe necessrio ao funcionamento do conjunto.
Relatrios , indubitavelmente, o meio mais "palpvel" com que ele contar no momento
da anlise dos dados processados por seus sistemas de informaes. Qualquer software
bem projetado para controle e anlise de informaes dever produzir uma sada de dados
altura do seu input, sob pena de no atender aos propsitos de sua implantao ou no
cativar seu usurio final.
Na poca do desenvolvimento usando linguagens de interface padro texto (Cobol, Pascal,
dBase, Clipper, Fox, ... ) o desenvolvedor inventava mil e uma tcnicas para bolar "aquele
relatrio impossvel". E, mesmo com todas as dificuldades da poca, ficava pronto e
agradava a seus usurios. Investia-se muito tempo e pacincia, mas a satisfao do
solicitante pelo trabalho realizado compensava o esforo investido.
Era um modelo de desenvolvimento onde voc, desenvolvedor, teria que se preocupar com
todas as caractersticas da criao do relatrio, desde o algoritmo a ser utilizado para a
gerao das informaes at o cdigo correto a ser enviado impressora (que variava
conforme o fabricante e o padro adotado). Seu cdigo se encarregava de "posicionar" a
cabea da impressora em uma certa linha e coluna, disparar a impresso, controlar linhas,
tamanho da pgina, paginamento, cabealhos, salto de pgina, enfim, o relatrio seu, d
seu jeito...
Apareceu o Windows, e com ele novas linguagens, novas tcnicas e novos paradigmas.
Facilitou bastante o desenvolvimento de interfaces, gerenciamento de bases de dados,
expandiu o conceito de conectividade, e tornou o usurio um rei, onde a aplicao no
mais o modela, e sim, ele modela a aplicao. Uma nova tcnica foi adotada para a
construo de relatrios nos ambientes de desenvolvimento emergentes: A tcnica visual,
onde a ferramenta adotada se encarregaria de "adivinhar" as regras envolvidas no
tratamento do conjunto de dados.
A criao de um relatrio se assemelhava a construo de um brinquedo montado com
blocos plstico "LEGO". Economizou o trabalho de gerenciamento da impresso e sacrificou
a possibilidade da incorporao de recursos sofisticados conforme a necessidade do
usurio, cada vez mais exigente e criativo. Houve um "encapsulamento" do desenvolvedor
dentro das tcnicas possveis de uso dos mtodos visuais para a construo de relatrios.
Em certas circunstncias os desenvolvedores se assemelhavam ao Flintstones construindo
o mundo dos Jetsons (paus, pedras e tacapes eram utilizados para construir os possantes
veculos voadores).
Apareceram muitas ferramentas visuais (algumas excelentes por sinal) que economizavam
cdigo e prometiam criar relatrios fantsticos, chegando ao luxo de permitir ao usurio

final criar seus prprios relatrios (se eles saberiam explorar o potencial da ferramenta era
um outro problema!).
A integrao dessas ferramentas com as aplicaes desenvolvidas era (e ainda ) uma
experincia traumtica. A aplicao torna-se elemento secundrio e a ferramenta de
relatrios a maior consumidora de recursos.
Sem alternativas, os desenvolvedores partiram para o uso massivo de ferramentas de
relatrios visuais baseados na tcnica "Point and Click, Drag and Drop:". Funcionava? Sim,
desde que se limitassem ao desenvolvimento baseado em listagens, queries, agrupamentos
e bandas de dados e, colocassem na cabea de seu exigente usurio que aquele relatrio
era tudo o que ele sabia (ou podia) fazer. Cabe aqui citar aquela mxima do
desenvolvimento: "A complexidade do programa cresce tanto at exceder a competncia
do programador". Nesse contexto a competncia era limitada ausncia de flexibilidade da
ferramenta adotada.
A misso tendia a tornar-se impossvel quando o relatrio pretendido no seguia nenhuma
conveno no layout, extrao, processamento e gerao dos dados finais. A complexidade
era tanta que o uso de um QuickReport ou ReportSmith (ahh ReportSmith! algum se
lembra dele?) costumava consumir mais horas de desenvolvimento dos relatrios do que o
tempo alocado codificao do projeto. Sem contar que eles geravam um modelo chamado
"no-me-toque... seno estraga tudo". Quem de ns nunca arrastou acidentalmente um
campo de um relatrio altamente sobrecarregado e sofreu para recoloc-lo no lugar de
origem?
Na minha modesta opinio, o mal das ferramentas de construo de relatrios puramente
baseadas no mtodo visual reside na errnea assertiva de que elas podem abstrair toda e
qualquer complexidade do processamento de regras de negcios envolvendo um conjunto
de dados. Elas se propem a ser uma espcie de remdio genrico para qualquer mal. Uma
bala de prata...
Sou desenvolvedor Delphi desde a verso 1.0 (passei por todas as verses conhecidas do
Turbo Pascal). Hoje estou me adaptando verso 7.0. Nessa seta do tempo, experimentei
vrias solues para a criao de relatrios, indo do canvas da impressora ao Crystal
Reports (excelente ferramenta, diga-se de passagem). Avaliei inclusive solues de Cubo e
Business Intelligence sem nunca ter adotado uma soluo definitiva, pois conforme a
complexidade do projeto (e da cabea do usurio), ferramentas distintas seriam utilizadas,
chegando em alguns casos adoo de ferramentas mltiplas para propsitos similares.
Na poca do Delphi 1.0 (e Delphi 2.0) me aprofundei no QuickReport (ReportSmith era um
elefante branco, umas dez vezes mais pesado que sua aplicao!). QuickReport, ferramenta
interessante, pequena, leve, drag'n drop, stand-alone, 100% Delphi, boa opo? Acreditei
que sim. Comprei o pacote full com a "turma" da QuSoft, peguei o cdigo fonte e comecei
a "aventura".
Misso: Criar minha prpria biblioteca de rotinas que aliasse o poder da criao de
relatrios via cdigo runtime com a facilidade da interface grfica, seria o melhor de dois
mundos. Foi uma tima experincia, cheguei a escrever alguns artigos (procure ai pela Net.
Com um pouco de sorte voc achar algo nos mecanismos de busca, com meu nome
invariavelmente ligado ao QuickReport).

QuickReport, decepo total, era bug atrs de bug, comportamento instvel e bastante
problemtico. A quantidade de problemas detectados foi uma barreira. Semanalmente
mandava e-mail pros noruegueses pedindo uma soluo. Pasmem, existem bugs j
detectados no Delphi 1.0 e at hoje no foram corrigidos (Acho que virou feature). Foi uma
beno a Borland ter se livrado dele. No d nem para dizer que foi bom estar com voc,
brincar com voc...
O pacote do ReportBuilder da Digital-Metaphors sempre foi uma seduo, j imaginou uma
variante do Crystal Reports embutido nos meus sistemas? O usurio criando seus prprios
relatrios? uma sute realmente profissional, porm puramente visual, a tcnica de
controle de cdigo muito trabalhosa e muito presa aos objetos do relatrio. A reutilizao
de solues em outros projetos extremamente difcil, contudo isso no chega a ofuscar o
brilho do produto, suas qualidades cobrem seus defeitos.
O site do Torry me conduziu uma empresa pequena que estava comeando o
desenvolvimento de um novo produto para relatrios no Delphi 1.0, a Nevrona. Eles
lanaram no mercado um pacote de componentes sem recursos visuais. Se assemelhava
uma espcie de Printer.Canvas com preview de impresso. A soluo me chamou a ateno
pelo fato deles terem feito o caminho inverso dos outros componentes: Ao invs de partir
do modo grfico para chegar ao modo cdigo, ele partiram do modo cdigo at chegar ao
grfico. Prepararam previamente um arsenal de rotinas bsicas (tratamento de fontes,
posicionamento, cores, grficos, primitivas grficas, controle de cursor, paginao, ...) para
ento projetarem o mdulo baseado em tcnicas visuais ( a utilizada na IDE do RAVE ). O
desenvolvedor era incentivado a usar cdigo (!), a parte grfica estava implcita e s fazia
diferena no resultado final. O propsito desta soluo no era DESENHAR relatrios e sim
ESCREV-LOS.
Esse componente no era interessante, era fantstico pois dava ao desenvolvedor Delphi o
poder que faltava: usar uma linguagem poderosa para criar relatrios e assumir o controle
total do seu processamento e regras de negcios envolvidas no tratamento do conjunto de
dados. Era praticamente impossvel trabalhar com ele sem se sentir tentado a criar sua
prpria biblioteca de desenvolvimento de relatrios. Sua arquitetura era um convite
espontneo sua expanso.
Consegui enfim desenvolver minha biblioteca de criao de relatrios e a tenho utilizado ao
longo de 7 anos (ei, essa no a idade do Delphi?) sem nunca ter me deparado com
problemas de impresso de relatrios sem soluo. Muitos amigos seguiram tambm o
mesmo caminho e nem sentiram a "presena da ausncia" (parafraseando Saint-Exuperry)
do QuickReport. A adoo do RAVE pela Borland denota alis uma grande maturidade de
ambos os produtos.
O RAVE, que se chamava na poca ReportPrinter Pro, sempre concorreu juntamente com o
ReportBuilder ao prmio de melhor ferramenta de relatrios para o Delphi durante vrios
anos seguidos. Creio que chegou a ganhar alguns Delphi Informant Reader's Choice.
Com relao s tcnicas do RAVE, nada de novo foi inventado, foi apenas resgatado o
conhecimento do desenvolvedor mais experiente j acostumado a escrever relatrios que
extrapolam os limites de simples listagem de dados. Essa ser, talvez, a maior dificuldade
a ser enfrentada pelos desenvolvedores presos s tcnicas puramente visuais. Ser exigido
um conhecimento maior de algoritmos de extrao, tratamento e agrupamento de dados.

Logicamente nada impedir a utilizao da IDE do RAVE para a criao de relatrios de


forma similar ao QuickReport. Haver apenas uma sub-utilizao dos recursos
disponibilizados pelo produto e, sem muito tardar, certamente o desenvolvedor ser
forado a usar cdigo de programao para resolver um problema sem soluo atravs do
mtodo simplista de "arrastar" um objeto para a pgina.
uma ferramenta que atender plenamente do nefito usurio ao mais experiente
desenvolvedor de solues Delphi. No tenho dvida alguma de que produtos novos
surgiro estendendo os recursos disponibilizados pela engine do RAVE.
No prximo artigo apresentarei detalhes da construo de relatrios usando o RAVE.
Enfocarei o modelo baseado em cdigo de programao, afinal este o grande diferencial do
RAVE em relao s demais solues de relatrios para o Delphi.

PS: O material exposto expressa a opinio pessoal do autor baseado numa longa experincia de
desenvolvimento de solues corporativas em Delphi e ferramentas de criao de relatrios
(independentes e/ou integradas IDE da linguagem).

O autor pode ser contatado em:


URL: http:www.aden.com.br
Mail: aden@aden.com.br

Criando relatrios em Delphi 7 - Parte 2


por Adenilton Rodrigues

Conhecendo o RAVE 5.0


No artigo anterior apresentei minhas experincias com ferramentas de relatrios para
desenvolvimento de projetos Delphi. Neste estarei apresentando os componentes da paleta
RAVE 5.0 e, no prximo, partirei para a prtica da construo de relatrios usando essa
ferramenta.
Ficou bastante claro que essa sute de componentes se distingue das demais pelo fato de
possibilitar um desenvolvimento estritamente baseado em cdigo de programao Delphi.
Essa tcnica, apesar de trabalhosa, bastante flexvel, pois possibilita ao programador
mais experiente desenvolver seus prprios mtodos de criao de relatrios, sem muita
dependncia dos recursos disponibilizados pelo ambiente
grfico da ferramenta.
Porque utilizar o desenvolvimento em cdigo runtime?
Imagine a seguinte situao:
Preciso montar um Relatrio de Vendas e apresente o movimento dirio por Cidade e
por Vendedor. Seu layout dever obedecer aos seguintes critrios de impresso:
As vendas de segunda-feira quarta-feira ficaro esquerda do relatrio na
cor azul.
As vendas da quinta-feira e sexta-feira, sero impressas direita na cor verde.
As vendas do sbado sero impressas numa folha individual.
Na ltima pgina dever ser emitido um resumo semanal de vendas.
Vendedores sem vendas no perodo devero estar em negrito.
Experimente montar esse relatrio usando queries SQL em um ambiente de criao
de relatrios visuais(!): Pode at ser que voc consiga faz-lo, mas garanto que ir
gastar muito mais tempo que o seu equivalente devidamente codificado em Delphi.
Os pessimistas diro que estou sendo extremista. Claro, estou... as dificuldades que o
desenvolvedor enfrenta na construo de projetos corporativos costumam ser maiores e os
prazos cada vez menores! Esta a nossa realidade. Estaremos sempre nos deparando com
questes de difcil e trabalhosa soluo. Precisamos aplicar a ferramenta certa para cada
problema. No existe uma ferramenta mgica que atenda a uma heterogeneidade de
propsitos.
Se a construo de relatrios difceis um dos seus problemas, ento, com certeza, o
RAVE veio para facilitar bastante o seu trabalho de desenvolvimento.
Quem o RAVE 5.0?
A incorporao do RAVE pelo Delphi 7.0 foi feita de uma forma bastante confusa (creio que
foi feita s pressas). Os componentes da paleta RAVE no Delphi 7.0 no so compatveis
com o pacote oficial disponibilizado pela Nevrona em seu site. L voc encontrar o RAVE
4.09 trial para download e a 5.0 para a compra.

Os arquivos demos disponveis para download no so compatveis com o Delphi 7.0 e


RAVE 5.0, pois foram baseados no RAVE 4.09.
Houve uma mudana no nome das classes da verso 4.09 para 5.0 e alguns componentes
simplesmente desapareceram. Isto inviabilizar o uso dos exemplos de demonstrao da
verso 4.09. Quem j utilizava o RAVE (ou, no meu caso, o ReportPrinter) ter que
modificar seus projetos para garantir a compatibilizao do Delphi 5/6 com o 7.0.
Produtos de terceiros, tipo o
(http://www.pragnaan.com) no so
disponibiliza o cdigo fonte do RAVE.
nada de novo, j era assim com o
promover seus parceiros de solues.

excelente Rave for Renders da Pragnaam


compatveis. Devero ser rescritos. A Borland no
Este dever ser adquirido junto Nevrona. At a,
QuickReport. a tcnica que a Borland usa para

Percebi alguns pequenos bugs na verso 5.0 do RAVE, principalmente na sua IDE de
criao de relatrios. A Nevrona est prometendo para breve um patch de correo.
Um bug interessante (se que Bugs podem ser interessantes) acontece na verso 98 do
Windows. quando o usurio tenta salvar um relatrio criado na IDE. Uma mensagem de
erro o informar que no existe espao livre no disco rgido (!). O relatrio s ser salvo se
voc apont-lo para a pasta raiz do drive. Cheguei a essa concluso depois de perder
vrios trabalhos desenvolvidos na IDE.
O desenvolvedor inicialmente enfrentar o problema da falta de documentao e demos
atualizados para a verso adotada pelo Delphi 7.0. Isto ser apenas uma questo de
tempo, pois esta ser a soluo oficial para criao de relatrios em Delphi partir da
verso 7.0.
No percebi mudanas substanciais na engine bsica do componente. Acredito que essa
evoluo tenha caminhado basicamente para o lado do design de relatrios usando a IDE
do RAVE.
Os legionrios do ReportBuilder (http://www.digital-metaphors.com) a acharo muito
confusa, e realmente . Levem em considerao que essa IDE bastante nova, se
comparada ao ReportBuilder, que j est no mercado desde o Delphi 2.0. A Nevrona ainda
tem muito o que aprender com a Digital-Metaphors.
A
propsito,
nos
fruns
"borland.public.delphi.thirdparty-tools"
e
"borland.public.delphi.reporting-charting" est acontecendo um duelo de tits entre os
criadores do RAVE e do ReportBuilder. Vale a pena acompanh-la, uma discusso de altonvel onde cada um expe os recursos de sua ferramenta em comparao com a
concorrente. Se voc no usa News, procure pelas palavras "Delphi" "RAVE"
"ReportBuilder" no http://groups.google.com.
Para conhecer melhor o produto RAVE, recomendo o download da documentao oficial da
Nevrona nos endereos abaixo. So dois arquivos PDF (mais de 600 pginas) com uma
excelente descrio tcnica e funcional das classes do pacote.

Rave Visual Designer Documentation in Adobe Acrobat Format


http://www.nevrona.com/files/rave4.pdf
Borland Integration Guide Pro Documentation in Adobe Acrobat Format
http://www.nevrona.com/files/rppro4.pdf
No deixe de visitar tambm a seo de Tips & Tricks. A maioria das dicas esto
desatualizadas, porm o cdigo compatvel com as novas verses.
http://www.nevrona.com/rave/tips.shtml
O Delphi 7.0 traz alguns demos de relatrios do RAVE na pasta RAVE5\\DEMOS, porm a
Borland se esqueceu de um arquivo importante, o arquivo de projeto do demo (arquivo
.DPR), dificultando assim sua compilao pelos usurios com pouco conhecimento do
Delphi.
Para compil-los, crie um arquivo, DEMO.DPR, por exemplo e copie esse cdigo:
program Demo;
uses Forms,
DM in 'DM.pas' {DataModule2: TDataModule},
Main in 'Main.pas' {Form1};{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TDataModule2, DataModule2);
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Outra alternativa :
.
.
.
.
.

Crie um projeto novo;


Remova o form colocado automaticamente pelo Delphi;
Adicione o datamodule (arquivo DM.PAS) da pasta RAVE5\\DEMOS ao projeto;
Adicione o arquivo MAIN.PAS ao projeto.
Salve o projeto, compile-o.

Conhecendo o RAVE - "Report Authoring Visual Environment".


Esta srie de artigos estar apresentando apenas a parte de criao de relatrios usando o
RAVE codificado, ou seja, os relatrios sero ESCRITOS e no DESENHADOS.
Talvez num futuro eu fale do RAVE IDE.

O RAVE foi projetado a partir de 4 componentes bsicos:


TReportPrinter: Controla a impressora e seus recursos mais "baixos".
TReportFiler: Age como um cache entre a aplicao e a impressora.
TFilePrinter: Controla a interao entre o TReportFile e a impressora.
TFilePreview: Controla a visualizao do relatrio gerado pelo TReportFiler.
Para simplificar a codificao, todos os 4 objetos foram "fundidos" em um nico, chamado
TReportSystem. Este objeto o "Mapa da Mina". Ele a "engine bsica" de relatrios do
RAVE. Com ele no seu projeto, nada mais ser necessrio para a criao de relatrios
runtime. Um nico componente ser responsvel por todos os relatrios do seu projeto.
Os componentes ReportPrinter, ReportFiler, FilePrinter e FilePreview no existem no Delphi
7.0. Sumiram - assim como mais uma meia dzia de objetos que existiam no RAVE 4.09 a Nevrona alega no serem mais necessrios, pois seus recursos funcionais foram
incorporados pela IDE do RAVE. Restou apenas o ReportSystem, que, conforme foi dito
acima, incorpora todo os demais.
A classe TReportSystem mudou de nome (aii meus projetos antigos!). Agora se chama
RvSystem. Pelo menos as caractersticas desse objeto no foram radicalmente alteradas.
Os demais componentes da paleta RAVE do Delphi 7.0 so estritamente voltados para a
construo de relatrios via RAVE IDE e para a exportao de relatrios para os formatos
HTML, PDF, RTF e Texto.
No prximo artigo estaremos conhecendo e praticando o RvSystem. Realo que esse
componente tudo o que precisaremos para criar qualquer tipo de relatrio utilizando o
RAVE 5.0.

Criando relatrios em Delphi 7 - Parte 2


por Adenilton Rodrigues

Praticando o RAVE 5.0


A Classe TRvSystem
Esta classe encapsula todas as caractersticas da impressora e do formulrio de
visualizao (Preview). Ela se parece muito com o TCanvas do Delphi, a exceo de ter sido
projetada exclusivamente para a criao de relatrios. O componente RVSystem um muito
poderoso e bastante completo. Com ele no seu projeto e alguma criatividade adicional, sua
imaginao ser o limite.
Para confirmar a abrangncia desse componente, d uma olhada na quantidade de
mtodos e propriedades da classe "TRvSystem.BaseReport". So centenas de rotinas j
prontas para o uso do desenvolvedor. Encontra-se disponvel para download no site da
Nevrona a documentao completa dessa classe em formato PDF. Vale a pena baixar esse
material. Ser seu Guia de Referncia no desenvolvimento de relatrios.
O primeiro projeto
O roteiro de uso do RVSystem :

Crie a instncia do relatrio usando o mtodo .Execute (ser disponibilizado um Canvas


de Relatrio para o desenvolvedor trabalhar).

Alguns eventos sero disparados para a escrita do cdigo. Inicialmente utilizaremos os


eventos onPrintHeader e onPrint para impresso do corpo do cabealho e corpo do
relatrio respectivamente.

Escreva o relatrio usando as centenas de rotinas disponibilizadas pelo RVSystem.

Ao finalizar o processamento do cdigo, o relatrio ser apresentado em Tela ou


enviado para a impressora.

Para exemplificar, vamos fazer um pequeno projeto que imprime na posies 1cm x 1cm
(linha e coluna) da pgina a palavra Hello World com fonte Arial, tamanho 20 na cor
vermelha:
Coloque no Form um componente RVSystem, um Boto e escreva o cdigo abaixo no
evento onClick desse boto:
procedure TForm1.Button1Click(Sender: TObject);
begin
RVSystem1.SystemPreview.FormState := wsMaximized;
RVSystem1.DefaultDest := rdPreview; { poderia ser rdPrinter para impressora }
RVSystem1.SystemPrinter.Units := unCM; { Vamos trabalhar em Centimetoros }
RVSystem1.Execute;
end;

Execute seu projeto e veja que j conseguimos criar um relatrio com uma pgina em
branco.
D uma olhada com mais tempo nas propriedades do componente TRVSystem e ver que
muitas configuraes podero ser realizadas em tempo de projeto visualmente no Object
Inspector do Delphi.
Antes de partir para o cdigo do "Hello World", convm esclarecer um fato muito
importante para a criao de relatrios usando esse componente.
No tempo das linguagens texto (sweet remembers), os desenvolvedores usava como
coordenadas para a impresso de textos as linhas e colunas do papel (ou do vdeo), e a
medida era sempre baseada em um padro de fonte de tamanho fixo, ou seja, a letra "i"
ocupava o mesmo espao da letra "W", assim podia-se precisar que uma pgina A4
comportava no mximo 80 colunas (a 10 CPI) e em torno de 60 linhas (a 6 LPI). Podamos
afirmar sem medo de errar que uma string de 40 caracteres ocuparia 50% da largura da
pgina. Dentro dessa premissa, era possvel efetuar o alinhamento da cabea de impresso
simplesmente enviando espaos vazios at chegar posio desejada, e ai ento, imprimir
o prximo contedo. Era uma forma rpida de se conseguir tabulao. Algumas linguagens,
como o Clipper permitiam o posicionamento absoluto via coordenadas de impresso,
contudo ainda era baseada numa quantidade de caracteres de tamanho fixo.
No Windows a tcnica bem diferente. Existe um negcio chamado Fontes TrueType que
jogou por terra o projeto de relatrios estruturados em espaamento fixo de caracteres.
Nessa nova modalidade de impresso no possvel afirmar que o espao ocupado pelas
palavras "relatrio" ou "impresso" sero idnticas, apesar de ambas possurem a mesma
quantidade de caracteres. A diferena que nesse novo ambiente a letra "i" no ocupar o
mesmo espao imprimvel da letra "m" pois os caracteres possuem tamanho varivel.
Quem j tentou alinhar textos no Microsoft Word usando apenas a barra de espaos sabe
do que estou falando.
Nada impede contudo o uso de fontes mono-espaadas nos relatrios (aquelas em que
qualquer caracter possui o mesmo tamanho), por exemplo a Courier new. Essa no uma
boa tcnica, porm no regra.
Para permitir a tabulao da impresso, o RVSystem utiliza o posicionamento em uma
unidade de medida definida pelo usurio. O default Polegadas. Isto configurado atravs
da propriedade RVSystem1.SystemPrinter.Units. No meu exemplo, definirei que trabalharei
em Centmetros (unCM). Assim todas as vezes que eu referenciar uma impresso em uma
determinada posio da pgina estarei falando:
Imprima o texto "Hello World" na linha 1, coluna 1, eqivale a: desa o cursor 1 centmetro
abaixo da margem superior e desloque 1 centmetro partir da margem esquerda para
ento imprimir o texto. Parece confuso mas na prtica bastante simples. Para nossa
sorte, o RVSystem bastante completo e j incorpora internamente rotinas para controle
da pgina e posicionamento do cursor.

Para facilitar o mapeamento das colunas, o RVSystem dispe de uma rgua que pode ser
apresentada no Preview de Impresso, assim no ser necessrio adivinhar as
coordenadas. Para mostrar a rgua acrescente o cdigo abaixo antes do mtodo Execute:
RVSystem1.SystemPReview.RulerType := rtBothCm;
PS: a rotina de converso possua um pequeno bug na converso de polegadas para
centmetros o que provocava alguns posicionamentos errados na impresso de campos do
tipo memo. No sei se foi corrigido nesta verso (eu uso a verso anterior, e realizei
minhas prprias modificaes nos arquivos fontes).
Voltando ao nosso projeto, ao disparar o mtodo Execute, iremos utilizar o evento onPrint
para escrever o nosso "Hello World".
Uma vez disparado o mtodo Execute, e instanciado o objeto TRVSystem, o desenvolvedor
contar com uma classe interna do objeto extremamente rica em recursos, a
TBaseReport. Ela est disponvel no nosso projeto usando a seguinte sintaxe:
RVSyste1.BaseReport. Veja na documentao quantas centenas de rotinas estaro
disponveis para trabalharmos o relatrio. Essa classe nossa porta de entrada para o
mundo da escrita de relatrios.
Um cuidado a ser observado que nenhum mtodo dessa classe poder ser chamado antes
de ser acionado o mtodo Execute do RVSystem. Qualquer tentativa errnea provocar
"Access Violation", desta maneira, s utilize-a dentro dos eventos do objeto.
Veja como configurar o evento onPrint do RVSystem para imprimir o Hello World na posicao
1,1, na fonte Arial, tamanho 20, cor vermelha.
procedure TForm1.RvSystem1Print(Sender: TObject);
begin
With Sender as TBaseReport do Begin
GotoXY(1,1); // Coluna 1cm, linha 1cm
FontColor := clRed; // Modifica a fonte padro
FontSize := 20;
FontName := 'Arial';
FontColor := clRed;
Print('Hello World'); // Imprime o texto
End;
end;

Esse cdigo poderia ter sido escrito de outra forma (vide abaixo), porm optei por escrevlo da forma que a Nevrona recomenda em seus exemplos.
procedure TForm1.RvSystem1Print(Sender: TObject);
begin
RVSystem1.BaseReport.GotoXY(1,1);
RVSystem1.BaseReport.FontColor := clRed;
RVSystem1.BaseReport.FontSize := 20;
RVSystem1.BaseReport.FontName := 'Arial';
RVSystem1.BaseReport.FontColor := clRed;
RVSystem1.BaseReport.Print('Hello World');
end;
No primeiro artigo eu disse que a estrutura do RAVE era um convite tentador criao de
bibliotecas personalizadas. Veja o cdigo acima... Voc no se sente tentado a escrever
uma procedure para imprimir um texto, na posio e caractersticas visuais desejadas
usando apenas uma linha de programao? Eu no resisti... desculpe... j transformei-o
em uma procedure chamada PrintString. Veja o resultado:
Procedure PrintString(
RVSystem:TRVSystem; // Objeto do RAVE
Row: Double; // Linha
Column:Double; // Coluna
TextToPrint:String; // Texto a ser impresso
NewFontName:String; // Fonte
NewFontSize:Integer; // Tamanho
NewFontColor:TColor // Cor
);
Begin
With RVSystem.BaseReport do Begin
GotoXY(Column,Row);
FontColor := NewFontColor;
FontSize := NewFontSize;
FontName := NewFontName;
Print(TextToPrint);
End;
End;
A chamada agora no evento onPrint ser apenas:
procedure TForm1.RvSystem1Print(Sender: TObject);
begin
PrintString(RVSystem1,1,1,'Hello World','Arial',20,clRed);
end;
No est acreditando? Rode ento... Imagine as possibilidades... o RVSystem possui
centenas de mtodos prontos e voc pode criar quantos quiser e montar suas prprias
bibliotecas.
Isso foi apenas um aperitivo. Nos prximos artigos estarei abordando o controle da pgina,
impresso e bancos de dados.

Por Adenilton Rodrigues


Aden@aden.com.br
Belo Horizonte MG
2003
Este documento pode ser livremente copiado e distribudo. Sua modificao s ser
permitida mediante contato prvio com o autor.
Delphi marca registrada da Borland Inc. - www.borland.com
Windows marca registradas da Microsoft Inc. - www.microsof.com
Rave marca registrada da Nevrona Inc. - www.nevrona.com
ReportBuilder marca registrada da Digital Metaphors - www.digital-metaphors.com
QuickReport marca registrada da Qusoft AS - www.qusoft.com
Crystal Reports marca registrada da Seagate Software www.seagatesoftware.com