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

FastReport3動態增加列印Memo,Picture

尚未結案
zxy666666
中階會員


發表:108
回覆:150
積分:86
註冊:2005-01-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-06-09 10:15:23 IP:219.132.xxx.xxx 未訂閱
大家好! 請問FastReport3在Footer如何動態增加Memo或Picture,因為要列印 的Memo與圖片不固定. 謝謝!
xxiaowang
中階會員


發表:51
回覆:75
積分:55
註冊:2005-01-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-06-09 10:50:21 IP:219.133.xxx.xxx 未訂閱
我用的是fr2.54,不过你可以参考一下,我想应该差不多: var page:Tfrpage; p,m:Tfrview; begin page:=Frreport3.pages[0]; //假设已有第一页 p:=Tfrpictureview.create; //创建Picture p.name:='picture1'; p.setbounds(200,200,100,30); //依次是picture的Left,Top,Width,Hight,注意要在Footer的位置范围之内. Tfrpictureview(p).Picture.Bitmap.LoadFromFile(extractfilepath(application.ExeName) '\TempImage.bmp'); //加载BMP图 m:=Tfrmemoview.create; //创建memo m.setbounds(400,200,50,20); m.name:='memo1'; m.memo.add('memo1'); page.objects.add(p); page.objects.add(m); end;
zxy666666
中階會員


發表:108
回覆:150
積分:86
註冊:2005-01-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-06-09 11:56:38 IP:219.132.xxx.xxx 未訂閱
hi,xxiaowang大大您好!    請問上面的代碼需寫在哪裡?我試過放在frxReport1BeforePrint事件裡面 出現錯誤(如下圖),請問如何解決? (注:我的frxReport1裡面並沒有靜態的picture)    
procedure TForm1.frxReport1BeforePrint(Sender: TfrxReportComponent);
var
  page:Tfrxpage;
  p:Tfrxview;
begin
  page:=frxReport1.pages[0]; 
  p:=Tfrxpictureview.create(self); 
  p.name:='picture5';
  p.setbounds(200,200,100,30);   
Tfrxpictureview(p).Picture.Bitmap.LoadFromFile('d:\001.bmp'); 
page.objects.add(p);
end;
xxiaowang
中階會員


發表:51
回覆:75
積分:55
註冊:2005-01-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-06-09 13:39:00 IP:219.133.xxx.xxx 未訂閱
Sorry,上面这段代码最后还差一行: Frreport3.ShowReport; //或是Frreport3.DesignReport进行设计 这段代码不用写在Frreport3的事件里面,可以写在Button或menu的onClick事件里面。 你Show出的这个错误意思是说:picture5这个控件已经存在了。 你再去创建一个名叫picture5当然会出错了。
xxiaowang
中階會員


發表:51
回覆:75
積分:55
註冊:2005-01-26

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-06-09 14:02:27 IP:219.133.xxx.xxx 未訂閱
完整代码: Procedure TFmain.Button1Click(Sender: TObject); var page:Tfrpage; p,m:Tfrview; begin page:=Frreport3.pages[0]; //假设已有第一页 p:=Tfrpictureview.create; //创建Picture p.name:='picture1'; p.setbounds(200,200,100,30); //依次是picture的Left,Top,Width,Hight,注意要在Footer的位置范围之内. Tfrpictureview(p).Picture.Bitmap.LoadFromFile(extractfilepath(application.ExeName) '\TempImage.bmp'); //加载BMP图 m:=Tfrmemoview.create; //创建memo m.setbounds(400,200,50,20); m.name:='memo1'; m.memo.add('memo1'); page.objects.add(p); page.objects.add(m); frreport3.ShowReport; //加多这一行; end; 你show的这个错误我分析,因为BeforePrint是每个控件都会触发一次,你在frreport的BeforePrint事件里创建的picture5又会触发beforeprint,这里会出现一个死循环,所以也就会出现同名错。
zxy666666
中階會員


發表:108
回覆:150
積分:86
註冊:2005-01-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-06-09 14:27:59 IP:219.132.xxx.xxx 未訂閱
xxiaowang大大,您好!很感謝你的回答。    我將代碼改寫在Button裡面,確實不會出現上述錯誤,但是會出現以下錯誤。 不知如何解決啊?麻煩你了
procedure TForm1.Button2Click(Sender: TObject);
var
  page:Tfrxpage;
  p:Tfrxview;
begin
  page:=frxReport1.pages[0]; 
  p:=Tfrxpictureview.create(self); 
  p.name:='picture5';
  p.setbounds(200,200,100,30);   
