高难问题请教,500分!(100分)

C

cAkk

Unregistered / Unconfirmed
GUEST, unregistred user!
现有一个程序.里面有一个类似Tedit的编辑框,因为我对这个编辑框<br>对某些windows消息的处理不满意,我希望能改进一下,于是我:<br><br>1.打开delphi,建立一个空白的form<br>2.用spy++得到该编辑框的句柄;<br>3.用setparent(编辑框的句柄,我自己form的句柄)语句把该编辑框<br>&nbsp; 嵌入到我自己的form上来,以为这下可以解决问题了;<br><br>但是,没想到该编辑框的windows消息还是发送到了原先的程序所在<br>窗口,也就是说,我无法更改该编辑框的消息处理.我原来还以为windows<br>会把消息发送到它的praent里面的,现在看来不是.<br><br>请问又没有什么办法解决? &nbsp;我对这方面不熟,请大家帮忙! 谢谢!<br>先送上100分,一旦解决问题,剩下400分随即送上,决不食言!!!<br>
 
你从EDIT在继承一个不就可以了,把你不满意的消息重新处理一下
 
cAkk:<br>被人灌水的感觉如何?<br>哈哈哈哈哈哈哈哈哈<br>笑死我了,<br><br>别怪我,是唐先灌的<br>
 
更改编辑框的消息处理还不简单,重载它的WindowProc函数不就行了。<br>类似下面:<br>声明一个函数如下:<br>procedure Form1.NewProc(var Message: TMessage);<br>begin<br>&nbsp; if(Message.Msg==...) then<br>&nbsp; &nbsp; &nbsp;//你要处理的消息<br>&nbsp; else<br>&nbsp; &nbsp;OldProc(Message);<br>end;<br>...<br>//在OnCreate中<br>var OldWnd:TWndMethod;<br>...<br>OldWnd:=Edit1.WindowProc;<br>Edit1.WindowProc:=NewProc;<br>
 
重载不可能有效。<br>这个问题有趣,我想想。。。<br>
 
spy++真好玩,还不知道他这么厉害,嘿嘿。<br>cakk,我把一个EDIT放到了我的form里,正如你说他的事件处理程序还是跟以前一样。<br>可你打算每次运行都用spy吗?每次运行那个edit的句柄都不一样啊。
 
继承看来是用不到了,cAKK是想控制别人程序中的Edit。<br>这个问题有趣,我得听听。
 
这种方法是不能控制别的程序的edit的, 要把自己挂在那个程序上才行, eyes原来<br>是这么回答的:)<br>
 
&nbsp; 噢没看清题目,原来是用别的程序的Edit,不好意思。<br>&nbsp; &nbsp;我想这种东东也只能用钩子来解决吧,有没有想过用WH_CALLWNDPROC试试。<br>&nbsp; &nbsp;我试过,不知行不行。
 
liuge: 的确每次都不一样,但是我可以用findwindow找到他的句柄.<br><br>蚯蚓: 使劲灌吧! &nbsp;:)<br><br>to all: 1.edit是别人程序里面的;<br>&nbsp; &nbsp; &nbsp; &nbsp; 2.我估计也应该用钩子,但是没有头绪.给一个原理就可以.<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 比如:原先的edit编辑框不能copy,paste,估计是屏蔽了这个消息,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 如果我用钩子,怎样给edit恢复copy,paste功能?<br>&nbsp; &nbsp; <br>恳请钩子高手帮忙!!<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br>
 
praent应为parent,<br>慢慢钩吧
 
"praent"是笔误. :p<br><br>怎样操作,讲一下原理.<br>&nbsp;<br>
 
我觉得用钩子不一定能解决,因为钩子加在所有消息处理过程之前,只是在消息被处理前截获它,如果edit1的消息处理过程根本就不响应wm_copy等消息,你怎么改消息<br>都没用。除非改edit1的消息处理过程(我不会),要不你试一下向edit1发<br>wm_paste消息.
 
或者你可以发一个wm_settext设定edit中的文本
 
如果wm_settext能行,你可以截获wm_paste,在钩子过程中把wm_paste改成<br>wm_settext<br>
 
to cAkk:<br><br>你把别的程序的EDIT放在自己的程序里,有什么特别的用意吗?<br>还是作为一个纯技术问题?<br><br>即:为什么一定要Setparent,而不通过别的方式?
 
大家的方法似乎都不灵.<br><br>o*o: 没有说一定要setparent,只是我原先以为setparent之后就可以接管他的消息<br>&nbsp; &nbsp; &nbsp;处理,现在看来不行.<br><br>其实是这样的,有一个外部程序,里面有一个类似Tedit的编辑框,这个编辑框不让我<br>拷贝里面的文本,只让我看看就行了,可是我想把文本拷贝出来慢慢看,所以我想自己<br>处理它的edit的消息,因为我估计他屏蔽了某些消息.<br>(文本是动态从文件调入的,别告诉我自己直接去读那个文件,因为读不懂)<br><br>我已经试过WM_GETTEXT等方法,不行,不响应,而且现在看来setparent也不行.<br>所以请大家不要再尝试给他发什么消息来得到文本,他肯定把凡是有关能得到<br>文本内容的消息都屏蔽了.<br><br>所以请大家再换个思路,如果hook可行当然好,不过我是一点头绪也没有.<br>我昨天晚上差点准备装一个清华的THOCR,然后拷屏,然后文字识别了!!!<br>
 
cAkk,你能确认它是EDIT吗?有Caret吗?可选吗?<br>把它的Window Style和Class Style写出来。
 
我确认.<br><br>实际上,那个程序是一个编辑器,具有正常的编辑器的全部功能,但是因为....因为..<br>因为......不好意思,因为我没有注册,所以保存,拷贝,拖动等功能被屏蔽掉了...:p<br><br>不过我并不想使用他的编辑器,我只想要里面的文本,这个文本是他读取一种特定格式<br>的文件之后变成文本文件放在edit里面进行编辑的,而我想要的就是那个转化后的文本<br>文件.<br>(另: 我不想自己照者屏幕把里面的文本打下来,因为内容挺多,而且这个东西可能<br>经常用到)<br>(再另:也别劝我注册,我没那么多钱)<br><br>如果这个问题能够解决,我们就可以解决很多类似的问题,实在大有好处,所以不惜<br>化费500大元求助.<br><br>晚上回家把他的style贴出来.<br><br>
 
顶部