定义一个函数变量类型, 比如 TRecallFunc = function (...) : returnvaluetype;然后定义一个这种类型的变量(实际上是个指针变量) 比如 var MyFunc : TRecallFunc;给这个变量赋值, 比如 Myfunc := Function1; (实际就是把function1的首地址赋给Myfunc)这个变量作为参数传给调用者. 比如: CallFunction(myfunc);
解决方案 »
- 程序打包问题
- 如何在Fastreport 中按条件汇总?
- 200分求可下载的SQL server2000企业英文版本地址
- BDE里面database有一项不能设置是什么原因)
- ********有高手用过Acro Multi Language多语言控件吗!高手请进!在线等待。。。*******
- !!!delphi6的自带报表工具使用(负数转换正数)!!!
- 怎么取得当前DataSetAdapter中某个特定字段的值?谢谢!
- (200分)高价收购李维的《Delphi5.x分布式多层应用系统篇》的电子版
- idFTP如何上传整个目录?
- 请问直接弹出输入字符串的对话框的函数是甚麽?
- 寻找类似于Netmeeting的电子白板功能的软件
- 計算字段求值問題﹗﹗
它的声明是这样的:
BOOL EnumWindows(
WNDENUMPROC lpEnumFunc, // callback function
LPARAM lParam // application-defined value
);
其中lpEnumFunc就是一个回调函数,看它的声明:
BOOL CALLBACK EnumWindowsProc(
HWND hwnd, // handle to parent window
LPARAM lParam // application-defined value
);若我们用呢,就简单多了。
function WndEnumProc(H : Hwnd; LParam : TListView): boolean; StdCall;//lParam的类型可以自己定;
实现如下:
function WndEnumProc(H: Hwnd; LParam : TListview): boolean;
var
Buff : PChar;
begin
Result := true;
GetMem(Buff,255);
GetWindowText(H, Buff, 255);
New(X);
X^.Caption := StrPas(Buff);
X^.HND := H;
with LParam.Items.Add do begin
Caption := X^.Caption;
Data := X;
end;
................................
FreeMem(Buff);
end;调用时就这样好了
EnumWindows(@WndEnumProc,LongInt(ListView1));
第二个问题解决了。
那么第一个问题到底是怎么样呢?比如说。
假设在某个情况下,我必须在WndEnumProc中引用到类中的某个定义。
此时定义为全局无疑是无法获得的。
但是把函数定义加到类的定义中则无法在EnumWindows中调用。这应该如何解决? 还请多多指教。
比如是按钮的onclick事件,就声明一个TNotifyEvent类型的变量。
类方法都会默认传一个Self指针,而回调函数并不知道如何如何处理这个
Self指针,所以必须用全局方式声明回调方法。