//Tfrxpictureview(p).Picture.Bitmap.LoadFromFile('d:\001.bmp'); //先不載入圖片
  page.objects.add(p);
  frxReport1.ShowReport; ///
end;
對了,如果以後貼代碼上來,請加上縮排,請見 < href="http://delphi.ktop.com.tw/topic.php?TOPIC_ID=7326">http://delphi.ktop.com.tw/topic.php?TOPIC_ID=7326
xxiaowang
中階會員


發表:51
回覆:75
積分:55
註冊:2005-01-26

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-06-09 14:47:01 IP:219.133.xxx.xxx 未訂閱
原贴: procedure TForm1.Button2Click(Sender: TObject); var page:Tfrxpage; p:Tfrxview; begin page:=frxReport1.pages[0]; p:=Tfrxpictureview.create(self); p.name:='picture5'; p.setbounds(200,200,100,30); //Tfrxpictureview(p).Picture.Bitmap.LoadFromFile('d:\001.bmp'); //先不載入圖片 page.objects.add(p); frxReport1.ShowReport; /// end; ------------------------------------------- 请用单步执行跟踪是那一句出错,出现这种错误应是引用了不存在的物件, 注意page:=frxReport1.pages[0]这句,是假定你的FrxReport1已经有一静态页。
zxy666666
中階會員


發表:108
回覆:150
積分:86
註冊:2005-01-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-06-09 15:26:00 IP:219.132.xxx.xxx 未訂閱
謝謝您!    錯誤是在ShowReport後產生的.(我有兩頁),也就是我的第一頁跑出來,然後就出現上述錯誤.反復測試還發現一個問題,當我程式運行後執行第一次是出現上述錯誤,第二次執行發現第一頁沒了,直接跑出第二頁並出現錯誤,第三次及其以後運行就會出現如下圖錯誤.就好像每運行一次會自動多跑一頁一樣,真怪! 注:如果不加動態產生 src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=22808636&CC=510104">
zxy666666
中階會員


發表:108
回覆:150
積分:86
註冊:2005-01-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-06-09 16:41:21 IP:219.132.xxx.xxx 未訂閱
再想請問大大一個問題,因為我是想動態增加的picture是列印在Footer上,但是我們目前是這樣寫: page:=frxReport1.pages[0]; ... page.objects.add(p);好像並沒有指定到Footer上啊, 那麼就算動態增加出來的圖是不是就一定會列印在第一頁?而我想列印在最後一頁(假如有兩頁的話)
xxiaowang
中階會員


發表:51
回覆:75
積分:55
註冊:2005-01-26

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-06-09 17:24:11 IP:219.133.xxx.xxx 未訂閱
注意这一句:p.setbounds(200,200,100,30); 要将p的位置及大小指定在Footer Band之内.那么如果你的Footer是Report Footer Band,这个Footer及其上面的内容就会出现在报表最尾了。 但如果你的第二页也是静态的(也就是设计时存在的),则将page:=Frreport3.pages[0];改成page:=Frreport3.pages[1];就行了。
zxy666666
中階會員


發表:108
回覆:150
積分:86
註冊:2005-01-14

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-06-10 09:53:24 IP:59.36.xxx.xxx 未訂閱
您好!我還是沒有試出結果來. <>< face="Verdana, Arial, Helvetica">引言: 注意这一句:p.setbounds(200,200,100,30); 要将p的位置及大小指定在Footer Band之内.那么如果你的Footer是Report Footer Band,这个Footer及其上面的内容就会出现在报表最尾了。 因為我不知道怎麼去算p的位置及大小(是不是在frxReport設計頁面中拉一個Footer Band,然後再看它的Left,Top,Width,Height屬性值是多少?)所以也不知道有沒有在Footer Band之內 可否再請教您,怎樣在程式中動態新增page ? 我現在有一個想法是:在動態新增的page中,動態增加picture(或Memo) 看會不會有問題. 麻煩您了!
xxiaowang
中階會員


發表:51
回覆:75
積分:55
註冊:2005-01-26

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-06-10 10:05:17 IP:219.133.xxx.xxx 未訂閱
引言: ----------------------------------- 因為我不知道怎麼去算p的位置及大小(是不是在frxReport設計頁面中拉一個Footer Band,然後再看它的Left,Top,Width,Height屬性值是多少?)所以也不知道有沒有在Footer Band之內 ------------------------------------------ 正确。 动态创建页的代码: frreport1.pages.clear; frreport1.pages.add; //如果要加多页,将此句放在循环内
系統時間:2024-04-26 19:06:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!