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

Kylix3enterprise如何做到報表列印輸出

答題得分者是:bruce0211
c905165
中階會員


發表:50
回覆:120
積分:54
註冊:2002-09-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-10-16 18:21:37 IP:203.204.xxx.xxx 未訂閱
Kylix3enterprise如何做到報表列印輸出 因為Delphi有Qreport,但是kylix卻沒有,怎麼做到呢?
------
有困難就是能力不足,有麻煩就是方法不對... 劣者總是遇到困難,也時常出現麻煩
bruce0211
版主


發表:157
回覆:668
積分:279
註冊:2002-06-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-10-16 19:00:45 IP:210.208.xxx.xxx 未訂閱
在沒有外部元件前 只好使用 Kylix/Delphi 內建的TPrinter 類別(可於 OnLine help 查 TPrinter) 以前 Delphi 1.0 & 2.0 時代沒有 QuickReport 時 我們都是這樣用的 發表人 - bruce0211 於 2002/10/16 20:26:57
c905165
中階會員


發表:50
回覆:120
積分:54
註冊:2002-09-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-10-20 18:42:48 IP:203.204.xxx.xxx 未訂閱
引言: 在沒有外部元件前 只好使用 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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-10-20 22:43:19 IP:210.208.xxx.xxx 未訂閱
以前有做過類似預覽列印的方法 也就是把一些具有 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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-11-19 21:01:42 IP:203.204.xxx.xxx 未訂閱
程式碼: 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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-11-20 09:35:42 IP:210.208.xxx.xxx 未訂閱
看錯誤訊息像是某個 item.index 超出了 item.count 但程式碼中又未用到任何的 ListBox , 或 TStringList 類的物件變數 若真的是 textout 出了問題 用 err & try 的方式 將 x 換成 1 或 2 或 3 ..... 等常數,看是否 x 出了問題 若不是,把後面那一長串要 output 的 text 縮短在試試看
c905165
中階會員


發表:50
回覆:120
積分:54
註冊:2002-09-29

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-11-26 23:44:19 IP:203.204.xxx.xxx 未訂閱
您好,之前閣下提到可以利用具有canvas屬性的元件來達到預覽的功能。我寫了之後,發現我的程式是可以預覽沒有錯,但是在這個元件要用程式碼去「列印」一次,而printer又要列印一次,而這二個程式碼只能「分開」來寫,也就是各處理各的。好像很沒有技巧,能不能在這個畫布上預覽完畢之後,有什麼方式能夠直接轉向到printer上呢? 請問用什麼具有canvas屬性的元件,比較有技巧或者是比較方便使用? 請問有什麼建議嗎?因為說實在的,程式一直寫下來,發現報表越來越複雜(也就是花俏)。
------
有困難就是能力不足,有麻煩就是方法不對... 劣者總是遇到困難,也時常出現麻煩
andersonhsieh
版主


發表:33
回覆:531
積分:439
註冊:2002-06-10

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-11-26 23:49:19 IP:211.23.xxx.xxx 未訂閱
引言: 您好,之前閣下提到可以利用具有canvas屬性的元件來達到預覽的功能。我寫了之後,發現我的程式是可以預覽沒有錯,但是在這個元件要用程式碼去「列印」一次,而printer又要列印一次,而這二個程式碼只能「分開」來寫,也就是各處理各的。好像很沒有技巧,能不能在這個畫布上預覽完畢之後,有什麼方式能夠直接轉向到printer上呢? 請問用什麼具有canvas屬性的元件,比較有技巧或者是比較方便使用? 可用TIMAGE 請問有什麼建議嗎?因為說實在的,程式一直寫下來,發現報表越來越複雜(也就是花俏)。
@@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@
bruce0211
版主


發表:157
回覆:668
積分:279
註冊:2002-06-13

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-11-28 07:19:05 IP:210.208.xxx.xxx 未訂閱
c905165 長官指的應是如何將已畫好的 Canvas 物件在預覽後直接丟到報表上吧,而不是還在停留要用哪個 Canvas 做預覽功能吧...就敝人所知,以上動作只是海尼根做法(山不轉路轉),應該沒有哪個好用的 Canvas 可以很快的轉換到 TPrinter 上,因為我沒有時間去試,但要Try 的話我會試試用 assign 看看 諸如 TPrinter->Canvas->Assign(Image->Canvas) 等等,但不一定成功... 其實我個人想法,這些動作本就是 err & try 試出來的,而不是量身訂做來專做報表的,所以我不會去奢望有現成好用的元件剛好滿足我的目的,若真的有的話那只是恰巧運氣罷了;還有另一個個人想法,能快速滿足user介面的程式不一定背後是用啥高深技巧寫出來的,一般程式碼簡潔的程式寫出來的功能也相對只是簡單功能...就像套裝軟體把所有架構規格化,功能開放只要改變ini檔旗標就能改變功能,但真正的中大型專案能用套裝軟體去套嗎?還不是要用笨方法去一步一步專案開發...我想應該沒有現成標準物件可以直接預覽後列印,預覽跟列印分別寫程式碼,我也不覺有何不高明....因為我們本來就不是用專業的報表元件來做這件事的
bruce0211
版主


發表:157
回覆:668
積分:279
註冊:2002-06-13

發送簡訊給我
#10 引用回覆 回覆 發表時間:2002-12-02 22:25:07 IP:210.208.xxx.xxx 未訂閱
滿有名的3'rd party 元件 FastReport CLX edition http://www.fast-report.com/en/frclx.php
c905165
中階會員


發表:50
回覆:120
積分:54
註冊:2002-09-29

發送簡訊給我
#11 引用回覆 回覆 發表時間:2002-12-03 03:29:33 IP:203.204.xxx.xxx 未訂閱
呵呵呵,您是怎麼找到的? 太快樂了,有這種東西for kylix,以後再也不用望著別人用 delphi 而流口水了。 馬上來試一試。
------
有困難就是能力不足,有麻煩就是方法不對... 劣者總是遇到困難,也時常出現麻煩
bruce0211
版主


發表:157
回覆:668
積分:279
註冊:2002-06-13

發送簡訊給我
#12 引用回覆 回覆 發表時間:2002-12-03 06:47:44 IP:210.208.xxx.xxx 未訂閱
http://www.crispin.idv.tw/download/FastReport246(試閱版).pdf 長官研究好後也寫一篇 Kylix 版說明書吧 ...
c905165
中階會員


發表:50
回覆:120
積分:54
註冊:2002-09-29

發送簡訊給我
#13 引用回覆 回覆 發表時間:2002-12-11 06:28:07 IP:203.204.xxx.xxx 未訂閱
它的網頁上面是寫說有delphi&c&kylix的元件,只是我試了老半天,到目前為止,都找不到kylix的元件檔可以安裝。真的是試了好久。 您知道kylix的元件檔要那兒找嗎? 有困難就是能力不足,有麻煩就是方法不對... 劣者總是遇到困難,也時常出現麻煩
------
有困難就是能力不足,有麻煩就是方法不對... 劣者總是遇到困難,也時常出現麻煩
bruce0211
版主


發表:157
回覆:668
積分:279
註冊:2002-06-13

發送簡訊給我
#14 引用回覆 回覆 發表時間:2002-12-11 07:05:39 IP:210.208.xxx.xxx 未訂閱
http://www.fast-report.com/en/download.php 就在前面介紹的網頁正上方 有個 download 鏈結 ... 試完一定要寫心得阿 ....
系統時間:2017-10-24 4:46:58
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!