知道窗口句柄、窗口中定义的函数名,但是窗口的Name不知道,现在怎么调用这个函数?

DumDum 2008-06-06 02:03:58
现在只知道某个的窗口句柄和窗口中定义的函数名,但是窗口的Name不知道,现在怎么调用这个函数?
...全文
73 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
DumDum 2008-06-09
  • 打赏
  • 举报
回复
谢谢,可以了,~~!结了
王集鹄 2008-06-09
  • 打赏
  • 举报
回复
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
published
procedure Test(Msg: string);
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
type
TTestMethod = procedure (Msg: string) of object;
var
vWinControl: TWinControl;
vMethodAddress: Pointer;
vMethod: TMethod;
begin
vWinControl := FindControl(Handle);
if not Assigned(vWinControl) then Exit;
vMethodAddress := vWinControl.MethodAddress('Test');
if not Assigned(vMethodAddress) then Exit;
vMethod.Code := vMethodAddress;
vMethod.Data := vWinControl;
TTestMethod(vMethod)('Zswang 路过');
end;

procedure TForm1.Test(Msg: string);
begin
ShowMessage(Name + '.' + Msg);
end;


1、这个窗体要在本进程中。
2、方法(不要叫函数,函数是独立于类的)必需声明在published部分,这样才具有有RTTI(即:方法名才编译到程序中)。
3、获得方法地址后,需要用TMethod转换调用。其中Code则是方法地址,Data则是类实例Self的指针。

参考如上代码。
DumDum 2008-06-09
  • 打赏
  • 举报
回复
二楼的方法好像有问题,我试了不行~~!编译通不过
大大怪老张 2008-06-06
  • 打赏
  • 举报
回复
如果是在自己的程序里,貌似不用这么麻烦的吧。

如果是独立的exe,恐怕2楼的方法也不灵吧。
DumDum 2008-06-06
  • 打赏
  • 举报
回复
谢谢,我试试看行不,要是行就给分结了`~~!
etomahawk 2008-06-06
  • 打赏
  • 举报
回复
没有publish出来的函数,是不好调用的。

如果这个方法是Publish出来的话,可以这样调用(未做一场处理):
TWinControl(FindControl(hWindow)).MethodAddress('FunName')(Paramaters...);

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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