获得选中的文本 ( 积分: 100 )

  • 主题发起人 主题发起人 huhuc
  • 开始时间 开始时间
H

huhuc

Unregistered / Unconfirmed
GUEST, unregistred user!
假设一个窗体,有2个edit控件,分别有些文本,现在选中edit1的一些文本,在选中edit2的一些文本,现在把鼠标移出窗体之外。怎样才能得到选中的文本,通过另一个程序。<br>也就得到最近一次得到焦点的子窗体的选中的文本?
 
可以声明一个数组&nbsp;setlength=2,当选中字的时候,把选中的文本付给数组.然后可以访问数组
 
t思路:捕获鼠标时间,当移出窗体时将选中的文本copy到剪贴板,这样在令一个程序中查看剪贴板就是最近一次得到焦点的子窗体的选中文本
 
不是很懂~,但是还是顶一下~~
 
用共享内存可以实现&nbsp;但就是麻烦<br>应该有更简单的方法
 
//随手写了几行代码,你看能用上不<br>1取最近一次鼠标选中edit中的内容<br>var<br>&nbsp;&nbsp;&nbsp;&nbsp;sText&nbsp;:&nbsp;string;<br>&nbsp;&nbsp;&nbsp;&nbsp;bSelect&nbsp;:&nbsp;Boolean;<br><br>procedure&nbsp;TForm1.Edit1MouseDown(Sender:&nbsp;TObject;&nbsp;Button:&nbsp;TMouseButton;<br>&nbsp;&nbsp;Shift:&nbsp;TShiftState;&nbsp;X,&nbsp;Y:&nbsp;Integer);<br>begin<br>&nbsp;&nbsp;bSelect&nbsp;:=&nbsp;True;<br>end;<br><br>procedure&nbsp;TForm1.Edit1MouseUp(Sender:&nbsp;TObject;&nbsp;Button:&nbsp;TMouseButton;<br>&nbsp;&nbsp;Shift:&nbsp;TShiftState;&nbsp;X,&nbsp;Y:&nbsp;Integer);<br>begin<br>&nbsp;&nbsp;if&nbsp;bSelect&nbsp;then<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;//ShowMessage(Edit1.SelText);<br>&nbsp;&nbsp;&nbsp;&nbsp;sText&nbsp;:=&nbsp;Edit1.SelText;<br>&nbsp;&nbsp;&nbsp;&nbsp;bSelect&nbsp;:=&nbsp;False;<br>&nbsp;&nbsp;end;<br>end;<br><br>2取另一个窗体form1中的edit1中的内容<br>procedure&nbsp;TForm1.btn1Click(Sender:&nbsp;TObject);<br>var<br>&nbsp;&nbsp;h,&nbsp;h2&nbsp;:&nbsp;HWND;<br>&nbsp;&nbsp;s1&nbsp;:&nbsp;string;<br>&nbsp;&nbsp;m&nbsp;:&nbsp;PChar;<br>begin<br>&nbsp;&nbsp;GetMem(m,&nbsp;255);<br>&nbsp;&nbsp;h&nbsp;:=&nbsp;FindWindow('TForm1',&nbsp;'Form1');<br>&nbsp;&nbsp;if&nbsp;h&nbsp;&lt;&gt;&nbsp;0&nbsp;then<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;h2&nbsp;:=&nbsp;FindWindowEx(h,&nbsp;0,&nbsp;'TEdit',&nbsp;'Edit1');<br>&nbsp;&nbsp;&nbsp;&nbsp;GetWindowText(h2,&nbsp;m,&nbsp;255);<br>&nbsp;&nbsp;&nbsp;&nbsp;s1&nbsp;:=&nbsp;m;<br>&nbsp;&nbsp;&nbsp;&nbsp;ShowMessage(s1);<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;FreeMem(m);<br>end;
 
查找窗体,列举子窗体会吗?根据句柄取选中文本:<br>function&nbsp;GetSelText(hWnd:THandle):string<br>var<br>&nbsp;&nbsp;WindowText:PAnsiChar;<br>begin<br>&nbsp;&nbsp;GetMem(WindowText,256);<br>&nbsp;&nbsp;SendMessage(hWnd,EM_GETSELTEXT,0,LongInt(WindowText));<br>&nbsp;&nbsp;Result:=StrPas(WindowText);<br>end;
 
foxphone2003&nbsp;的肯定不对&nbsp;Edit1MouseDown并不代表是选文本的操作。<br>'Edit1'&nbsp;不一定是最后一个失去焦点的
 
难吧<br>枚举窗体控件得到不是选中的文本吧
 
楼上也太眼拙了吧?没看到下面根据句柄取选种文本的函数?
 
也许是我没说清楚把,被查找的程序不是我控制的,我现在通过另一个程序来取它们,最重要的是怎么判断它是<br>“最近一次得到焦点的子窗体”
 
//再随手写几行,你拣有用的看。<br>拖个ttimer控件到界面上,事件如下:<br>procedure&nbsp;TForm1.tmr1Timer(Sender:&nbsp;TObject);<br>var<br>&nbsp;&nbsp;m&nbsp;:&nbsp;PChar;<br>&nbsp;&nbsp;pos&nbsp;:&nbsp;TPoint;<br>&nbsp;&nbsp;GetEditHwnd&nbsp;:&nbsp;HWND;<br>begin<br>&nbsp;&nbsp;GetMem(m,&nbsp;255);<br>&nbsp;&nbsp;GetCursorPos(pos);<br>&nbsp;&nbsp;GetEditHwnd&nbsp;:=&nbsp;WindowFromPoint(pos);<br>&nbsp;&nbsp;if&nbsp;GetEditHwnd&nbsp;&gt;0&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetWindowText(GetEditHwnd,&nbsp;m,&nbsp;100);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Edit1.Text&nbsp;:=&nbsp;StrPas(m);<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;FreeMem(m);<br>end;
 
后退
顶部