求救:按任意键均报错,为什么啊?

freepine 2003-12-24 10:44:13
我有一个程序,实现一些消息传递功能,客户端使用
Indy TcpClient;用一个单独线程监听收到的消息。
收发消息时会动态生成或释放一些 TabSheet,
刚运行时程序正常,收发若干消息后
会出现按任意键均报错的现象,错误是Access violation,
在集成环境中运行出现异常转入调试模式也没有跳到出错代码。
可我并没有在ApplicationMessage中处理按键消息,
请教高手,问题可能出在什么地方?
我真是没办法了。天哪!!!
...全文
3 点赞 收藏 6
写回复
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
freepine 2004-03-18
我现在自己处理了这个消息,
直接调用
TranslationMessage(Msg);
DispatchMessage(Msg);
不会报错了,
可惜Tab,Enter键对获取焦点控件的切换、处理也相应失效了,
各位有什么好办法吗?
回复
hnhb 2004-03-17
帮你顶......
回复
freepine 2004-03-17
啊啊啊啊,帮帮我啊
还是没有解决这个问题,
我跟踪发现在TEdit获TMemo中按键执行到Forms单元中
TApplication.IsKeyMsg时出错,
我把该函数拷贝到ApplicationMessage中自己处理按键消息,
发现执行到
if SendMessage(Wnd, CN_BASE + Message, WParam, LParam) <> 0 then
Result := True;
时出错,不知道系统为什么没有找到该控件,
我看了,wnd指针地址与刚开始执行时的值是一样的,
那为什么开始能正确相应按键消息,后来就
Access violation了呢?
请高手指教。

而且在TMemo中点鼠标右键“粘贴”可以正常反应, 会将剪贴版内容添加到Memo中,也不出错
真不知道为什么按键消息处理就错了呢.
回复
freepine 2003-12-27
我不是说把edit的消息捕获给Pagecontrol,
只是屏蔽了Pagecontrol的WM_KEYDOWN消息
这样当TabSheet上没有Edit之类的控件时,按键
就不会报错,而当在Edit中按键时因为我没有处理
该消息,按说系统会缺省处理的,但是总是报错,
不知道是否和线程有关。
回复
sunny518 2003-12-26
出现这种错误的原因很多,根据我经验,一般是资源没有释放,或者是资源没有分配空间就直接访问!
分派消息是循环分配的啊,该是谁的消息就是谁的啊,你是怎么捕获消息的啊!
怎么edit的keydown你也捕获给pagecocontrol了啊,难道你处理的是formkeydown
回复
freepine 2003-12-26
5555,没人理我啊,再问一下。
我又试了一下,屏蔽PageControl的WM_KEYDOWN消息后不会出现错误提示
(设置PageControl的WindowProc处理发给PageControl的消息),但如果
PageControl中的某个TabSheet上有TEdit时,当该Edit获得输入焦点时
按键则仍然出现错误

这是为什么呢?请教高手Delphi是怎么在VCL控件中Dispatch消息的,
默认又是怎么处理的呢?可能是什么原因导致出现Access Violation的
呢?

Thanks for your help.
回复
发动态
发帖子
网络通信/分布式开发
创建于2007-08-02

1565

社区成员

Delphi 网络通信/分布式开发
申请成为版主
社区公告
暂无公告