关于多媒体定时器的使用:timeSetEvent() 参数如何配 TimeProc()如何声明

IT-司马青衫
壹号网络官方账号
2002-11-06 01:30:36
我在Delphi6中使用它们
use mmsystem;

procedure TSocketFrm.MMxRateCntTimer(uTimeID,uMessage:UINT; dwUser, dw1, dw2:DWORD)stdcall;

form2
var
timerid:integer;

Form2 buttion click()
timerid:=timeSetEvnet(1000,10,SocketFrm.MMxRateCntTimer,0,TIME_PERIODIC);

ERROR:
Incompatible types:'regular procedure and method pointer'



...全文
187 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
IT-司马青衫 2002-11-11
  • 打赏
  • 举报
回复
TSocketFrm frm = ( dwUser as TSocketFrm );// 没试,不知这样转行不
frm.//这样就可以访问TSocketFrm的成员了

好像不行啊
shinesi 2002-11-08
  • 打赏
  • 举报
回复


use mmsystem;

procedure MMxRateCntTimer(uTimeID,uMessage:UINT; dwUser, dw1, dw2:DWORD)stdcall;
begin
TSocketFrm frm = ( dwUser as TSocketFrm );// 没试,不知这样转行不
frm.//这样就可以访问TSocketFrm的成员了

end;

form2
var
timerid:integer;

Form2 buttion click()
timerid:=timeSetEvnet(1000,10,MMxRateCntTimer,(DWORD)self,TIME_PERIODIC); //(DWORD)self 这里把TSocketFrm作为参数传进去

hansome 2002-11-08
  • 打赏
  • 举报
回复
我的意思是你不要把回传函数
当成TSocketFrm的成员函数就行
比如,

type
TSocketFrm = class(TForm)
private
...
public
...
end;

procedure MMxRateCntTimer(uTimeID,uMessage:UINT; dwUser, dw1, dw2:DWORD)stdcall;

var
SocketFrm: TSocketFrm;

implementation

procedure MMxRateCntTimer(uTimeID,uMessage:UINT; dwUser, dw1, dw2:DWORD)stdcall; //注意,这个stdcall也是必不可少的
begin
...
end;

IT-司马青衫 2002-11-08
  • 打赏
  • 举报
回复
我的函数必须在SocketFrm单元中
其它单元使用它
hansome 2002-11-08
  • 打赏
  • 举报
回复
此错误是因为SocketFrm.MMXRateCntTimer不匹配
你必须把回传函数定义在SocketFrm之外
为一般函数
而不是SocketFrm的成员函数

use mmsystem;

procedure MMxRateCntTimer(uTimeID,uMessage:UINT; dwUser, dw1, dw2:DWORD)stdcall;

form2
var
timerid:integer;

Form2 buttion click()
timerid:=timeSetEvnet(1000,10,MMxRateCntTimer,0,TIME_PERIODIC);


1,184

社区成员

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

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