当前位置:主页>仓库管理软件> 列表

OnTerminate可不可以在非vcl的unit中使用呢 找进销存管理系统

仓库管理软件版1楼: 能的话怎么作,
不能的话那要怎么在非vcl的unit中,在线程结束时触发一个procedure

2楼: 当然可以,只要你把要在线程终止执行的代码写在一个过程中,然后把这个过程的指针给OnTerminate就可以了,如下:
procedure WhenThreadFinished(Sender: TObject);
begin
{Insert the Code that run when the Thread Object Execute Over}
end;

AThread.OnTerminate := WhenThreadFinished; 如进销存管理系统

3楼: 注意,参数要一致,否则要出错的

4楼: 不行呀.提示错误的.写在一个有窗体的unit中不会报错的.可是写在非窗体的unit中报错呀

5楼: 帮顶!

╭=========================================╮

80G海量源代码,控件,书籍全免费狂下不停!

http://www.source520.com

╰=========================================╯

6楼: 这个一个事件,事件函数是8字节的,和一般4字节的函数不一样,所以一定要把对象里面的函数赋值给它,就是procedure (XXXXX) of object;
具体参见李维的《VCL架构剖析》,其中有关于procedure of object的说明,还讲了VCL内部怎么把一个普通函数转化为一个procedure of object的,相当有趣。

仓库管理软件版7楼: 使用这个:
function ProcedureToMethod(self: TObject; procAddr: pointer) : TMethod;
begin
result.Data := self;
result.Code := procAddr;
end;
使用:xxx.Onyyy := TyyyEvent(ProcedureToMethod(xxx, zzz))