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

Fastreport 如何使用外部(自訂)函數

尚未結案
g9221712
高階會員


發表:145
回覆:344
積分:162
註冊:2006-07-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-10-11 23:42:37 IP:220.134.xxx.xxx 訂閱
Fastreport 如何使用外部(自訂)函數
各位前輩及版主大大:
因為在Fastreport找不到StringToColor函數可以使用,我詢問原廠支援
不過原廠回應:
===========================================================================
You can add your function so:
procedure TForm1.FormCreate(Sender: TObject);
begin
frxReport1.AddFunction('function MyFunc(s:String):string');
frxReport1.ShowReport();
end;
function TForm1.frxReport1UserFunction(const MethodName: String;
var Params: Variant): Variant;
begin
if MethodName = 'MYFUNC' then Result := UPPERCASE(Params[0]);
end;
===========================================================================
我實際使用
In the Form Code:
frxReport1.AddFunction('function StringToColor(s:String):TColor');
self.frxReport1.LoadFromFile('report\ShowEdit_N.fr3');
Self.frxReport1.ShowReport(True);
Self.frxReport1.Clear;

In the Report Code:
procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
BEGIN
if length()=0 then
begin
M1.font.color:=clwhite; // Hide Value
end
else
begin
M1.font.color:=StringToColor(trim());
end;
END;
不知道錯誤在哪!
------
「人們所以覺得寂寞,是因為他們會築牆,卻不會搭橋。」
程式寫的越久,卻發現自己越來越不會寫程式!
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-10-12 11:10:49 IP:60.248.xxx.xxx 未訂閱
試試把
frxReport1.AddFunction('function StringToColor(s:String):TColor');
self.frxReport1.LoadFromFile('report\ShowEdit_N.fr3');
這兩行前後順序換掉

我試下面程式碼是可以的
function TForm1.MyFunc(s1,s2: String): string;
begin
Result:=s1 s2;
end;
function TForm1.frxReport1UserFunction(const MethodName: String;
var Params: Variant): Variant;
begin
if MethodName = 'MYFUNC' then
Result := MyFunc(Params[0], Params[1]);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
frxReport1.AddFunction('function MyFunc(s1,s2: String): string;');
frxReport1.ShowReport();
end;
報表
procedure frxReport1OnStartReport(Sender: TfrxComponent);
begin
Memo1.Text:=MYFUNC('2','1');
end;
g9221712
高階會員


發表:145
回覆:344
積分:162
註冊:2006-07-06

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-10-13 04:22:29 IP:220.134.xxx.xxx 訂閱
pedro756901前輩:
我試了您的方法,確實可以執行,但是我因為資料庫欄位內的值,有部份為NULL,
我自己有撰寫null處理的函數NZ(,''),但是執行報表時,卻會顯示null型別無法轉String
不知道要如何在Fastreport 中,使用StringToColor搭配null的判斷,可否請pedro756901前輩
再次指正!感謝您!
------
「人們所以覺得寂寞,是因為他們會築牆,卻不會搭橋。」
程式寫的越久,卻發現自己越來越不會寫程式!
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2006-10-13 11:26:24 IP:60.248.xxx.xxx 未訂閱
當我直接用StringToColor函式試您的程式,確實發生型態無法轉換錯誤(我不知道這問題出在那兒,也許FastReport在橋接Variant或接function返回值出錯,不過這我要花點時程追source看是不是?),後來我想想,直接再包一層,試出來結果如下
function TForm1.MyFunc(param: String): TColor;
begin
Result:=StringToColor(param);
end;
function TForm1.frxReport1UserFunction(const MethodName: String;
var Params: Variant): Variant;
begin
if MethodName = 'MYFUNC' then
Result := MyFunc(Params[0]);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientDataSet1.Close;
ClientDataSet1.CreateDataSet;
ClientDataSet1.Append;
ClientDataSet1ColorStyle.Value:='clRed';
ClientDataSet1.Append;
ClientDataSet1ColorStyle.Value:='';
ClientDataSet1.Append;
ClientDataSet1ColorStyle.Value:='clGreen';
frxReport1.AddFunction('function MyFunc(param: String): TColor');
frxReport1.ShowReport();
end;

報表
procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
begin
if Length([frxDBDataset1."ColorStyle"])>0 then
Memo1.Font.Color:=MyFunc([frxDBDataset1."ColorStyle"]);
end;
']'需替換成'<'
g9221712
高階會員


發表:145
回覆:344
積分:162
註冊:2006-07-06

發送簡訊給我
#5 引用回覆 回覆 發表時間:2006-10-14 09:44:26 IP:220.134.xxx.xxx 訂閱
pedro756901前輩:
感謝您不斷的回應和測試,真是很感謝您!
我自己測試的結果,我本來以為是Null問題,所以我將欄位內Null的部份都填入空白字串,但是我發現
好像情況不是如此,也就是並非是Null值引起的,我後來直接改程式如下:
if length()=0 then
begin
M1.font.color:=clwhite; // Hide Value
end
else
begin
// showmessage();
// M1.font.color:=StringToColor(trim());
M1.font.color:=StringToColor('clblack');
end;
我直接帶入值,但是我發現一樣會引起型別轉換的錯誤,不知道是什麼原因,請前輩提示!

------
「人們所以覺得寂寞,是因為他們會築牆,卻不會搭橋。」
程式寫的越久,卻發現自己越來越不會寫程式!
系統時間:2024-05-05 15:57:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!