如何获得客户程序窗口中某一部件(如Edit)的Handle?注:客户程序窗口中同一部件类有多个(如Edit在不同位置有多个)。 (200分)

newnob:<br>你看这样行不行:<br>第一次先运行那个程序,然后按Tab键,记下每个控件的Tab顺序,比如那个Edit的Tab顺序是3;<br>然后在你的程序里:<br>procedure TForm1.Button1Click(Sender: TObject);<br>var<br>&nbsp;list:tlist;<br>&nbsp;t:array[0..255] of char;<br>begin<br>&nbsp;list:=TList.Create;<br>&nbsp;GetTabOrderList(list);<br>&nbsp;sendmessage(tedit(list.Items[2]).Handle,wm_gettext,255,integer(@t));<br>&nbsp;caption:=t;<br>&nbsp;list.Free;<br>end;
 
savenight:<br>[^]这种方法我想到过的,但不是太好,如果用户(人),在执行时改变了Focus,那么容易出错,<br>还有你的GetTabOrderList(list);是对自已编的程序进行操作,不可对别人的程序的。还是要用API的。<br><br><br>我正在试mikegong的方法,好象可行,而且的确要好些。<br>我还没有碰到部件数组乱序的问题,但还是要试试。
 
不会吧,就算是改变了focus,Tab键的顺序也不会改变的。<br>你试过了?
 
[^]To savenight:<br>我还当真试了一下,当然是会变的,当你focus一个部件后,再Tab,<br>得到的是focus部件的后一个Tab部件,再Focus上次的部件,又得此后一个Tab部件。<br>这样是不行的。
 
老天,你怎么。。。<br>在一窗体上,放上7,8个Edit+1个Button,再把我上面的代码粘上,点击Button1数次,看看Form的Caption。
 
[^]To savenight:<br>我们在讲不同的问题,你是在控制自己的程序。<br>我是在控制别人的程序(可能是别人用C++编的程序)。
 
好像有一个 &nbsp;Tedit(FindComponent('edit' +1,2,3等,代表edit1 &nbsp;后面参数忘了,找到可<br>返回值,具体查一下帮助![谢谢]
 
哦,是我糊涂了,不好意思。[:D][:D]
 
[^]To microming<br>还是同样的答复,我是要控制别人编的程序。你的方法不行。
 
[^]没人讨论了?
 
[^]没人讨论了?
 
这个我做过的,我发源码给你。我信箱,Bill2003@elong.com。来信吧。
 
就这样吧
 
接受答案了.
 
顶部