問題來源: http://delphi.ktop.com.tw/board.php?cid=30&fid=100&tid=84526
我想由一個資料欄位記錄顏色別,去動態變更Memo字型的顏色,由於Fastreport沒有StringToColor函數,需用到Delphi函數,於是想用frxReport1UserFunction事件去觸發自訂函數。但是遇到了Can’t convert (null) to Integer錯誤。經迂迴地再包一層,試出來可用。
自訂函式內容
function TForm1.MyFunc(param: String): TColor;
begin
Result:=StringToColor(param);
end;
Fastreport預覽時觸發的事件
function TForm1.frxReport1UserFunction(const MethodName: String;
var Params: Variant): Variant;
begin
if MethodName = 'MYFUNC' then
Result := MyFunc(Params[0]);
end;
準備一些資料餵給Fastreport當做資料來源
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;
這報表的執行結果Memo1的字型顏色會依該筆的ColorStyle欄位顏色資料不同,而顯示不同的顏色。