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.