G
GipsyCN
Unregistered / Unconfirmed
GUEST, unregistred user!
子窗口中:<br>SendMessage(hMainFormHandle, WM_MERGE_MENU, 0, LongInt(@aMainMenu));<br><br>主窗口处理WM_MERGE_MENU消息时:<br>procedure TfmDTMMain.MergeSubMenu(var aMsg: TMessage);<br>begin<br> MainMenu1.Merge(TMainMenu(aMsg.LParam));<br>end;<br>为什么会出错???<br> <br><br><br>回复贴子: <br>回复人: chechy(chechy) (2001-10-8 16:00:00) 得0分 <br>改一下:<br>SendMessage(hMainFormHandle, WM_MERGE_MENU, 0, LongInt(aMainMenu));<br><br>注意Delphi的类本身就是一个指针,所以不必使用@符号。<br> <br>回复人: GipsyCN(德尔菲) (2001-10-8 16:01:29) 得0分 <br>首先感谢这位朋友。我曾试过,结果一样。 <br>回复人: hellion(恶人) (2001-10-8 16:03:36) 得0分 <br>主窗口处理WM_MERGE_MENU消息时aMainMenu还存在么? <br>回复人: GipsyCN(德尔菲) (2001-10-8 16:06:38) 得0分 <br>应该是不存在,是强制转换不成功,我想,否则不会出错了。 <br>回复人: hellion(恶人) (2001-10-8 16:08:39) 得0分 <br>不存在的话当然出错了。<br>1、改成全局变量<br>2、处理消息前不要free <br>回复人: saimaya() (2001-10-8 16:12:53) 得0分 <br>gz <br>回复人: GipsyCN(德尔菲) (2001-10-8 16:16:12) 得0分 <br>我的程序框架模仿资源管理器,<br>所有的子窗口显示时都显示在主窗口右半部分的NoteBook的不同页面上,<br>而子窗口和主窗口的通信,都是使用SendMessage。<br>我怀疑可能这种强制转换对TMainMenu不适合(也没道理啊)。 <br>回复人: GipsyCN(德尔菲) (2001-10-8 16:40:06) 得0分 <br>我也尝试过使用先定义: PTMainMenu = ^TMainMenu;<br> MainMenu1.Merge(PTMainMenu(aMsg.LParam)^)<br>同样不行。<br> <br>回复人: klcn() (2001-10-8 17:41:21) 得0分 <br>使用@aMainMenu是取得对象引用本身的的地址,这样是不对的。<br>改了以后仍然有问题,可能是你的处理函数有问题。 <br>回复人: GipsyCN(德尔菲) (2001-10-8 17:44:16) 得0分 <br>下面的代码没问题:<br>procedure SendStrToMainForm(asMsg: string);<br>begin<br> SendMessage(gAppInfo.hMainFormHandle, WM_GET_STR, 0, LongInt(PChar(asMsg)));<br>end;<br><br>procedure TfmDTMMain.DispGetStr(var aMsg: TMessage);<br>begin<br> stbMain.Panels[2].Text := string(aMsg.LParam);<br>end;<br><br> <br>回复人: klcn() (2001-10-8 18:29:49) 得0分 <br>现在你的消息传递和类型转换都是没有问题的,<br>也就是说在你的消息处理函数中已经成功的得到<br>了aMainMenu,你可以调试一下看看,在消息处理函数<br>中经过类型转换后的值是否仍然指向一块有效的内存。<br>如果这些都没有问题,只能说明你在消息处理函数中对<br>这个值的使用有问题。 <br>