PREVIEW personalizado do Quick Report com problemas
Caros Colegas
Estou com o seguinte problema ao criar o Preview personalizado:
O problema é o seguinte:
Tenho um form ´FCprcmb01´, com o cadastro dos dados que irão sair no relatório do QuickReport Personalizado.
Ao setar esta opção, imprimir relatório, localizada dentro do form “FCprcmb01”, abre o segundo form ´FRprcmb01´ no qual tem o QuickRep1, com o relatório que vai ser carregado no onPreview personalizado com o seguinte nome ´FQRprevx´, no qual este preview personalizado tem o Butão ´Enviar´, este botão enviar envia o relatório por e-mail com o Indy. Até este ponto está tudo correto.
O problema é que ao fechar o Preview personalizado, abaixo aparece o Form anterior, o do cadastro ´FCprcmb01´, e este Form “FCprcmb01”, congela, não fecha mais, somente com CTRL+Alt+Del
Se eu tirar o preview personalizado o erro não acontesse mais, funciona perfeitamente.....
Alguma coisa ta ficando presa e trava o sistema, só sendo possível finalizar com CRRL + ALT + DEL.
Segue abaixo a Rotina do Form com o preview personalizado.
Rorina do Form do Cadastro “FCprcmb01” que Chama o Preview Personalizado:
Colocamos o seguinte código no evento OnPreview do componente TQuickRep:
procedure TFRprcmb01.QuickRep1Preview(Sender: TObject);
begin
//Move o relatório URxxxmb01 para o papel do QRPrevx
FQRprevx.QRPreview1.qrPrinter := TqrPrinter(Sender);
FQRprevx.Show;
end;
Rotina do Preview Personalizado:
unit UQRprevx;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Buttons, StdCtrls, ExtCtrls, QRPrntr, ComCtrls, QRPDFFilt, Gauges,
IdIntercept, IdLogBase, IdLogEvent, IdAntiFreezeBase, IdAntiFreeze,
IdMessage, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdMessageClient, IdSMTP;
type
TFQRprevx = class(TForm)
QRPreview1: TQRPreview;
Panel1: TPanel;
Label1: TLabel;
Edit1: TEdit;
sbFirst: TSpeedButton;
sbPrior: TSpeedButton;
sbNext: TSpeedButton;
sbLast: TSpeedButton;
sbPrintSetup: TSpeedButton;
sbPrint: TSpeedButton;
Label2: TLabel;
sbSend: TSpeedButton;
sbSave: TSpeedButton;
sbOpen: TSpeedButton;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
BitBtn1: TBitBtn;
StatusBar1: TStatusBar;
sbZoom100: TSpeedButton;
sbZoom90: TSpeedButton;
sbZoom50: TSpeedButton;
Gauge1: TGauge;
procedure sbZoom50Click(Sender: TObject);
procedure sbZoom90Click(Sender: TObject);
procedure sbZoom100Click(Sender: TObject);
procedure sbFirstClick(Sender: TObject);
procedure sbPriorClick(Sender: TObject);
procedure Edit1Change(Sender: TObject);
procedure sbNextClick(Sender: TObject);
procedure sbLastClick(Sender: TObject);
procedure sbPrintSetupClick(Sender: TObject);
procedure sbPrintClick(Sender: TObject);
procedure sbSaveClick(Sender: TObject);
procedure sbOpenClick(Sender: TObject);
procedure sbSendClick(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure QRPreview1PageAvailable(Sender: TObject; PageNum: Integer);
procedure FormCreate(Sender: TObject);
procedure Progress;
private
{ Private declarations }
Gauge : TProgressBar;
LastProgress : integer;
public
procedure ChecaPaginas;
end;
var
FQRprevx: TFQRprevx;
implementation
Uses URprcmb01, UQSendMail, UCprcmb01;
{$R *.DFM}
procedure TFQRprevx.sbZoom50Click(Sender: TObject);
begin
try
qrPreview1.Zoom := 50;
except
end;
end;
procedure TFQRprevx.sbZoom90Click(Sender: TObject);
begin
try
qrPreview1.Zoom := 90;
except
end;
end;
procedure TFQRprevx.sbZoom100Click(Sender: TObject);
begin
try
qrPreview1.Zoom := 100;
except
end;
end;
procedure TFQRprevx.sbFirstClick(Sender: TObject);
begin
qrPreview1.PageNumber := 1;
ChecaPaginas;
end;
procedure TFQRprevx.sbPriorClick(Sender: TObject);
begin
qrPreview1.PageNumber := QrPreview1.pageNumber - 1;
ChecaPaginas;
end;
procedure TFQRprevx.Edit1Change(Sender: TObject);
begin
try
qrPreview1.PageNumber:=StrToInt(Edit1.Text);
except
end;
end;
procedure TFQRprevx.sbNextClick(Sender: TObject);
begin
qrPreview1.PageNumber := qrPreview1.PageNumber + 1;
ChecaPaginas;
end;
procedure TFQRprevx.sbLastClick(Sender: TObject);
begin
QrPreview1.Pagenumber := QrPreview1.QRPrinter.PageCount;
ChecaPaginas;
end;
procedure TFQRprevx.sbPrintSetupClick(Sender: TObject);
begin
qrPreview1.qrPrinter.PrintSetup;
end;
procedure TFQRprevx.sbPrintClick(Sender: TObject);
begin
qrPreview1.qrPrinter.Print;
end;
procedure TFQRprevx.sbSaveClick(Sender: TObject);
begin
if SaveDialog1.Execute then
begin
SaveDialog1.FileName := ´´;
SaveDialog1.Filter := ´*.PDF´;
SaveDialog1.DefaultExt := ´PDF´;
SaveDialog1.InitialDir := ´C:\PetB\00003-00001´;
end;
end;
procedure TFQRprevx.sbOpenClick(Sender: TObject);
begin
if OPenDialog1.Execute then
begin
OPenDialog1.FileName := ´´;
OpenDialog1.Filter := ´*.QRP´;
OpenDialog1.DefaultExt := ´QRP´;
OPenDialog1.InitialDir := ´C:\PetB\00003-00001´;
end;
end;
procedure TFQRprevx.sbSendClick(Sender: TObject);
begin
FQSendMail.ShowModal;
end;
procedure TFQRprevx.BitBtn1Click(Sender: TObject);
begin
FRprcmb01.Query1.Active := False;
FRprcmb01.Query2.Active := False;
FRprcmb01.Query3.Active := False;
FRprcmb01.Query4.Active := False;
FRprcmb01.Query5.Active := False;
FRprcmb01.Query6.Active := False;
FRprcmb01.Query7.Active := False;
Close;
FQRprevx.QRPreview1.qrPrinter.Free;
FRprcmb01.Close;
FCprcmb01.TabSheet1.Show;
FCprcmb01.BitBtn7.SetFocus;
end;
procedure TFQRprevx.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FRprcmb01.Query1.Active := False;
FRprcmb01.Query2.Active := False;
FRprcmb01.Query3.Active := False;
FRprcmb01.Query4.Active := False;
FRprcmb01.Query5.Active := False;
FRprcmb01.Query6.Active := False;
FRprcmb01.Query7.Active := False;
FQRprevx.QRPreview1.qrPrinter.Free;
FRprcmb01.Close;
end;
procedure TFQRprevx.ChecaPaginas;
begin
Edit1.Text := Inttostr(qrPreview1.PageNumber);
Label1.Caption := ´ de ´+Inttostr(qrPreview1.qrPrinter.PageCount);
sbFirst.Enabled := (QrPreview1.PageNumber > 1);
sbPrior.Enabled := (qrPreview1.PageNumber > 1);
sbNext.Enabled := (QrPreview1.PageNumber < qrPreview1.qrPrinter.PageCount);
StatusBar1.Panels[1].Text := ´Página ´+ IntToStr(QRPreview1.PageNumber) +
´ de ´ +
IntToStr(QRPreview1.QRPrinter.PageCount);
StatusBar1.Panels[2].Text := FRprcmb01.QuickRep1.ReportTitle;
FQRprevx.Caption := FRprcmb01.QuickRep1.ReportTitle;
end;
procedure TFQRprevx.QRPreview1PageAvailable(Sender: TObject;
PageNum: Integer);
begin
checapaginas;
QRPreview1.Zoom := 90;
Progress;
end;
procedure TFQRprevx.Progress;
begin
if Gauge1.Progress >= LastProgress + 5 then
begin
StatusBar1.Panels[0].Text := IntToStr(Gauge1.Progress)+´¬´;
LastProgress := Gauge1.Progress;
end;
if (Gauge1.Progress = 0) or
(Gauge1.Progress = 100) then
StatusBar1.Panels[0].Text := ´´;
end;
procedure TFQRprevx.FormCreate(Sender: TObject);
begin
if (QRPrinter <> nil) and
(QRPrinter.Title <> ´´) then
Caption := QRPrinter.Title;
StatusBar1.Panels[2].Text := FRprcmb01.QuickRep1.ReportTitle;
QRPreview1.Zoom := 90;
Gauge1.Top := 2;
Gauge1.Left := 2;
Gauge1.Height := 10;
Gauge1.Width := 100;
LastProgress := 0;
end;
end.
Agradeço desde já pela ajuda.
Estou com o seguinte problema ao criar o Preview personalizado:
O problema é o seguinte:
Tenho um form ´FCprcmb01´, com o cadastro dos dados que irão sair no relatório do QuickReport Personalizado.
Ao setar esta opção, imprimir relatório, localizada dentro do form “FCprcmb01”, abre o segundo form ´FRprcmb01´ no qual tem o QuickRep1, com o relatório que vai ser carregado no onPreview personalizado com o seguinte nome ´FQRprevx´, no qual este preview personalizado tem o Butão ´Enviar´, este botão enviar envia o relatório por e-mail com o Indy. Até este ponto está tudo correto.
O problema é que ao fechar o Preview personalizado, abaixo aparece o Form anterior, o do cadastro ´FCprcmb01´, e este Form “FCprcmb01”, congela, não fecha mais, somente com CTRL+Alt+Del
Se eu tirar o preview personalizado o erro não acontesse mais, funciona perfeitamente.....
Alguma coisa ta ficando presa e trava o sistema, só sendo possível finalizar com CRRL + ALT + DEL.
Segue abaixo a Rotina do Form com o preview personalizado.
Rorina do Form do Cadastro “FCprcmb01” que Chama o Preview Personalizado:
Colocamos o seguinte código no evento OnPreview do componente TQuickRep:
procedure TFRprcmb01.QuickRep1Preview(Sender: TObject);
begin
//Move o relatório URxxxmb01 para o papel do QRPrevx
FQRprevx.QRPreview1.qrPrinter := TqrPrinter(Sender);
FQRprevx.Show;
end;
Rotina do Preview Personalizado:
unit UQRprevx;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Buttons, StdCtrls, ExtCtrls, QRPrntr, ComCtrls, QRPDFFilt, Gauges,
IdIntercept, IdLogBase, IdLogEvent, IdAntiFreezeBase, IdAntiFreeze,
IdMessage, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdMessageClient, IdSMTP;
type
TFQRprevx = class(TForm)
QRPreview1: TQRPreview;
Panel1: TPanel;
Label1: TLabel;
Edit1: TEdit;
sbFirst: TSpeedButton;
sbPrior: TSpeedButton;
sbNext: TSpeedButton;
sbLast: TSpeedButton;
sbPrintSetup: TSpeedButton;
sbPrint: TSpeedButton;
Label2: TLabel;
sbSend: TSpeedButton;
sbSave: TSpeedButton;
sbOpen: TSpeedButton;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
BitBtn1: TBitBtn;
StatusBar1: TStatusBar;
sbZoom100: TSpeedButton;
sbZoom90: TSpeedButton;
sbZoom50: TSpeedButton;
Gauge1: TGauge;
procedure sbZoom50Click(Sender: TObject);
procedure sbZoom90Click(Sender: TObject);
procedure sbZoom100Click(Sender: TObject);
procedure sbFirstClick(Sender: TObject);
procedure sbPriorClick(Sender: TObject);
procedure Edit1Change(Sender: TObject);
procedure sbNextClick(Sender: TObject);
procedure sbLastClick(Sender: TObject);
procedure sbPrintSetupClick(Sender: TObject);
procedure sbPrintClick(Sender: TObject);
procedure sbSaveClick(Sender: TObject);
procedure sbOpenClick(Sender: TObject);
procedure sbSendClick(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure QRPreview1PageAvailable(Sender: TObject; PageNum: Integer);
procedure FormCreate(Sender: TObject);
procedure Progress;
private
{ Private declarations }
Gauge : TProgressBar;
LastProgress : integer;
public
procedure ChecaPaginas;
end;
var
FQRprevx: TFQRprevx;
implementation
Uses URprcmb01, UQSendMail, UCprcmb01;
{$R *.DFM}
procedure TFQRprevx.sbZoom50Click(Sender: TObject);
begin
try
qrPreview1.Zoom := 50;
except
end;
end;
procedure TFQRprevx.sbZoom90Click(Sender: TObject);
begin
try
qrPreview1.Zoom := 90;
except
end;
end;
procedure TFQRprevx.sbZoom100Click(Sender: TObject);
begin
try
qrPreview1.Zoom := 100;
except
end;
end;
procedure TFQRprevx.sbFirstClick(Sender: TObject);
begin
qrPreview1.PageNumber := 1;
ChecaPaginas;
end;
procedure TFQRprevx.sbPriorClick(Sender: TObject);
begin
qrPreview1.PageNumber := QrPreview1.pageNumber - 1;
ChecaPaginas;
end;
procedure TFQRprevx.Edit1Change(Sender: TObject);
begin
try
qrPreview1.PageNumber:=StrToInt(Edit1.Text);
except
end;
end;
procedure TFQRprevx.sbNextClick(Sender: TObject);
begin
qrPreview1.PageNumber := qrPreview1.PageNumber + 1;
ChecaPaginas;
end;
procedure TFQRprevx.sbLastClick(Sender: TObject);
begin
QrPreview1.Pagenumber := QrPreview1.QRPrinter.PageCount;
ChecaPaginas;
end;
procedure TFQRprevx.sbPrintSetupClick(Sender: TObject);
begin
qrPreview1.qrPrinter.PrintSetup;
end;
procedure TFQRprevx.sbPrintClick(Sender: TObject);
begin
qrPreview1.qrPrinter.Print;
end;
procedure TFQRprevx.sbSaveClick(Sender: TObject);
begin
if SaveDialog1.Execute then
begin
SaveDialog1.FileName := ´´;
SaveDialog1.Filter := ´*.PDF´;
SaveDialog1.DefaultExt := ´PDF´;
SaveDialog1.InitialDir := ´C:\PetB\00003-00001´;
end;
end;
procedure TFQRprevx.sbOpenClick(Sender: TObject);
begin
if OPenDialog1.Execute then
begin
OPenDialog1.FileName := ´´;
OpenDialog1.Filter := ´*.QRP´;
OpenDialog1.DefaultExt := ´QRP´;
OPenDialog1.InitialDir := ´C:\PetB\00003-00001´;
end;
end;
procedure TFQRprevx.sbSendClick(Sender: TObject);
begin
FQSendMail.ShowModal;
end;
procedure TFQRprevx.BitBtn1Click(Sender: TObject);
begin
FRprcmb01.Query1.Active := False;
FRprcmb01.Query2.Active := False;
FRprcmb01.Query3.Active := False;
FRprcmb01.Query4.Active := False;
FRprcmb01.Query5.Active := False;
FRprcmb01.Query6.Active := False;
FRprcmb01.Query7.Active := False;
Close;
FQRprevx.QRPreview1.qrPrinter.Free;
FRprcmb01.Close;
FCprcmb01.TabSheet1.Show;
FCprcmb01.BitBtn7.SetFocus;
end;
procedure TFQRprevx.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FRprcmb01.Query1.Active := False;
FRprcmb01.Query2.Active := False;
FRprcmb01.Query3.Active := False;
FRprcmb01.Query4.Active := False;
FRprcmb01.Query5.Active := False;
FRprcmb01.Query6.Active := False;
FRprcmb01.Query7.Active := False;
FQRprevx.QRPreview1.qrPrinter.Free;
FRprcmb01.Close;
end;
procedure TFQRprevx.ChecaPaginas;
begin
Edit1.Text := Inttostr(qrPreview1.PageNumber);
Label1.Caption := ´ de ´+Inttostr(qrPreview1.qrPrinter.PageCount);
sbFirst.Enabled := (QrPreview1.PageNumber > 1);
sbPrior.Enabled := (qrPreview1.PageNumber > 1);
sbNext.Enabled := (QrPreview1.PageNumber < qrPreview1.qrPrinter.PageCount);
StatusBar1.Panels[1].Text := ´Página ´+ IntToStr(QRPreview1.PageNumber) +
´ de ´ +
IntToStr(QRPreview1.QRPrinter.PageCount);
StatusBar1.Panels[2].Text := FRprcmb01.QuickRep1.ReportTitle;
FQRprevx.Caption := FRprcmb01.QuickRep1.ReportTitle;
end;
procedure TFQRprevx.QRPreview1PageAvailable(Sender: TObject;
PageNum: Integer);
begin
checapaginas;
QRPreview1.Zoom := 90;
Progress;
end;
procedure TFQRprevx.Progress;
begin
if Gauge1.Progress >= LastProgress + 5 then
begin
StatusBar1.Panels[0].Text := IntToStr(Gauge1.Progress)+´¬´;
LastProgress := Gauge1.Progress;
end;
if (Gauge1.Progress = 0) or
(Gauge1.Progress = 100) then
StatusBar1.Panels[0].Text := ´´;
end;
procedure TFQRprevx.FormCreate(Sender: TObject);
begin
if (QRPrinter <> nil) and
(QRPrinter.Title <> ´´) then
Caption := QRPrinter.Title;
StatusBar1.Panels[2].Text := FRprcmb01.QuickRep1.ReportTitle;
QRPreview1.Zoom := 90;
Gauge1.Top := 2;
Gauge1.Left := 2;
Gauge1.Height := 10;
Gauge1.Width := 100;
LastProgress := 0;
end;
end.
Agradeço desde já pela ajuda.
M
Curtidas 0
Respostas
Marco Salles
28/04/2006
Eu não li todo o seu código :cry: geralmente estes problemas ocorrem devido a criação e destruição de forms incorretas
[b:228f2462ab]Não deu para entender sua politica de criação e destruição desses Forms [/b:228f2462ab]:cry:
[b:228f2462ab]Tb Não deu para entender quem é FQSendMail.ShowModal[/b:228f2462ab];.. :cry:
[b:228f2462ab]Tb não deu para entender esta instrução no evento onclose do Form FQRprevx [/b:228f2462ab] :wink: :wink:
[b:228f2462ab]FRprcmb01.Close;[/b:228f2462ab] -->>> :?: :?:
Pelo que tudo indica , o FRprcmb01 chama o FQRprevx
[b:228f2462ab]e no evento OnClose do FQRprevx , voce esta Fechando o FRprcmb01???[/b:228f2462ab] Não da para entender :!: :!: :!: :!:
[b:228f2462ab]Tb não sei se é necessário a intrução
FQRprevx.QRPreview1.qrPrinter.Free;[/b:228f2462ab]
Ja que o correto seria a destruição do FQRprevx e consequentemente , todos os componentes que Criados por ele serão destruidos por ele
[b:228f2462ab]Esta estrutura é correta , mas se vai funcionar diretamente no seu caso eu não posso afirmar... Posso afirmar que é um bom começo para que voce consiga resolver o seu problema[/b:228f2462ab]
[b:228f2462ab]Não deu para entender sua politica de criação e destruição desses Forms [/b:228f2462ab]:cry:
[b:228f2462ab]Tb Não deu para entender quem é FQSendMail.ShowModal[/b:228f2462ab];.. :cry:
[b:228f2462ab]Tb não deu para entender esta instrução no evento onclose do Form FQRprevx [/b:228f2462ab] :wink: :wink:
procedure TFQRprevx.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//Bla bla bla
FQRprevx.QRPreview1.qrPrinter.Free; ???????
[b:228f2462ab]FRprcmb01.Close[/b:228f2462ab]; -->>>
end;
[b:228f2462ab]FRprcmb01.Close;[/b:228f2462ab] -->>> :?: :?:
Pelo que tudo indica , o FRprcmb01 chama o FQRprevx
procedure TFRprcmb01.QuickRep1Preview(Sender: TObject);
begin
//Move o relatório URxxxmb01 para o papel do QRPrevx
FQRprevx.QRPreview1.qrPrinter := TqrPrinter(Sender);
FQRprevx.Show;
end;
[b:228f2462ab]e no evento OnClose do FQRprevx , voce esta Fechando o FRprcmb01???[/b:228f2462ab] Não da para entender :!: :!: :!: :!:
[b:228f2462ab]Tb não sei se é necessário a intrução
FQRprevx.QRPreview1.qrPrinter.Free;[/b:228f2462ab]
Ja que o correto seria a destruição do FQRprevx e consequentemente , todos os componentes que Criados por ele serão destruidos por ele
A maneira correta
Deixa os formularios contendo o quickReport e o QuickPreview na secção AvalaibleForms.. É voce que ira crialos e desytruilos e nã a sua aplicação
No form Principal deve-se criar o Formulári que contem o QuickReport
try
fmQuickRep:=TfmQuickRep.Create(nil);
fmQuickRep.QuickRep1.PreviewModal;
finally
fmQuickRep.Release;
end;
e no evento OnQuickRep1Preview Voce deve criar o Form Que contem o
Prewiem
procedure TfmQuickRep.QuickRep1Preview(Sender: TObject);
begin
try
FormQrPersonal:= TFormQrPersonal.create(nil);
FormQrPersonal.QRPreview1.QRPrinter:= QuickRep1.QRPrinter;
FormQrPersonal.ShowModal;
finally
FormQrPersonal.release;
end;
end;
e no evento onclose do seu form Que contem o Previem Deve colocar a Intrução Action=Cafree;
procedure TFormQrPersonal.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action:=cafree;
end;
[b:228f2462ab]Esta estrutura é correta , mas se vai funcionar diretamente no seu caso eu não posso afirmar... Posso afirmar que é um bom começo para que voce consiga resolver o seu problema[/b:228f2462ab]
GOSTEI 0
Marcos Pereira
28/04/2006
Caros Colegas
Estou com o seguinte problema ao criar o Preview personalizado:
O problema é o seguinte:
Tenho um form ´FCprcmb01´, com o cadastro dos dados que irão sair no relatório do QuickReport Personalizado.
Ao setar esta opção, imprimir relatório, localizada dentro do form “FCprcmb01”, abre o segundo form ´FRprcmb01´ no qual tem o QuickRep1, com o relatório que vai ser carregado no onPreview personalizado com o seguinte nome ´FQRprevx´, no qual este preview personalizado tem o Butão ´Enviar´, este botão enviar envia o relatório por e-mail com o Indy. Até este ponto está tudo correto.
O problema é que ao fechar o Preview personalizado, abaixo aparece o Form anterior, o do cadastro ´FCprcmb01´, e este Form “FCprcmb01”, congela, não fecha mais, somente com CTRL+Alt+Del
Se eu tirar o preview personalizado o erro não acontesse mais, funciona perfeitamente.....
Alguma coisa ta ficando presa e trava o sistema, só sendo possível finalizar com CRRL + ALT + DEL.
Segue abaixo a Rotina do Form com o preview personalizado.
Rorina do Form do Cadastro “FCprcmb01” que Chama o Preview Personalizado:
Colocamos o seguinte código no evento OnPreview do componente TQuickRep:
procedure TFRprcmb01.QuickRep1Preview(Sender: TObject);
begin
//Move o relatório URxxxmb01 para o papel do QRPrevx
FQRprevx.QRPreview1.qrPrinter := TqrPrinter(Sender);
FQRprevx.Show;
end;
Rotina do Preview Personalizado:
unit UQRprevx;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Buttons, StdCtrls, ExtCtrls, QRPrntr, ComCtrls, QRPDFFilt, Gauges,
IdIntercept, IdLogBase, IdLogEvent, IdAntiFreezeBase, IdAntiFreeze,
IdMessage, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdMessageClient, IdSMTP;
type
TFQRprevx = class(TForm)
QRPreview1: TQRPreview;
Panel1: TPanel;
Label1: TLabel;
Edit1: TEdit;
sbFirst: TSpeedButton;
sbPrior: TSpeedButton;
sbNext: TSpeedButton;
sbLast: TSpeedButton;
sbPrintSetup: TSpeedButton;
sbPrint: TSpeedButton;
Label2: TLabel;
sbSend: TSpeedButton;
sbSave: TSpeedButton;
sbOpen: TSpeedButton;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
BitBtn1: TBitBtn;
StatusBar1: TStatusBar;
sbZoom100: TSpeedButton;
sbZoom90: TSpeedButton;
sbZoom50: TSpeedButton;
Gauge1: TGauge;
procedure sbZoom50Click(Sender: TObject);
procedure sbZoom90Click(Sender: TObject);
procedure sbZoom100Click(Sender: TObject);
procedure sbFirstClick(Sender: TObject);
procedure sbPriorClick(Sender: TObject);
procedure Edit1Change(Sender: TObject);
procedure sbNextClick(Sender: TObject);
procedure sbLastClick(Sender: TObject);
procedure sbPrintSetupClick(Sender: TObject);
procedure sbPrintClick(Sender: TObject);
procedure sbSaveClick(Sender: TObject);
procedure sbOpenClick(Sender: TObject);
procedure sbSendClick(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure QRPreview1PageAvailable(Sender: TObject; PageNum: Integer);
procedure FormCreate(Sender: TObject);
procedure Progress;
private
{ Private declarations }
Gauge : TProgressBar;
LastProgress : integer;
public
procedure ChecaPaginas;
end;
var
FQRprevx: TFQRprevx;
implementation
Uses URprcmb01, UQSendMail, UCprcmb01;
{$R *.DFM}
procedure TFQRprevx.sbZoom50Click(Sender: TObject);
begin
try
qrPreview1.Zoom := 50;
except
end;
end;
procedure TFQRprevx.sbZoom90Click(Sender: TObject);
begin
try
qrPreview1.Zoom := 90;
except
end;
end;
procedure TFQRprevx.sbZoom100Click(Sender: TObject);
begin
try
qrPreview1.Zoom := 100;
except
end;
end;
procedure TFQRprevx.sbFirstClick(Sender: TObject);
begin
qrPreview1.PageNumber := 1;
ChecaPaginas;
end;
procedure TFQRprevx.sbPriorClick(Sender: TObject);
begin
qrPreview1.PageNumber := QrPreview1.pageNumber - 1;
ChecaPaginas;
end;
procedure TFQRprevx.Edit1Change(Sender: TObject);
begin
try
qrPreview1.PageNumber:=StrToInt(Edit1.Text);
except
end;
end;
procedure TFQRprevx.sbNextClick(Sender: TObject);
begin
qrPreview1.PageNumber := qrPreview1.PageNumber + 1;
ChecaPaginas;
end;
procedure TFQRprevx.sbLastClick(Sender: TObject);
begin
QrPreview1.Pagenumber := QrPreview1.QRPrinter.PageCount;
ChecaPaginas;
end;
procedure TFQRprevx.sbPrintSetupClick(Sender: TObject);
begin
qrPreview1.qrPrinter.PrintSetup;
end;
procedure TFQRprevx.sbPrintClick(Sender: TObject);
begin
qrPreview1.qrPrinter.Print;
end;
procedure TFQRprevx.sbSaveClick(Sender: TObject);
begin
if SaveDialog1.Execute then
begin
SaveDialog1.FileName := ´´;
SaveDialog1.Filter := ´*.PDF´;
SaveDialog1.DefaultExt := ´PDF´;
SaveDialog1.InitialDir := ´C:\\PetB\\00003-00001´;
end;
end;
procedure TFQRprevx.sbOpenClick(Sender: TObject);
begin
if OPenDialog1.Execute then
begin
OPenDialog1.FileName := ´´;
OpenDialog1.Filter := ´*.QRP´;
OpenDialog1.DefaultExt := ´QRP´;
OPenDialog1.InitialDir := ´C:\\PetB\\00003-00001´;
end;
end;
procedure TFQRprevx.sbSendClick(Sender: TObject);
begin
FQSendMail.ShowModal;
end;
procedure TFQRprevx.BitBtn1Click(Sender: TObject);
begin
FRprcmb01.Query1.Active := False;
FRprcmb01.Query2.Active := False;
FRprcmb01.Query3.Active := False;
FRprcmb01.Query4.Active := False;
FRprcmb01.Query5.Active := False;
FRprcmb01.Query6.Active := False;
FRprcmb01.Query7.Active := False;
Close;
FQRprevx.QRPreview1.qrPrinter.Free;
FRprcmb01.Close;
FCprcmb01.TabSheet1.Show;
FCprcmb01.BitBtn7.SetFocus;
end;
procedure TFQRprevx.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FRprcmb01.Query1.Active := False;
FRprcmb01.Query2.Active := False;
FRprcmb01.Query3.Active := False;
FRprcmb01.Query4.Active := False;
FRprcmb01.Query5.Active := False;
FRprcmb01.Query6.Active := False;
FRprcmb01.Query7.Active := False;
FQRprevx.QRPreview1.qrPrinter.Free;
FRprcmb01.Close;
end;
procedure TFQRprevx.ChecaPaginas;
begin
Edit1.Text := Inttostr(qrPreview1.PageNumber);
Label1.Caption := ´ de ´+Inttostr(qrPreview1.qrPrinter.PageCount);
sbFirst.Enabled := (QrPreview1.PageNumber > 1);
sbPrior.Enabled := (qrPreview1.PageNumber > 1);
sbNext.Enabled := (QrPreview1.PageNumber < qrPreview1.qrPrinter.PageCount);
StatusBar1.Panels[1].Text := ´Página ´+ IntToStr(QRPreview1.PageNumber) +
´ de ´ +
IntToStr(QRPreview1.QRPrinter.PageCount);
StatusBar1.Panels[2].Text := FRprcmb01.QuickRep1.ReportTitle;
FQRprevx.Caption := FRprcmb01.QuickRep1.ReportTitle;
end;
procedure TFQRprevx.QRPreview1PageAvailable(Sender: TObject;
PageNum: Integer);
begin
checapaginas;
QRPreview1.Zoom := 90;
Progress;
end;
procedure TFQRprevx.Progress;
begin
if Gauge1.Progress >= LastProgress + 5 then
begin
StatusBar1.Panels[0].Text := IntToStr(Gauge1.Progress)+´¬´;
LastProgress := Gauge1.Progress;
end;
if (Gauge1.Progress = 0) or
(Gauge1.Progress = 100) then
StatusBar1.Panels[0].Text := ´´;
end;
procedure TFQRprevx.FormCreate(Sender: TObject);
begin
if (QRPrinter <> nil) and
(QRPrinter.Title <> ´´) then
Caption := QRPrinter.Title;
StatusBar1.Panels[2].Text := FRprcmb01.QuickRep1.ReportTitle;
QRPreview1.Zoom := 90;
Gauge1.Top := 2;
Gauge1.Left := 2;
Gauge1.Height := 10;
Gauge1.Width := 100;
LastProgress := 0;
end;
end.
Agradeço desde já pela ajuda.
Estou com o seguinte problema ao criar o Preview personalizado:
O problema é o seguinte:
Tenho um form ´FCprcmb01´, com o cadastro dos dados que irão sair no relatório do QuickReport Personalizado.
Ao setar esta opção, imprimir relatório, localizada dentro do form “FCprcmb01”, abre o segundo form ´FRprcmb01´ no qual tem o QuickRep1, com o relatório que vai ser carregado no onPreview personalizado com o seguinte nome ´FQRprevx´, no qual este preview personalizado tem o Butão ´Enviar´, este botão enviar envia o relatório por e-mail com o Indy. Até este ponto está tudo correto.
O problema é que ao fechar o Preview personalizado, abaixo aparece o Form anterior, o do cadastro ´FCprcmb01´, e este Form “FCprcmb01”, congela, não fecha mais, somente com CTRL+Alt+Del
Se eu tirar o preview personalizado o erro não acontesse mais, funciona perfeitamente.....
Alguma coisa ta ficando presa e trava o sistema, só sendo possível finalizar com CRRL + ALT + DEL.
Segue abaixo a Rotina do Form com o preview personalizado.
Rorina do Form do Cadastro “FCprcmb01” que Chama o Preview Personalizado:
Colocamos o seguinte código no evento OnPreview do componente TQuickRep:
procedure TFRprcmb01.QuickRep1Preview(Sender: TObject);
begin
//Move o relatório URxxxmb01 para o papel do QRPrevx
FQRprevx.QRPreview1.qrPrinter := TqrPrinter(Sender);
FQRprevx.Show;
end;
Rotina do Preview Personalizado:
unit UQRprevx;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Buttons, StdCtrls, ExtCtrls, QRPrntr, ComCtrls, QRPDFFilt, Gauges,
IdIntercept, IdLogBase, IdLogEvent, IdAntiFreezeBase, IdAntiFreeze,
IdMessage, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdMessageClient, IdSMTP;
type
TFQRprevx = class(TForm)
QRPreview1: TQRPreview;
Panel1: TPanel;
Label1: TLabel;
Edit1: TEdit;
sbFirst: TSpeedButton;
sbPrior: TSpeedButton;
sbNext: TSpeedButton;
sbLast: TSpeedButton;
sbPrintSetup: TSpeedButton;
sbPrint: TSpeedButton;
Label2: TLabel;
sbSend: TSpeedButton;
sbSave: TSpeedButton;
sbOpen: TSpeedButton;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
BitBtn1: TBitBtn;
StatusBar1: TStatusBar;
sbZoom100: TSpeedButton;
sbZoom90: TSpeedButton;
sbZoom50: TSpeedButton;
Gauge1: TGauge;
procedure sbZoom50Click(Sender: TObject);
procedure sbZoom90Click(Sender: TObject);
procedure sbZoom100Click(Sender: TObject);
procedure sbFirstClick(Sender: TObject);
procedure sbPriorClick(Sender: TObject);
procedure Edit1Change(Sender: TObject);
procedure sbNextClick(Sender: TObject);
procedure sbLastClick(Sender: TObject);
procedure sbPrintSetupClick(Sender: TObject);
procedure sbPrintClick(Sender: TObject);
procedure sbSaveClick(Sender: TObject);
procedure sbOpenClick(Sender: TObject);
procedure sbSendClick(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure QRPreview1PageAvailable(Sender: TObject; PageNum: Integer);
procedure FormCreate(Sender: TObject);
procedure Progress;
private
{ Private declarations }
Gauge : TProgressBar;
LastProgress : integer;
public
procedure ChecaPaginas;
end;
var
FQRprevx: TFQRprevx;
implementation
Uses URprcmb01, UQSendMail, UCprcmb01;
{$R *.DFM}
procedure TFQRprevx.sbZoom50Click(Sender: TObject);
begin
try
qrPreview1.Zoom := 50;
except
end;
end;
procedure TFQRprevx.sbZoom90Click(Sender: TObject);
begin
try
qrPreview1.Zoom := 90;
except
end;
end;
procedure TFQRprevx.sbZoom100Click(Sender: TObject);
begin
try
qrPreview1.Zoom := 100;
except
end;
end;
procedure TFQRprevx.sbFirstClick(Sender: TObject);
begin
qrPreview1.PageNumber := 1;
ChecaPaginas;
end;
procedure TFQRprevx.sbPriorClick(Sender: TObject);
begin
qrPreview1.PageNumber := QrPreview1.pageNumber - 1;
ChecaPaginas;
end;
procedure TFQRprevx.Edit1Change(Sender: TObject);
begin
try
qrPreview1.PageNumber:=StrToInt(Edit1.Text);
except
end;
end;
procedure TFQRprevx.sbNextClick(Sender: TObject);
begin
qrPreview1.PageNumber := qrPreview1.PageNumber + 1;
ChecaPaginas;
end;
procedure TFQRprevx.sbLastClick(Sender: TObject);
begin
QrPreview1.Pagenumber := QrPreview1.QRPrinter.PageCount;
ChecaPaginas;
end;
procedure TFQRprevx.sbPrintSetupClick(Sender: TObject);
begin
qrPreview1.qrPrinter.PrintSetup;
end;
procedure TFQRprevx.sbPrintClick(Sender: TObject);
begin
qrPreview1.qrPrinter.Print;
end;
procedure TFQRprevx.sbSaveClick(Sender: TObject);
begin
if SaveDialog1.Execute then
begin
SaveDialog1.FileName := ´´;
SaveDialog1.Filter := ´*.PDF´;
SaveDialog1.DefaultExt := ´PDF´;
SaveDialog1.InitialDir := ´C:\\PetB\\00003-00001´;
end;
end;
procedure TFQRprevx.sbOpenClick(Sender: TObject);
begin
if OPenDialog1.Execute then
begin
OPenDialog1.FileName := ´´;
OpenDialog1.Filter := ´*.QRP´;
OpenDialog1.DefaultExt := ´QRP´;
OPenDialog1.InitialDir := ´C:\\PetB\\00003-00001´;
end;
end;
procedure TFQRprevx.sbSendClick(Sender: TObject);
begin
FQSendMail.ShowModal;
end;
procedure TFQRprevx.BitBtn1Click(Sender: TObject);
begin
FRprcmb01.Query1.Active := False;
FRprcmb01.Query2.Active := False;
FRprcmb01.Query3.Active := False;
FRprcmb01.Query4.Active := False;
FRprcmb01.Query5.Active := False;
FRprcmb01.Query6.Active := False;
FRprcmb01.Query7.Active := False;
Close;
FQRprevx.QRPreview1.qrPrinter.Free;
FRprcmb01.Close;
FCprcmb01.TabSheet1.Show;
FCprcmb01.BitBtn7.SetFocus;
end;
procedure TFQRprevx.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FRprcmb01.Query1.Active := False;
FRprcmb01.Query2.Active := False;
FRprcmb01.Query3.Active := False;
FRprcmb01.Query4.Active := False;
FRprcmb01.Query5.Active := False;
FRprcmb01.Query6.Active := False;
FRprcmb01.Query7.Active := False;
FQRprevx.QRPreview1.qrPrinter.Free;
FRprcmb01.Close;
end;
procedure TFQRprevx.ChecaPaginas;
begin
Edit1.Text := Inttostr(qrPreview1.PageNumber);
Label1.Caption := ´ de ´+Inttostr(qrPreview1.qrPrinter.PageCount);
sbFirst.Enabled := (QrPreview1.PageNumber > 1);
sbPrior.Enabled := (qrPreview1.PageNumber > 1);
sbNext.Enabled := (QrPreview1.PageNumber < qrPreview1.qrPrinter.PageCount);
StatusBar1.Panels[1].Text := ´Página ´+ IntToStr(QRPreview1.PageNumber) +
´ de ´ +
IntToStr(QRPreview1.QRPrinter.PageCount);
StatusBar1.Panels[2].Text := FRprcmb01.QuickRep1.ReportTitle;
FQRprevx.Caption := FRprcmb01.QuickRep1.ReportTitle;
end;
procedure TFQRprevx.QRPreview1PageAvailable(Sender: TObject;
PageNum: Integer);
begin
checapaginas;
QRPreview1.Zoom := 90;
Progress;
end;
procedure TFQRprevx.Progress;
begin
if Gauge1.Progress >= LastProgress + 5 then
begin
StatusBar1.Panels[0].Text := IntToStr(Gauge1.Progress)+´¬´;
LastProgress := Gauge1.Progress;
end;
if (Gauge1.Progress = 0) or
(Gauge1.Progress = 100) then
StatusBar1.Panels[0].Text := ´´;
end;
procedure TFQRprevx.FormCreate(Sender: TObject);
begin
if (QRPrinter <> nil) and
(QRPrinter.Title <> ´´) then
Caption := QRPrinter.Title;
StatusBar1.Panels[2].Text := FRprcmb01.QuickRep1.ReportTitle;
QRPreview1.Zoom := 90;
Gauge1.Top := 2;
Gauge1.Left := 2;
Gauge1.Height := 10;
Gauge1.Width := 100;
LastProgress := 0;
end;
end.
Agradeço desde já pela ajuda.
GOSTEI 0
Marcos Pereira
28/04/2006
Prezado, tenho o mesmo problema, uso Delphi Xe7, mas ao utilizar o Preview Personalizado após imprimir e fechar o personalizado não consigo fechar o form anterior a este.
Não são problemas de destruição de form, pois no OnClose utilizo Action := Cafree.
Em testes verifiquei que o problema está no comando QRPreview1.QRPrinter.Print, pois se trocar esse código e colocar Print, irá imprimir um print da tela do form, após esse comando é possível fechar o form anterior sem problemas.
Se tiver uma solução por favor poste para nos ajudar.
Att. Marco.s
Não são problemas de destruição de form, pois no OnClose utilizo Action := Cafree.
Em testes verifiquei que o problema está no comando QRPreview1.QRPrinter.Print, pois se trocar esse código e colocar Print, irá imprimir um print da tela do form, após esse comando é possível fechar o form anterior sem problemas.
Se tiver uma solução por favor poste para nos ajudar.
Att. Marco.s
GOSTEI 0