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

fastreport如何加入自定义函数阿

尚未結案
xogs
一般會員


發表:7
回覆:4
積分:2
註冊:2004-07-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-08 13:41:28 IP:219.130.xxx.xxx 未訂閱
高手们,请问fastreport中如何加入自已的自定义函数阿.........
chinyu
高階會員


發表:12
回覆:157
積分:153
註冊:2002-06-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-09 12:24:13 IP:61.223.xxx.xxx 未訂閱
引言: 高手们,请问fastreport中如何加入自已的自定义函数阿.........
FastReport 2.53 之 FAQ.txt =============================================================================== 2.22. How to use own function? Use TfrReport.OnUserFunction event. Here is simple example: procedure TForm1.frReport1UserFunction(const Name: String; p1, p2, p3: Variant; var val: Variant); begin if AnsiCompareText('SUMTOSTR', Name) = 0 then val := My_Convertion_Routine(frParser.Calc(p1)); end; After this, you can use SumToStr function in any place of report (in any expression or script). (ok, but it works only for one TfrReport component. I want to use my function everywhere (in all TfrReport components). Make OnUserFunction event handler common for all components. If you can't do this, you should create the function library: type TMyFunctionLibrary = class(TfrFunctionLibrary) public constructor Create; override; procedure DoFunction(FNo: Integer; p1, p2, p3: Variant; var val: Variant); override; end; constructor TMyFunctionLibrary.Create; begin inherited Create; with List do begin Add('DATEPROPIS'); Add('SUMPROPIS'); end; end; procedure TMyFunctionLibrary.DoFunction(FNo: Integer; p1, p2, p3: Variant; var val: Variant); begin val := 0; case FNo of 0: val := My_DateConvertion_Routine(frParser.Calc(p1)); 1: val := My_SumConvertion_Routine(frParser.Calc(p1)); end; end; To register function library, call frRegisterFunctionLibrary(TMyFunctionLibrary); To unregister library, call frUnRegisterFunctionLibrary(TMyFunctionLibrary); (how I can add my function to function list (in expression builder)? Use frAddFunctionDesc procedure (FR_Class unit): frAddFunctionDesc(FuncLib, 'SUMTOSTR', 'My functions', 'SUMTOSTR()/Converts number to its verbal presentation.'); Note: "/" symbol is required! It separates the function syntax from its description. FuncLib is reference to your function library (can be nil if you don't use the function library). When function library is unregistered, all its function will be automatically removed from the function list.
xogs
一般會員


發表:7
回覆:4
積分:2
註冊:2004-07-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-09 17:50:08 IP:218.14.xxx.xxx 未訂閱
引言: 高手们,请问fastreport中如何加入自已的自定义函数阿.........
这跟以下的有什么不同,你只不过原文照搬........ Q: 如何在保表中使用自訂函數? A: 請使用 TfrReport.OnUserFunction 事件。這裡有一個簡單的範例: procedure TForm1.frReport1UserFunction(const Name: String; p1, p2, p3: Variant; var val: Variant); begin if AnsiCompareText('SUMTOSTR', Name) = 0 then val := My_Convertion_Routine(frParser.Calc(p1)); end; 完成設定之後,您可以在報表的任何地方使用 SumToStr 函數。 Q: 好的,但是他僅可以使用在一個 TfrReport 元件。我要在任何有 TfrReport 元件的地方使用我的函數。 A: OnUserFunction 事件可控制 TfrReport 內的所有元件,假如您不要使用,您可以建立函數庫: type TMyFunctionLibrary = class(TfrFunctionLibrary) public constructor Create; override; procedure DoFunction(FNo: Integer; p1, p2, p3: Variant; var val: Variant); override; end; constructor TMyFunctionLibrary.Create; begin inherited Create; with List do begin Add('DATETOSTR'); Add('SUMTOSTR'); end; end; procedure TMyFunctionLibrary.DoFunction(FNo: Integer; p1, p2, p3: Variant; var val: Variant); begin val := 0; case FNo of 0: val := My_DateConvertion_Routine(frParser.Calc(p1)); 1: val := My_SumConvertion_Routine(frParser.Calc(p1)); end; end; 註冊函數庫,呼叫 frRegisterFunctionLibrary(TMyFunctionLibrary); 取消註冊,呼叫 frUnRegisterFunctionLibrary(TMyFunctionLibrary); Q: 如何加入自訂函數至函數清單 (in expression builder)? A: 使用 frAddFunctionDesc 程序 (FR_Class unit): frAddFunctionDesc(FuncLib, 'SUMTOSTR', 'My functions', 'SUMTOSTR()/Converts number to its verbal presentation.'); 註:"/" 符號是必須的!他是函數語法與函數說明的分隔字元。 FuncLib 為函數庫名稱 (假如您不使用函數庫,此處可為 nil)。當函數庫未註冊,所有函數庫內的函數將會自動從函數清單中移除。
xogs
一般會員


