我有一个程序,实现一些消息传递功能,客户端使用
Indy TcpClient;用一个单独线程监听收到的消息。
收发消息时会动态生成或释放一些 TabSheet,
刚运行时程序正常,收发若干消息后
会出现按任意键均报错的现象,错误是Access violation,
在集成环境中运行出现异常转入调试模式也没有跳到出错代码。
可我并没有在ApplicationMessage中处理按键消息,
请教高手,问题可能出在什么地方?
我真是没办法了。天哪!!!
Indy TcpClient;用一个单独线程监听收到的消息。
收发消息时会动态生成或释放一些 TabSheet,
刚运行时程序正常,收发若干消息后
会出现按任意键均报错的现象,错误是Access violation,
在集成环境中运行出现异常转入调试模式也没有跳到出错代码。
可我并没有在ApplicationMessage中处理按键消息,
请教高手,问题可能出在什么地方?
我真是没办法了。天哪!!!
我又试了一下,屏蔽PageControl的WM_KEYDOWN消息后不会出现错误提示
(设置PageControl的WindowProc处理发给PageControl的消息),但如果
PageControl中的某个TabSheet上有TEdit时,当该Edit获得输入焦点时
按键则仍然出现错误
这是为什么呢?请教高手Delphi是怎么在VCL控件中Dispatch消息的,
默认又是怎么处理的呢?可能是什么原因导致出现Access Violation的
呢?
Thanks for your help.
分派消息是循环分配的啊,该是谁的消息就是谁的啊,你是怎么捕获消息的啊!
怎么edit的keydown你也捕获给pagecocontrol了啊,难道你处理的是formkeydown
只是屏蔽了Pagecontrol的WM_KEYDOWN消息
这样当TabSheet上没有Edit之类的控件时,按键
就不会报错,而当在Edit中按键时因为我没有处理
该消息,按说系统会缺省处理的,但是总是报错,
不知道是否和线程有关。
还是没有解决这个问题,
我跟踪发现在TEdit获TMemo中按键执行到Forms单元中
TApplication.IsKeyMsg时出错,
我把该函数拷贝到ApplicationMessage中自己处理按键消息,
发现执行到
if SendMessage(Wnd, CN_BASE + Message, WParam, LParam) <> 0 then
Result := True;
时出错,不知道系统为什么没有找到该控件,
我看了,wnd指针地址与刚开始执行时的值是一样的,
那为什么开始能正确相应按键消息,后来就
Access violation了呢?
请高手指教。而且在TMemo中点鼠标右键“粘贴”可以正常反应, 会将剪贴版内容添加到Memo中,也不出错
真不知道为什么按键消息处理就错了呢.
直接调用
TranslationMessage(Msg);
DispatchMessage(Msg);
不会报错了,
可惜Tab,Enter键对获取焦点控件的切换、处理也相应失效了,
各位有什么好办法吗?