Imprimindo Relatório com VCL Crystal Reports XI - Delphi

Veja nesta Quick como criar um exemplo para imprimir o relatório, e construir um singleton para o mesmo.

Olá galera, nesta Quick Tips, irei mostrar um exemplo prático usando a versão do Crystal Reports XI com Delphi 2010. Criaremos uma nova aplicação e vamos adicionar um botão para fazer o exemplo, veja a codificação da Unit. Logo observe também que temos que dar uses em UCrpe32.

unit uFrmPrincipal; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, UCrpeClasses, UCrpe32, StdCtrls, Buttons; type TFrmPrincipal = class(TForm) BtnVisualizar: TBitBtn; procedure BtnVisualizarClick(Sender: TObject); private { Private declarations } public { Public declarations } { Observe que criamos um objeto, herdado da Classe TCrpe, que seria o componente responsável pela impressão do Relatório} Crpe: TCrpe; end; var FrmPrincipal: TFrmPrincipal; implementation {$R *.dfm} procedure TFrmPrincipal.BtnVisualizarClick(Sender: TObject); begin { Observe que é necessário criar o objeto Crpe, antes de usar o mesmo} Crpe := TCrpe.Create(Self); Crpe.Clear; Crpe.Printjobs(1); { Estou utilizando um relatório que se encontra junto com a aplicação, e o nome do mesmo é rptcliente.rpt} Crpe.ReportName:= ExtractFileDir(Application.ExeName) + '\rptcliente.rpt'; { Observe que podemos visualizar} Crpe.output := toWindow; { Observe que podemos exportar} Crpe.output := toExport; { Observe que podemos imprimir direto} Crpe.output := toPrinter; Crpe.execute; end; end.

Para todos os efeitos, pensando em evitar termos várias instâncias do objeto Crpe, é interessante criar um Singleton.

Agora codificando a unit, adicione uma nova e salve com o nome uCrpSingleton :

unit uCrpSingleton; interface uses UCrpe32; Type TCrpSingleton = class(TCrpe) private { private declarations } class var FInstance: TCrpSingleton; class var FRelatorio: String; constructor CreatePrivate; protected { protected declarations } public { public declarations } class function GetInstance: TCrpSingleton; static; class procedure Imprimir; class property Relatorio:String read FRelatorio write FRelatorio; published { published declarations } end; implementation { TCrpSingleton } class procedure TCrpSingleton.Imprimir; begin if Assigned(FInstance) then begin FInstance.Clear; FInstance.Printjobs(1); FInstance.ReportName:= Relatorio; FInstance.Output := toWindow; FInstance.Execute; end; end; constructor TCrpSingleton.CreatePrivate; begin inherited Create(Nil); end; class function TCrpSingleton.GetInstance: TCrpSingleton; begin if not Assigned(FInstance) then FInstance := TCrpSingleton.CreatePrivate; Result := FInstance; end; end.

Bom é isso ai meus caros, qualquer dúvidas não deixem de mandar e-mail para tirar dúvidas ou trocar ideias.

Fico por aqui até a próxima Quick Tip.

Artigos relacionados