Fórum QRPreview #193438
07/11/2003
0
Estou querendo personalizar um visualizador de relatórios utilizando o QRPreview. Como faço para visualizar um relatório em um QRPreview. Por exemplo, tenho o formulario chamado FrmRelAlunos onde tenho um QuickRep com a relação nominal de todos os alunos de uma determinada série e gostaria q ele fosse visualizado num QRPreview, qual comando posso utilizar?
Grato,
Ilano.
Ilanocf
Curtir tópico
+ 0Posts
07/11/2003
Ilanocf
Gostei + 0
07/11/2003
Ilanocf
Gostei + 0
08/11/2003
Wallacest
Gostei + 0
10/11/2003
Ilanocf
Consegui alguns códigos, mas ainda não estou conseguindo visualizar o relatório. O formulário com o QRPreview está abrindo, mas não está visualizando. Sei q falta pouco e se alguém puder me ajudar. Por favor, veja se está faltando alguma coisa no código abaixo:
------------------------------------------------------------------------------
unit UFrmQPreview;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, RzPanel, QRPrntr, Buttons, StdCtrls, Spin, RzCmboBx, IniFiles,
RzBHints;
type
TDevice = record
Name, Driver, Port: string;
end;
type
TFrmQPreview = class(TForm)
RzPanel1: TRzPanel;
RzPanel2: TRzPanel;
QRPreview1: TQRPreview;
SpeedButton6: TSpeedButton;
PrinterSetupDialog1: TPrinterSetupDialog;
PrintDialog1: TPrintDialog;
SaveDialog1: TSaveDialog;
OpenDialog1: TOpenDialog;
RzBalloonHints1: TRzBalloonHints;
Label4: TLabel;
Bevel2: TBevel;
Bevel5: TBevel;
Timer1: TTimer;
Label5: TLabel;
Bevel6: TBevel;
Label6: TLabel;
GroupBox1: TGroupBox;
MaisZoom: TSpeedButton;
MenosZoom: TSpeedButton;
Label1: TLabel;
Label2: TLabel;
SpinEdit1: TSpinEdit;
SpinEdit2: TSpinEdit;
GroupBox2: TGroupBox;
BtnConfigurarImpressora: TSpeedButton;
BtnImprimir: TSpeedButton;
SpeedButton2: TSpeedButton;
GroupBox3: TGroupBox;
SpeedButton4: TSpeedButton;
SpeedButton5: TSpeedButton;
Panel1: TPanel;
Panel2: TPanel;
RzPanel3: TRzPanel;
Label3: TLabel;
Button1: TSpeedButton;
RzComboBox1: TRzComboBox;
SpinEdit3: TSpinEdit;
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure MaisZoomClick(Sender: TObject);
procedure MenosZoomClick(Sender: TObject);
procedure QRPreview1PageAvailable(Sender: TObject; PageNum: Integer);
procedure SpinEdit2Change(Sender: TObject);
procedure SpinEdit1Change(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure RzComboBox1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure SpeedButton5Click(Sender: TObject);
procedure SpeedButton4Click(Sender: TObject);
procedure SpeedButton6Click(Sender: TObject);
procedure BtnConfigurarImpressoraClick(Sender: TObject);
procedure BtnImprimirClick(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FrmQPreview: TFrmQPreview;
Devices: array of TDevice;
DDevice: TDevice; // current default printer
implementation
uses UFrmRelCarnes;
//--- INÍCIO DA FUNÇÃO ---
Function PrinterOnLine : Boolean;
Const
PrnStInt : Byte = $17;
StRq : Byte = $02;
PrnNum : Word = 0; { 0 para LPT1, 1 para LPT2, etc. }
Var
nResult : byte;
Begin (* PrinterOnLine*)
Asm
mov ah,StRq;
mov dx,PrnNum;
Int $17;
mov nResult,ah;
end;
PrinterOnLine := (nResult and $80) = $80;
End;
//--- FIM DA FUNÇÃO ---
{$R *.DFM}
procedure TFrmQPreview.FormKeyPress(Sender: TObject; var Key: Char);
begin
If Key = #13 Then
SelectNext(ActiveControl, True, True);
If (Key = 17) And (Key = 80) Then
ShowMessage(´Imprimir agora?´);
end;
procedure TFrmQPreview.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Action:=caFree;
end;
procedure TFrmQPreview.MaisZoomClick(Sender: TObject);
begin
SpinEdit1.Value:=SpinEdit1.Value + 1;
QRPreview1.Zoom:=SpinEdit1.Value;
end;
procedure TFrmQPreview.MenosZoomClick(Sender: TObject);
begin
SpinEdit1.Value:=SpinEdit1.Value - 1;
QRPreview1.Zoom:=SpinEdit1.Value;
end;
procedure TFrmQPreview.QRPreview1PageAvailable(Sender: TObject;
PageNum: Integer);
begin
SpinEdit1.Value:=QRPreview1.PageNumber;
end;
procedure TFrmQPreview.SpinEdit2Change(Sender: TObject);
begin
Application.ProcessMessages;
//QRPreview1.PageNumber:=SpinEdit1.Value;
end;
procedure TFrmQPreview.SpinEdit1Change(Sender: TObject);
begin
QRPreview1.Zoom:=SpinEdit1.Value;
end;
procedure TFrmQPreview.FormActivate(Sender: TObject);
begin
SpinEdit3.Value:=RzComboBox1.ItemIndex;
Label6.Caption:=´Data da Impressão: ´ + FormatDateTime(´ddd´, StrToDate(DateToStr(Date))) + ´, ´ + DateToStr(Date);
end;
procedure TFrmQPreview.FormCreate(Sender: TObject);
var
WinIni: TIniFile;
DevList: TStringList;
device: string;
i, p: integer;
begin
WinIni := TIniFile.Create(´WIN.INI´);
// Get the current default printer
device := WinIni.ReadString(´windows´, ´device´, ´,,´);
if device = ´´ then device := ´,,´;
p := Pos(´,´, device);
DDevice.Name := Copy(device, 1, p-1);
device := Copy(device, p+1, Length(device)-p);
p := Pos(´,´, device);
DDevice.Driver := Copy(device, 1, p-1);
DDevice.Port := Copy(device, p+1, Length(device)-p);
// Get the printers list
DevList := TStringList.Create;
WinIni.ReadSectionValues(´Devices´, DevList);
// Store the printers list in a dynamic array
SetLength(Devices, DevList.Count);
for i := 0 to DevList.Count - 1 do begin
device := DevList[i];
p := Pos(´=´, device);
Devices[i].Name := Copy(device, 1, p-1);
device := Copy(device, p+1, Length(device)-p);
p := Pos(´,´, device);
Devices[i].Driver := Copy(device, 1, p-1);
Devices[i].Port := Copy(device, p+1, Length(device)-p);
// Add the printer to the ListBox
RzComboBox1.Items.Add(Devices[i].Name
+ ´ (´ + Devices[i].Port + ´)´);
// Is the current default printer?
if (CompareText(Devices[i].Name, DDevice.Name) = 0) and
(CompareText(Devices[i].Driver, DDevice.Driver) = 0) and
(CompareText(Devices[i].Port, DDevice.Port) = 0) then
RzComboBox1.ItemIndex := i; // Make it the selected printer
end;
WinIni.Free;
end;
procedure TFrmQPreview.RzComboBox1Click(Sender: TObject);
begin
If Application.MessageBox(´Você deseja mesmo deixar esta impressora como padrão?´,´CENTEC´,MB_YESNO)=IDYes Then
Begin
Button1Click(Sender)
End
Else
RzComboBox1.ItemIndex:=SpinEdit3.Value;
end;
procedure TFrmQPreview.Button1Click(Sender: TObject);
var
WinIni: TIniFile;
begin
if RzComboBox1.ItemIndex = -1 then
exit;
DDevice := Devices[rzcombobox1.ItemIndex];
WinIni := TIniFile.Create(´WIN.INI´);
WinIni.WriteString(´windows´, ´device´, DDevice.Name
+ ´,´ + DDevice.Driver + ´,´ + DDevice.Port);
WinIni.Free;
SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0,
LPARAM(pchar(´windows´)));
end;
procedure TFrmQPreview.SpeedButton5Click(Sender: TObject);
begin
OpenDialog1.Execute;
end;
procedure TFrmQPreview.SpeedButton4Click(Sender: TObject);
begin
SaveDialog1.Execute;
end;
procedure TFrmQPreview.SpeedButton6Click(Sender: TObject);
begin
If RzComboBox1.ItemIndex <> SpinEdit3.Value Then
Begin
If Application.MessageBox(´Você deseja manter a impressora selecionada como padrão?´,´CENTEC´,MB_YESNO)=IDYes Then
Begin
Close
End
Else
Begin
RzComboBox1.ItemIndex:=SpinEdit3.Value;
Button1.Click;
Close;
End
End
Else
Close;
end;
procedure TFrmQPreview.BtnConfigurarImpressoraClick(Sender: TObject);
begin
PrinterSetupDialog1.Execute;
end;
procedure TFrmQPreview.BtnImprimirClick(Sender: TObject);
begin
PrintDialog1.Execute;
end;
procedure TFrmQPreview.Timer1Timer(Sender: TObject);
begin
Label5.Caption:=´Hora da Impressão: ´ + TimeToStr(time);
end;
end.
------------------------------------------------------------------------------
Lá no botão que chama o formulário acima está assim:
------------------------------------------------------------------------------
Application.CreateForm(TFrmRelCarnes, FrmRelCarnes);
FrmRelCarnes.QuickRep1.Preview;
------------------------------------------------------------------------------
Já no relatório FrmRelCarnes, q é o q eu quero q apareça no QRPreview, está assim:
------------------------------------------------------------------------------
Evento OnPreview:
Application.CreateForm(TFrmQPreview, FrmQPreview);
FrmQPreview.QRPreview1.QRPrinter:=QuickRep1.QRPrinter;
FrmQPreview.Label4.Caption:=´Total de Registros: ´ + FormatFloat(´000´, DMDados.TBDetCarne.RecordCount);
FrmQPreview.ShowModal;
------------------------------------------------------------------------------
Grato por sua ajuda,
Ilano.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)