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.