能不能让一个对象方法作回调函数?

zqc-tutorial 2003-12-02 04:13:42
通常好象都是这样做的:
function EnumWindowsProc(hWnd: HWnd; lParam: Integer): Boolean; stdcall;
begin
...
end;
...
EnumWindows(@EnumWindowsProc, 0);

现在如果上面那个回调函数是一个对象方法,程序运行就会有问题。
但是对象方法能不能做回调函数呢?
如果能,又该怎么做呢?
...全文
87 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zqc-tutorial 2003-12-03
  • 打赏
  • 举报
回复
这样失去了对象方法的意义,用了也没什么意义了。
fengyvn 2003-12-02
  • 打赏
  • 举报
回复
补充一下,如果用方法作为回调函数,方法必须是public或published,否则methodAddress会返回nil.
午秋 2003-12-02
  • 打赏
  • 举报
回复
不过要注意的是,在
function TForm1.EnumWindowsProc(hWnd: HWnd; lParam: Integer): Boolean;
里使用TForm1上的控件时,一定要加上全名:
如ListBox1一定要写成Form1.ListBox1
午秋 2003-12-02
  • 打赏
  • 举报
回复
可以,用MethodAddress方法,
例如:
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
function EnumWindowsProc(hWnd: HWnd; lParam: Integer): Boolean;
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.EnumWindowsProc(hWnd: HWnd; lParam: Integer): Boolean;
begin
ShowMessage('hello');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
EnumWindows(Self.MethodAddress('EnumWindowsProc'), 0);
end;

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