如何通过发送消息让word复制已选择的内容至剪切板?(要实例)(200分)

  • 主题发起人 主题发起人 raindu
  • 开始时间 开始时间
R

raindu

Unregistered / Unconfirmed
GUEST, unregistred user!
以下答案就不用回答了:<br>1、查以前的贴子(已查过,没有能实现的)<br>2、keybd_event发送Control+c(也试过,无效)<br>3、SendMessage Control+C至word(未能成功)<br>4、PostMessage ^^^^^^^^^^^^^^^^^^^^^^^^^^;<br>请各位高手附一实现实例,要求如下:<br>在一Delphi窗体上放一edit和一button,按下button后如果word中有已选好的内容<br>则在edit中显示之。<br><br>如果分数不够还可再加。<br><br>
 
automation word.<br><br>
 
同意楼上,用自动化。
 
我现在的应用只能通过[red]发送消息[/red]来完成,不能采用自动化。
 
Take a look the Drag Drop component suite, there are lots of code about clipboard<br>http://delphi.mychangshu.com/dispdoc.asp?id=576
 
这有什么难的,留下MAIL地址,给你一个完整的例程。
 
J_shen2000:<br>也发给我看看呢。lin@esquel.com<br>最好里面不要有太多的中文,容易乱码。<br>谢了先。<br>
 
tks. Please send to this mail box:<br><br>dzm_china@yahoo.com<br>
 
是用Clipboard不行吗?
 
我的问题是如何通过API[red]发送消息[/red]将选定内容复制到剪切板.
 
j_shen2000<br>一直未收到你的答案,何时可给我发送一下?<br>以早日结束我的问题,多谢。<br><br>
 
不会吧,nickylin都收到了,再给你发一遍。
 
j_shen2000,你好。<br>例子收到了,不过很遗憾,我现在的应用只能通过[red]发送消息[/red]来完成,<br>不能采用自动化。<br>难道此题真的是无解吗?<br>
 
我给你发了个例子,看行不行。<br>加多少分我要多少分。^_^
 
那更简单,说吧加多少分,我直接贴出来。
 
算了,不跟你闹了,代码如下:<br>function EnumWindowsProc(AHWnd: HWnd;LPARAM: lParam): boolean; stdcall;<br>var<br>&nbsp; &nbsp;WndCaption: array[0..254] of char;<br>begin<br>&nbsp; &nbsp; if (GetWindowText(AHWnd, @WndCaption, 254)&lt;&gt;0) and (pos('Microsoft Word',wndcaption)&lt;&gt;0) then<br>&nbsp; &nbsp; &nbsp; postmessage(Ahwnd,wm_copy,0,0);<br>&nbsp; &nbsp; Result:=TRUE;<br>end;<br><br>procedure Tform1.button1Click(Sender: TObject);<br>begin<br>&nbsp; EnumWindows(@EnumWindowsProc, 0);<br>&nbsp; memo1.PasteFromClipboard;<br>end;
 
j_shen &amp; bubble:<br>&nbsp; 你们的例子已收到,多谢。<br>&nbsp; 现在我还有如下问题:<br>Point Point;<br>HANDLE hEdit,hWord;<br><br>GetcursorPos(&amp;Point);<br>hEdit=WindowFromPoint(Point);<br>hWord=FindWindow("OpusApp",NULL);<br><br>为何hEdit&lt;&gt;hWord?<br>&nbsp; &nbsp; 不管能否解答请给我回复一下,我准备给各位加分了。
 
你在什么事件里激发程序的,能确保此时光标在WORD上吗?OpusAPP可是WORD的CLASSNAME。
 
光标本身可是一个共享资源,不信,你用下面的例程可以很清楚的看到,其实你在点击button1<br>的时候,光标控制实际是在button1上。<br>procedure TForm1.Button1Click(Sender: TObject);<br>var point:tpoint;<br>&nbsp; &nbsp; hedit,hwindow:thandle;<br>&nbsp; &nbsp; cap:array [0..255] of char;<br>begin<br>&nbsp; getcursorpos(point);<br>&nbsp; hedit:=windowfrompoint(point);<br>&nbsp; if getwindowtext(hedit,@cap,254)&lt;&gt;0 then showmessage(cap)<br>&nbsp; else showmessage('notext');<br>&nbsp; showmessage(inttostr(hedit));<br>&nbsp; hwindow:=findwindow('OpusApp',nil);<br>&nbsp; showmessage(inttostr(hwindow));<br>end;<br>其实你用光标,不如用插入标记。例如下面的例程,注意一点,必须保证插入标记在WORD上<br>,所以在点击BUTTON1时,必须先将插入标记放到WORD上,否则十有八九返回的是DELPHI的编辑<br>器句柄。<br>procedure TForm1.Button1Click(Sender: TObject);<br>var point:tpoint;<br>&nbsp; &nbsp; hedit,hwindow:thandle;<br>&nbsp; &nbsp; cap:array [0..255] of char;<br>begin<br>&nbsp; getcaretpos(point);//**********<br>&nbsp; hedit:=windowfrompoint(point);<br>&nbsp; if getwindowtext(hedit,@cap,254)&lt;&gt;0 then showmessage(cap)<br>&nbsp; else showmessage('notext');<br>&nbsp; showmessage(inttostr(hedit));<br>&nbsp; hwindow:=findwindow('OpusApp',nil);<br>&nbsp; showmessage(inttostr(hwindow));<br>end;
 
多谢各位的帮助,问题都已解决。其实是我自己太粗心了。<br>其实问题的实质在于取得word窗体的句柄,而不是当前窗<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;^^^^^^^^^^^<br>口的句柄。我将消息发送给的编辑窗口,所以word未作出反<br>应。<br>j_sheng2000你的例程中下句<br>postmessage(Ahwnd,wm_copy,0,0);似应改为sendmessage为<br>好,不然通常第一次取不到选定内容,而要到第二次才能成<br>功。(在poffice97下)<br><br>再次谢谢所有参与此问题讨论的人。
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
716
import
I
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部