fastreport如何加入自定义函数阿 |
尚未結案
|
xogs
一般會員 發表:7 回覆:4 積分:2 註冊:2004-07-14 發送簡訊給我 |
|
chinyu
高階會員 發表:12 回覆:157 積分:153 註冊:2002-06-14 發送簡訊給我 |
引言: 高手们,请问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( |
xogs
一般會員 發表:7 回覆:4 積分:2 註冊:2004-07-14 發送簡訊給我 |
引言: 高手们,请问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 發送簡訊給我 |
引言: 高手们,请问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 發送簡訊給我 |
|
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |