Kylix3enterprise如何做到報表列印輸出 |
答題得分者是:bruce0211
|
c905165
中階會員 發表:50 回覆:120 積分:54 註冊:2002-09-29 發送簡訊給我 |
|
bruce0211
版主 發表:157 回覆:668 積分:279 註冊:2002-06-13 發送簡訊給我 |
|
c905165
中階會員 發表:50 回覆:120 積分:54 註冊:2002-09-29 發送簡訊給我 |
引言: 在沒有外部元件前 只好使用 Kylix/Delphi 內建的TPrinter 類別(可於 OnLine help 查 TPrinter) 以前 Delphi 1.0 & 2.0 時代沒有 QuickReport 時 我們都是這樣用的 發表人 - bruce0211 於 2002/10/16 20:26:57根據閣下的說法,我試了好久,發現放在這裡面的物件,如文字、數字、圖像,似乎無法「位置放得很準」,而且是不是一開始會浪費很多paper,如果說相對於quickreport的話。因為是所見即所得的介面。 請問有沒有什麼使用心得可供參考。謝謝!
------
有困難就是能力不足,有麻煩就是方法不對... 劣者總是遇到困難,也時常出現麻煩 |
bruce0211
版主 發表:157 回覆:668 積分:279 註冊:2002-06-13 發送簡訊給我 |
以前有做過類似預覽列印的方法
也就是把一些具有 Canvas 屬性的物件拿來當作輸出(跟畫在印表機方式是一樣滴),看看可以後再畫到印表機上
不過那只是純粹練功加上無聊以及有興趣
山不轉路轉,沒有 3'rd 元件前,沒有別的方法....
還有,你的報表有很花俏嗎 ?
不然一些有規則的表格印表,只要抓到大約的位置
就可用公式去計算大約座標位置,
每次也只是稍微修改丟入的公式參數,就可將位置對的很準....
經驗如下:
先試著在A4頁內畫一個矩形框框(越大越好)
找出可列印的最大面積範圍之4 個頂點座標
然後想像將這個矩形切成若干塊(像是一個M * N 欄的表格)
預計你每頁列印的區塊
寫個公式傳入 M(每頁幾欄) 及 N(每頁幾列)
甚至在公式裡面加個 COUNTER ,列印完一頁自動下跳頁指令
以後你只要用個迴圈丟入 COUNT 值
該公式舊自動算出目前 COUNT 是在哪欄哪列,座標又該是多少 發表人 - bruce0211 於 2002/10/20 22:54:56
|
c905165
中階會員 發表:50 回覆:120 積分:54 註冊:2002-09-29 發送簡訊給我 |
程式碼:
procedure TForm9.Button2Click(Sender: TObject);
var
PageNum: String;
Ctr,i,PHeight,LineSpace,x: integer;
linesperpage: integer;
begin //「列印」按鈕 linesperpage:=55; //每頁限定的行數
Printer.BeginDoc; //啟動一個新的印表工作
x:=0; //列印的 X 座標
Ctr:=1; //計算列印行數的變數(行數計數器)
PHeight:=Printer.PageHeight;
LineSpace:=PHeight div 60;
PageNum:=IntToStr(Printer.PageNumber);
StatusBar1.Panels[0].Text:='現在正在印第 ' PageNum ' 頁資料.....';
// exit;
//開始列印資料
Printer.Canvas.TextOut(0,x,' 123456789a123456789b123456789c123456789d123456789e123456789f123456789g123456789');
for i:=0 to 55 do begin
Printer.Canvas.TextOut(0,x,inttostr(i));
x:=x LineSpace;
Ctr:=ctr 1;
if (ctr>linesperpage) then begin //換頁
Printer.NewPage;
x:=0;
ctr:=0;
PageNum:=Inttostr(Printer.PageNumber);
//StatusBar1.Panels[0].Text:='現在正在印第 ' PageNum ' 頁資料.....';
end;
end;
printer.EndDoc;
StatusBar1.Panels[1].Text:='印列完成,共 ' PageNum ' 頁'; end; end.
錯誤訊息:
Project Project1 raised exception class EListError with message 'List index out of bounds (1)'. Process stopped. Use Step or Run to continue. 請問這樣,到底是錯在何處?一直試不出來。
有懷疑是這一行,因為如果沒有這一行就不會有錯誤訊息:
Printer.Canvas.TextOut(0,x,' 123456789a123456789b123456789c123456789d123456789e123456789f123456789g123456789');
但是,為什麼? 發表人 - c905165 於 2002/11/19 21:06:04
------
有困難就是能力不足,有麻煩就是方法不對... 劣者總是遇到困難,也時常出現麻煩 |
bruce0211
版主 發表:157 回覆:668 積分:279 註冊:2002-06-13 發送簡訊給我 |
|
c905165
中階會員 發表:50 回覆:120 積分:54 註冊:2002-09-29 發送簡訊給我 |
您好,之前閣下提到可以利用具有canvas屬性的元件來達到預覽的功能。我寫了之後,發現我的程式是可以預覽沒有錯,但是在這個元件要用程式碼去「列印」一次,而printer又要列印一次,而這二個程式碼只能「分開」來寫,也就是各處理各的。好像很沒有技巧,能不能在這個畫布上預覽完畢之後,有什麼方式能夠直接轉向到printer上呢? 請問用什麼具有canvas屬性的元件,比較有技巧或者是比較方便使用?
請問有什麼建議嗎?因為說實在的,程式一直寫下來,發現報表越來越複雜(也就是花俏)。
------
有困難就是能力不足,有麻煩就是方法不對... 劣者總是遇到困難,也時常出現麻煩 |
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
引言: 您好,之前閣下提到可以利用具有canvas屬性的元件來達到預覽的功能。我寫了之後,發現我的程式是可以預覽沒有錯,但是在這個元件要用程式碼去「列印」一次,而printer又要列印一次,而這二個程式碼只能「分開」來寫,也就是各處理各的。好像很沒有技巧,能不能在這個畫布上預覽完畢之後,有什麼方式能夠直接轉向到printer上呢? 請問用什麼具有canvas屬性的元件,比較有技巧或者是比較方便使用? 可用TIMAGE 請問有什麼建議嗎?因為說實在的,程式一直寫下來,發現報表越來越複雜(也就是花俏)。@@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@ |
bruce0211
版主 發表:157 回覆:668 積分:279 註冊:2002-06-13 發送簡訊給我 |
c905165 長官指的應是如何將已畫好的 Canvas 物件在預覽後直接丟到報表上吧,而不是還在停留要用哪個 Canvas 做預覽功能吧...就敝人所知,以上動作只是海尼根做法(山不轉路轉),應該沒有哪個好用的 Canvas 可以很快的轉換到 TPrinter 上,因為我沒有時間去試,但要Try 的話我會試試用 assign 看看
諸如 TPrinter->Canvas->Assign(Image->Canvas) 等等,但不一定成功...
其實我個人想法,這些動作本就是 err & try 試出來的,而不是量身訂做來專做報表的,所以我不會去奢望有現成好用的元件剛好滿足我的目的,若真的有的話那只是恰巧運氣罷了;還有另一個個人想法,能快速滿足user介面的程式不一定背後是用啥高深技巧寫出來的,一般程式碼簡潔的程式寫出來的功能也相對只是簡單功能...就像套裝軟體把所有架構規格化,功能開放只要改變ini檔旗標就能改變功能,但真正的中大型專案能用套裝軟體去套嗎?還不是要用笨方法去一步一步專案開發...我想應該沒有現成標準物件可以直接預覽後列印,預覽跟列印分別寫程式碼,我也不覺有何不高明....因為我們本來就不是用專業的報表元件來做這件事的
|
bruce0211
版主 發表:157 回覆:668 積分:279 註冊:2002-06-13 發送簡訊給我 |
|
c905165
中階會員 發表:50 回覆:120 積分:54 註冊:2002-09-29 發送簡訊給我 |
|
bruce0211
版主 發表:157 回覆:668 積分:279 註冊:2002-06-13 發送簡訊給我 |
|
c905165
中階會員 發表:50 回覆:120 積分:54 註冊:2002-09-29 發送簡訊給我 |
|
bruce0211
版主 發表:157 回覆:668 積分:279 註冊:2002-06-13 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |