delphi回调函数
文章来源:
http://anony3721.blog.163.com/blog/static/5119742010866050589/
一.主单元

1 unit UnMain;
2
3 interface
4
5 uses
6 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
7 Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Imaging.jpeg,
8 Vcl.ExtCtrls;
9
10 type
11 TFrmMain = class(TForm)
12 Edit1: TEdit;
13 Button1: TButton;
14 Image1: TImage;
15 procedure Button1Click(Sender: TObject);
16 private
17 { Private declarations }
18 procedure Test(str:string); {定义一个用于回调的过程}
19 public
20 { Public declarations }
21 end;
22
23 var
24 FrmMain: TFrmMain;
25
26 implementation
27 {引用子窗体单元}
28 uses UnChild;
29 {$R *.dfm}
30
31 procedure TFrmMain.Button1Click(Sender: TObject);
32 begin
33 {调用Unit2的接口方法}
34 CallUnit2(test);
35 end;
36
37 {回调过程的实现部分}
38 procedure TFrmMain.test(str: string);
39 begin
40 {将str值副给Edit1}
41 Edit1.Text:=str;
42 end;
43
44 end.
二.子单元

1 unit UnChild;
2
3 interface
4
5 uses
6 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
7 Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
8
9 type
10 TFuncCallBack = procedure(str:string) of object;
11 TFrmChild = class(TForm)
12 Edit1: TEdit;
13 Button1: TButton;
14 procedure Button1Click(Sender: TObject);
15 private
16 public
17 {定义一个回调函数类型的变量}
18 aFuncCallBack:TFuncCallBack;
19 end;
20 {提供给Unit1调用的接口方法,注意里面的参数的类型}
21 procedure CallUnit2(FuncCallBack:TFuncCallBack);
22 var
23 FrmChild: TFrmChild;
24
25 implementation
26
27 {$R *.dfm}
28 {接口方法的实现部分}
29 procedure CallUnit2(FuncCallBack:TFuncCallBack);
30 begin
31 Application.CreateForm(TFrmChild,FrmChild);
32 {将参数赋值给FuncCallBack}
33 FrmChild.aFuncCallBack:=FuncCallBack;
34 FrmChild.ShowModal;
35 end;
36
37 procedure TFrmChild.Button1Click(Sender: TObject);
38 begin
39 {当点击Form2的按钮时将Form2中的Edit的值传递给了Form1中的Edit}
40 {是不是很神奇?我并没有uses Unit1,但却改变了Form1中Edit的Text属性}
41 aFuncCallBack(Edit1.Text);
42 ModalResult:=mrOk;
43 end;
44
45 end.
作者:疯狂Delphi
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
欢迎关注我,一起进步!扫描下方二维码即可加我


【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix