全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2341
推到 Plurk!
推到 Facebook!

QR4.07+D7 可以預覽,列印會發生錯誤!(已解決)

缺席
ssbbs
一般會員


發表:3
回覆:10
積分:2
註冊:2008-01-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-07-24 10:46:08 IP:203.70.xxx.xxx 訂閱
請問一下,
在下寫一個簡單測試程式,部分程式碼如下: 螢幕預覽視窗顯示沒有問題,
但是,執行預覽視窗中的印表機設定與列印這兩項圖示功能,
程式就會發生錯誤:



[code xml]
//-----------------------------------------
// 新頁次
//-----------------------------------------
Procedure TForm1.NewPage(var Rep: TQrPrinter);
var
XX, YY : Integer;
Begin
With Rep do Begin
NewPage;
Canvas.Font.Name := '新細明體';
Canvas.Font.Size := 10;
Canvas.Font.color := clBlack;
Canvas.Font.Style := [fsBold];
XX := XPos(PaperWidth - 200);
YY := YPos(100);
Canvas.TextOut( XX, YY, '頁次: ' IntToStr(PageNumber));
End;
End;


procedure TForm1.btnPrintClick(Sender: TObject);
var
// x: Integer;
TopMarginPage : Integer;
BottomMarginPage: Integer;
LeftMargin : Integer;
EndOfPage : Integer;
nWH : Integer; // Word Height
nWW : Integer; // Word Width
XX, YY : Integer;
bufW : WideString;
bufA : AnsiString;
nOldRec : Integer;
Rep : TQRPrinter;
// cRptName : string;
begin
ShowMessage('Demo');
// RegisterPreviewClass( TMyQRPreviewInterface ); // 註冊螢幕預覽 Class, 自己寫的 TMyQRPreviewInterface
Rep := TQRPrinter.Create(Self); // 建立 QrPrinter Class
Rep.PreviewControl := Self;
with Rep do
try

TopMarginPage := 100; // 上邊界
BottomMarginPage := 100; // 下邊界
LeftMargin := 100; // 左邊界

PaperSize := A4; // 紙張規格
Orientation := poPortrait; // 列印方向
Copies := 1; // 列印份數
Title := '報表預覽'; // 報表抬頭

// Application.ProcessMessages;

BeginDoc;
Self.NewPage(Rep);
EndOfPage := YSize(PaperLength - BottomMarginPage);
nWH := Canvas.TextHeight('X');
nWW := Canvas.TextWidth('X');
XX := XPos(LeftMargin);
YY := YPos(TopMarginPage);
{資料輸出}
for XX := 1 to 200 do begin
// unicode 寫法
// bufW := '中文字: Printing Test - Line ' IntToStr(XX);
// TextOutW(Canvas.Handle, XX, YY, PWChar(bufW), Length(bufW));
// 一般 ANSI-String 用法
bufA := '中文字: Printing Test - Line ' IntToStr(XX);
TextOutA(Canvas.Handle, XX, YY, PChar(bufA), Length(bufA));
//
Inc( YY, nWH);
// 超過頁長
if YY >= (EndOfPage - nWH) Then begin
Self.NewPage(Rep); // 新頁次
YY := YPos(TopMarginPage);
end;
end;
EndDoc;
//
// cRptName := 'test.qrp';
// Save(cRptName);
// Load(cRptName);
PreviewModal; // 開啟螢幕預覽視窗(Modal 模式)
// Print; // 錯誤
finally
Free;
// Application.ProcessMessages;
end;
// 結束
end;
[/code]

錯誤訊息:
Free Image Hosting at www.ImageShack.us
附加檔案:4a69207098397_d7test.rar
編輯記錄
ssbbs 重新編輯於 2009-07-24 10:47:58, 註解 無‧
ssbbs 重新編輯於 2009-07-24 10:48:57, 註解 無‧
ssbbs 重新編輯於 2009-07-24 22:44:00, 註解 無‧
ssbbs
一般會員


發表:3
回覆:10
積分:2
註冊:2008-01-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-07-24 22:35:55 IP:203.70.xxx.xxx 訂閱
找到答案了!
原來要修改 Source Code: QRPrntr.pas
裡面的 TQRPrinter.Print;
這樣子就可以正常輸出至印表機而且沒有錯誤訊息了.
而且,Delphi 7 就可以搭配 Tnt QR 直接列印輸出 unicode 字元.

測試過 QR 5.02 也可以正常列印輸出了.
系統時間:2024-04-24 1:43:19
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!