可以預覽, 不可打印.(150分)

  • 主题发起人 主题发起人 Jackwinner
  • 开始时间 开始时间
J

Jackwinner

Unregistered / Unconfirmed
GUEST, unregistred user!
我在做報表的時候, 使用了TQuickRep元件的OnNeedData Event Procedure,
這樣, 可以Preview, 但是Click Print後好像沒有反映, 我試著將TquickRep的DataSet
Property 設置為某個 Query後, 是能夠打印的, 但是TQuickRep元件提供了
OnNeedData Event Procedure以供獲得資料, 為何不響應Print?
也許QuickReport的打印機制是需要設定DataSet Property...
總之, 對此不太清楚, 希望能人志士幫小第一把, 不甚感激!!!

 
没这么用过,不如在运行前先给出数据吧
 
好象TQuickRep必须连接到一个数据源才行
 
自定义快速报表的打印预览窗口



---- Quick Report 2.0 中 提 供 的 默 认 打 印 预 览 窗 口 是 英 文 界 面 的, 如 果 开 发 的 中 文 软 件 中 带 有 这 种 英 文 显 示, 不 免 有 些 小 小 的 缺 憾。 因 此 有 必 要 实 现 中 文 界 面 的 打 印 预 览 窗 口。 但 是Delphi 提 供 的 源 代 码 中 并 没 有 打 印 预 览 窗 口 的.PAS 源 文 件, 这 就 无 法 直 接 修 改 源 码, 只 能 全 部 自 己 编 程 实 现。 经 多 次 实 践, 笔 者 模 仿 实 现 了 与 默 认 预 览 窗 口 外 观 类 似, 功 能 相 同 的 打 印 预 览 窗 口。 步 骤 如 下:


---- 1. 新 建 一 个 窗 体, 设 置Name 为MyPreview。

---- 2. 在 窗 体 上 添 加 一Toolbar 控 件, 模 仿 默 认 预 览 窗 口 创 建 相 应 的Toolbutton, 并 设 置 各 按 钮 的Hint 提 示。

---- 3. 添 加 一Panel 控 件, 对 齐 方 式 置 为alBottom。 再 在 此Panel 上 放 一ProgressBar( 左 对 齐) 和Panel( 右 对 齐), 分 别 显 示 报 表 装 载 进 度 和 其 他 提 示 信 息。

---- 4. 添 加QRPreview 控 件, 对 齐 方 式 置 为alClient。

---- 5. 添 加OpenDialog, 设 置Filter 属 性 为*.QR; 添 加SaveDialog, 设 置Filter 属 性 为*.QR|*.TXT|*.HTM|*.CSV, 设 置DefaultExt 属 性 为*.QR。

---- 6. 双 击 各 个Toolbutton, 输 入 相 应 代 码。

---- 可 以 按 以 下 方 法 调 用 自 定 义 预 览 窗 口。


---- 重 载TQuickRep 的OnPreview 事 件, 输 入 如 下 代 码:

procedure TRptForm.RptFormPreview(Sender: TObject);

begin


with TMyPreview.Create(Application)do


begin


QRPreview1.QRPrinter := TQRPrinter(Sender);

CurRep := self;

Show;

end;


end;



附 各 成 员 方 法 的 具 体 实 现:

unit Myprv;


interface

uses

Windows

Messages

SysUtils

Classes

Graphics

Controls

Forms

Dialogs

ComCtrls

ToolWin

qrprntr

Quickrpt

StdCtrls

ExtCtrls

qrextra

qrhtml;


type

TMyPreview = class(TForm)

QRPreview1: TQRPreview;

ToolBar1: TToolBar;

(其 余 成 员 变 量 和 成 员 方 法 声 明 略。)

private

{ Private declarations }

FPageCount : integer;
// 生 成 报 表 的 总 页 数

public

{ Public declarations }

CurRep : TQuickRep;
// 所 预 览 的 报 表

procedure UpdatePanelShow;

end;



implementation


{$R *.DFM}

procedure TMyPreview.UpdatePanelShow;

begin
// 更 新 显 示

Panel2.Caption := ' 第 '+inttostr(QRPreview1.PageNumber)+ ' 页 总 '+inttostr(FPageCount)+' 页';