發表:7
回覆:4
積分:2
註冊:2004-07-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-09 17:51:45 IP:218.14.xxx.xxx 未訂閱
引言: 高手们,请问fastreport中如何加入自已的自定义函数阿......... to:chinyu
这跟以下的有什么不同,你只不过原文照搬........ Q: 如何在保表中使用自訂函數? A: 請使用 TfrReport.OnUserFunction 事件。這裡有一個簡單的範例: procedure TForm1.frReport1UserFunction(const Name: String; p1, p2, p3: Variant; var val: Variant); begin if AnsiCompareText('SUMTOSTR', Name) = 0 then val := My_Convertion_Routine(frParser.Calc(p1)); end; 完成設定之後,您可以在報表的任何地方使用 SumToStr 函數。 Q: 好的,但是他僅可以使用在一個 TfrReport 元件。我要在任何有 TfrReport 元件的地方使用我的函數。 A: OnUserFunction 事件可控制 TfrReport 內的所有元件,假如您不要使用,您可以建立函數庫: type TMyFunctionLibrary = class(TfrFunctionLibrary) public constructor Create; override; procedure DoFunction(FNo: Integer; p1, p2, p3: Variant; var val: Variant); override; end; constructor TMyFunctionLibrary.Create; begin inherited Create; with List do begin Add('DATETOSTR'); Add('SUMTOSTR'); end; end; procedure TMyFunctionLibrary.DoFunction(FNo: Integer; p1, p2, p3: Variant; var val: Variant); begin val := 0; case FNo of 0: val := My_DateConvertion_Routine(frParser.Calc(p1)); 1: val := My_SumConvertion_Routine(frParser.Calc(p1)); end; end; 註冊函數庫,呼叫 frRegisterFunctionLibrary(TMyFunctionLibrary); 取消註冊,呼叫 frUnRegisterFunctionLibrary(TMyFunctionLibrary); Q: 如何加入自訂函數至函數清單 (in expression builder)? A: 使用 frAddFunctionDesc 程序 (FR_Class unit): frAddFunctionDesc(FuncLib, 'SUMTOSTR', 'My functions', 'SUMTOSTR()/Converts number to its verbal presentation.'); 註:"/" 符號是必須的!他是函數語法與函數說明的分隔字元。 FuncLib 為函數庫名稱 (假如您不使用函數庫,此處可為 nil)。當函數庫未註冊,所有函數庫內的函數將會自動從函數清單中移除。
chinyu
高階會員


發表:12
回覆:157
積分:153
註冊:2002-06-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-10 21:06:36 IP:61.223.xxx.xxx 未訂閱
引言: 高手们,请问fastreport中如何加入自已的自定义函数阿.........
这跟以下的有什么不同,你只不过原文照搬........ 是一樣,不過我覺它已經寫的非常清楚了,你要答案就在裡面,再參考之前有前輩告訴你的 Power Pack 應該就可搞定,請自行研究,如有問題再來問比較好。
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-11-10 22:50:41 IP:218.174.xxx.xxx 未訂閱
引言: 这跟以下的有什么不同,你只不过原文照搬........
體諒一下chinyu也是盡力幫忙找了資料,如果有什麼可以改進的,大家也厚道一點,謝謝各位...
系統時間:2024-06-26 23:31:10
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!