線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3335
推到 Plurk!
推到 Facebook!

使用TPrinter印的內容有沒有辦法預覽?

尚未結案
wyvern
一般會員


發表:19
回覆:31
積分:15
註冊:2003-06-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-06-17 15:05:39 IP:61.222.xxx.xxx 未訂閱
請問: 因為要印的格式比較複雜,所以直接寫程式用TPrinter印,只是沒有辦法預覽,不知各位有沒有什麼辦法...,還是說QReport也可以直接用Canvas->TextOut列印?
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-06-18 10:06:56 IP:210.65.xxx.xxx 未訂閱
Hi wyvern,    在 QuickReport 上放個 QRImage 然後,在該 QRImage1 畫上你要的東西,再進行 QuickRep1.Preview
procedure TForm1.Button1Click(Sender: TObject);
begin
    QRImage1.Canvas.TextOut(10,10,'You are wrong !!');
    QRImage1.Canvas.LineTo(400,300);
    QuickRep1.Preview;
end;
---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
wyvern
一般會員


發表:19
回覆:31
積分:15
註冊:2003-06-18

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-06-18 13:34:50 IP:61.222.xxx.xxx 未訂閱
不行耶? preview後什麼都沒有出現(頁數=0), 倒是沒執行preview的話,QuickReport上會出現output的東西, 只是這樣如果是兩頁以上好像就不行了.
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-06-29 08:28:01 IP:210.65.xxx.xxx 未訂閱
Hi wyvern,    於 QuickReport 的 OnNeedData 事件加入程式碼,在無 DataSet 狀況下自行控制列印頁數    你可你看一下 QuickReport 的範例程式,路徑如下(視安裝路徑請自行更改) C:\Program Files\Borland\Delphi7\Demos\Quickrpt\Qr3\qr3demo.dpr 內的 OnNeedData Example     ---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
wyvern
一般會員


發表:19
回覆:31
積分:15
註冊:2003-06-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-06-29 16:14:05 IP:61.222.xxx.xxx 未訂閱
不好意思,可以將那一段程式貼出來嗎? 小弟用的是BC6,找不到這樣的範例.
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-06-29 16:36:52 IP:210.65.xxx.xxx 未訂閱
Hi wyvern,    該範例程式程式碼如下
{ :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  :: QuickReport 3.0 for Delphi 3.0/4.0/5.0                  ::
  ::                                                         ::
  :: Demo report that is populated by the OnNeedData event   ::
  ::                                                         ::
  :: Copyright (c) 1995-1999 QuSoft AS                       ::
  :: All Rights Reserved                                     ::
  ::                                                         ::
  :: web: http://www.qusoft.com  fax:  47 22 41 74 91        ::
  ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: }
unit needdata;    interface    uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, QuickRpt, Qrctrls;    type
  TfrmNeedData = class(TForm)
    QuickRep1: TQuickRep;
    DetailBand1: TQRBand;
    QRLabel1: TQRLabel;
    TitleBand1: TQRBand;
    QRSysData1: TQRSysData;
    procedure FormCreate(Sender: TObject);
    procedure QuickRep1BeforePrint(Sender: TCustomQuickRep;
      var PrintReport: Boolean);
    procedure QuickRep1NeedData(Sender: TObject; var MoreData: Boolean);
  private
    { Private declarations }
    SomeList: TStringlist;
    CurrentIndex: integer;
  public
    { Public declarations }
  end;    var
  frmNeedData: TfrmNeedData;    implementation    {$R *.dfm}    procedure TfrmNeedData.FormCreate(Sender: TObject);
var
  i: integer;
begin
  SomeList := TStringlist.Create;      for i := 0 to 500 do
    SomeList.Add('Line '   IntToStr(i));
end;    procedure TfrmNeedData.QuickRep1BeforePrint(Sender: TCustomQuickRep;
  var PrintReport: Boolean);
begin
  // You must reset your data in the BeforePrint event
  // or when you print from the preview, the report will
  // start with the last value(s)
  CurrentIndex := 0;
end;    procedure TfrmNeedData.QuickRep1NeedData(Sender: TObject;
  var MoreData: Boolean);
begin
  // If MoreData is true, then QuickReport will print
  // another detail band.  When you set it to false,
  // the report is done.        MoreData := (CurrentIndex < SomeList.Count);      if MoreData then
  begin
    QRLabel1.Caption := SomeList[CurrentIndex];        // Here's how to set the progress bar
    QuickRep1.QRPrinter.Progress := (Longint(CurrentIndex) * 100) div SomeList.Count;
  end
  else
    QuickRep1.QRPrinter.Progress := 100;      Inc(CurrentIndex);
end;    end.
你可以修改一下,將 StringList 更改為 ImageList 並將 ImageList 的內容塞給 QRImage 來達到你的需求 ---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
wyvern
一般會員


發表:19
回覆:31
積分:15
註冊:2003-06-18

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-07-04 10:34:23 IP:61.222.xxx.xxx 未訂閱
對不起,Fishman大大,小弟還是不太懂, ImageList的內容要如何塞給QRImage?
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-07-05 12:31:36 IP:210.65.xxx.xxx 未訂閱
Hi wyvern,    
procedure TForm1.QRBand1BeforePrint(Sender: TQRCustomBand;
  var PrintBand: Boolean);
begin
  Inc(CurrPage);
  QRImage1.Picture := NIL;
  ImageList1.GetBitmap(CurrPage - 1,QRImage1.Picture.Bitmap);
end;
---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
jcjroc
高階會員


發表:21
回覆:279
積分:115
註冊:2002-09-18

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-07-05 22:45:46 IP:61.219.xxx.xxx 未訂閱
Printer DC跟一般DC有何不同?還不都一樣(95%以上相同,除某些API在Printer上,因Driver沒實做忽略外) 既然都一樣,那你既然能畫到Printer DC上,同樣的程式碼就不能畫到一般DC上嗎(除DPI不一樣外,但那可用SetMapMode,SetViewportExtEx,SetWindowExtEx解決掉)?
wyvern
一般會員


發表:19
回覆:31
積分:15
註冊:2003-06-18

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-07-07 22:56:16 IP:61.229.xxx.xxx 未訂閱
可以了. 只要可以控制DetailBand就不成問題了. 
系統時間:2024-03-29 4:50:09
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!