end;



procedure TMyPreview.ToolButton2Click(Sender: TObject);

begin
//ZoomToFit 缩 放 至 全 屏

QRPreview1.ZoomToFit;

end;



procedure TMyPreview.ToolButton3Click(Sender: TObject);

begin
//ZoomTo100% 缩 放 至 实 际 大 小

QRPreview1.Zoom:=100;

end;



procedure TMyPreview.ToolButton4Click(Sender: TObject);

begin
//ZoomToWidth 缩 放 至 页 宽

QRPreview1.ZoomToWidth;

end;



procedure TMyPreview.ToolButton6Click(Sender: TObject);

begin
//First page

QRPreview1.PageNumber := 1;

UpdatePanelShow;

end;



procedure TMyPreview.ToolButton8Click(Sender: TObject);

begin
//prior page

QRPreview1.PageNumber := QRPreview1.PageNumber+1;

UpdatePanelShow;

end;



procedure TMyPreview.ToolButton7Click(Sender: TObject);

begin
//next page

QRPreview1.PageNumber := QRPreview1.PageNumber-1;

if QRPreview1.PageNumber =0 then


QRPreview1.PageNumber:=1;

UpdatePanelShow;

end;



procedure TMyPreview.ToolButton9Click(Sender: TObject);

begin
//Last page

QRPreview1.PageNumber := FPageCount;

UpdatePanelShow;

end;



procedure TMyPreview.QRPreview1PageAvailable(Sender: TObject;
PageNum: Integer);

begin
//get pagecount

FPageCount := PageNum ;

UpdatePanelShow;

end;



procedure TMyPreview.FormClose(Sender: TObject;
var Action: TCloseAction);

begin


CurRep := nil;

Action := caFree;

end;



procedure TMyPreview.ToolButton14Click(Sender: TObject);

begin
//close the window

Close;

end;



procedure TMyPreview.ToolButton11Click(Sender: TObject);

begin
//print setup

QRPreview1.QRPrinter.PrintSetup;

end;



procedure TMyPreview.ToolButton13Click(Sender: TObject);

begin
//print

QRPreview1.QRPrinter.Print;

end;



procedure TMyPreview.ToolButton16Click(Sender: TObject);

begin
//save button

if SaveDlg1.Execute then


begin


if (SaveDlg1.FIlterIndex <>1) and (CurRep = nil) then


Exit;

case SaveDlg1.FilterINdex of

1: //--*.QR

QRPreview1.QRPrinter.Save(SaveDlg1.FileName);

2: //--*.TXT

CurRep.ExportToFilter (TQRAsciiExportFilter.Create(SaveDlg1.FileName));

3: //--*.HTM

CurRep.ExportToFilter (TQRHTMLExportFilter.Create(SaveDlg1.FileName));

4: //--*.CSV

CurRep.ExportToFilter(TQRCSVExportFilter.Create(SaveDlg1.FileName));

end;


end;


end;



procedure TMyPreview.ToolButton17Click(Sender: TObject);

begin
//load button

if OpenDlg1.Execute then


QRPreview1.QRPrinter.Load(OpenDlg1.FileName);

end;



procedure TMyPreview.QRPreview1ProgressUpdate(Sender: TObject;
Progress: Integer);

begin
//updage progress bar

ProgressBar1.Position := Progress;

end;



procedure TMyPreview.SaveDlg1TypeChange(Sender: TObject);

begin
//set DefaultExt property of Savedialog

with SaveDlg1do


case FilterIndex of

0: DefaultExt := '.QR';

1: DefaultExt := '.TXT';

2: DefaultExt := '.HTM';

3: DefaultExt := '.CSV';

end;


end;


end.
//end of Unit
 
在QuickRep的before print 事件中加入 query1.first
 
我从来不用qreport.
 
这个帖子确实古老一些了,不过原因出在没有对变量进行初始化上,需要在BeforePrint里面进行处理。
 
在BEFOREpRINT事件中
所有在PRIVIEW之前的变量重新初始化,包括QUERY.FIRST.
 
beforeprint事件是在预览和打印时都响应的。
 
有时候就是QR自己的问题,我有时把版本换一下,重新设计一个,就又什么问题都没有了.
 
后退
顶部