----------------------------
首先窗体类增加一个和这个事件 一样参数的函数
------------------------------------------
这个函数的实现代码如下:
function TfrmFastPrint.MyMoneyToCnAddFrx(const MethodName: string; var Params: Variant): Variant;//这个函数的参数和要fr事件的参数完全一致 var MyFastPrintApi: TFastPrintApi; begin MyFastPrintApi := TFastPrintApi.Create; try if CompareText(MethodName,'MyMoneyToCn') = 0 then begin Result := MyFastPrintApi.MyMoneyToCn(Params[0]); end; finally MyFastPrintApi.Free; end; end;
----------------------
动态创建fr组件 动态给其 事件
MyfrxReport := TfrxReport.Create(nil); try //----------------------------- {增加大写函数} MyfrxReport.AddFunction('function MyMoneyToCn(n: Real): string;','函数库','人民币大写函数'); MyfrxReport.OnUserFunction := MyMoneyToCnAddFrx;//注意这里一定不能写任何参数 finally MyfrxReport.Free; end;
这样就可以了
---------------------
其它组件 动态事件 也就是这个 方法了 。。。。
function SmallToMoney(akey: real): string; ....... begin //'1234500' ................. end; //此处为了fastreport加载自定义函数以便引用 procedure Tprint_from.FormCreate(Sender: TObject); begin frxReport1.AddFunction('function SmallToMoney(akey: real): string;', 'Myfunction', '函数功能说明'); end; //为了给fastreport调用自定义函数。 function Tprint_from.frxReport1UserFunction(const MethodName: string; var Params: Variant): Variant; begin if UpperCase(MethodName) = UpperCase('SmallToMoney') then Result := SmallToMoney(Params[0]); end;
如果fastreport 不是动态创建的 SmallToMoney 这个函数 不需要 加到 一个类上 没有 测试 这个 有时间 测试下
如何为动态创建的组件写事件
我现在遇到的问题是,动态创建了可视组件Tedit后,要为这个动态控件指定onmousemove事件,而且不只是动态创建一个Tedit控件,有可能是多个,每个Tedit控件的onmousemove事件是一样的。按照一般的方法,就是先定义一个函数,然后在创建Tedit控件的时候直接指定onmousemove事件,下面是delphi标准的事件代码:
procedure TForm1.Edit1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
//具体代码省略
end;
请大家注意,创建Tedit我是这样做的(省略了部分内容)
var e:Tedit;
begin
e:=Tedit.create(self);
e.parent:=panel1;
e.onmousemove:=myfunction(//这里的参数不会指定,自定义函数myfunction的代码在下面);
end;
自定义函数myfunction的代码:
procedure tform1.myfunction(Control: TControl; Shift: TShiftState; X, Y, Precision: integer);
begin
//代码省略
end;
大家注意,自定义函数myfunction中的shift参数和x,y参数在e.onmousemove:=myfunction(。。。)如何给出?其他参数不用考虑,我知道怎么写.唯恐问题说不明白,所以比较罗嗦,请大家见谅。多谢!!!
------解决方案--------------------------------------------------------
注意自定义的事件的参数要与要赋值的事件的参数一致!
Edit1.OnMouseMove := YourFunc;
procedure YourFunc(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Edit2.text := IntToStr(x);
Edit3.text := IntToStr(y);
end;
------解决方案--------------------------------------------------------
事件处理函数必须属于某个对象的。
独立函数是不可以作为事件处理函数的。
比如 kjiwu(阿磊) 的以下代码
Edit1.OnMouseMove := YourFunc;
procedure YourFunc(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Edit2.text := IntToStr(x);
Edit3.text := IntToStr(y);
end;
因为 YourFunc是一个不属于任何对象的,独立的函数,所以这样是不行的。
解决办法: 将该函数放到 TForm1 窗口类中,作为窗口的一个成员函数
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure YourFunc(Sender: TObject; Shift: TShiftState; X, Y: Integer);
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.YourFunc(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Edit2.text := IntToStr(x);
Edit3.text := IntToStr(y);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.OnMouseMove := YourFunc;
end;
本文来自博客园,作者:del88,转载请注明原文链接:https://www.cnblogs.com/del88/archive/2013/03/05/2944221.html
分类:
FastReport
, 组件相关
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
2012-03-05 LocalDB 的安装过程