怎样得到Word文档的焦点? 没有一个人会,我很失望,我对csdn人才失落而失望 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以啊,你下载office view ocx就可以了,网上好多的 我一般没用控件操作word直接用old对象 但是大体上肯定是差不多的,附上代码 参考吧procedure TForm1.Button1Click(Sender: TObject);var wordapp:OleVariant;begin wordapp:=CreateOleObject('word.application'); wordapp.visible:=true; wordapp.Documents.open('C:\Users\lenovo\Desktop\北京.doc'); //现在焦点 在文档1 //接着用程序再开文档2,当然与你程序外,手动打开文档,效果是一样的 //焦点进入文档2 wordapp.Documents.open('C:\Users\lenovo\Desktop\两日游.docx'); wordapp.activewindow.Previous.activate; //激活前一个窗口,现在焦点在 北京.docend; wordapp.Documents.item(i).activate;//i从1开始这是激活任意文档(前提是用wordapp打开的,所以我这方法对有点小问题)我发现你的情况,切出程序打开word(我猜跟你打开word是没有关系的),再切回程序,程序里word失去焦点。 你可以在窗口onshow(是这个吗) 让word控件.setfocus. 也可以自已模拟一个左键点击那个区域。 onshow里试过了,不行的,可以让Toffice控件得到焦点,即.setfocus方法,但是还是不会激活里面的文档的,因为Toffice控件得到焦点后,并不会激活里面的文档,即光标不会在里面闪烁!你说的模拟一个左键点击那个区域,怎样模拟呢??请赐教之!!! 你这个控件我是没用过,但应该会有激活文档的函数,setfocus是把焦点给当前控件,你多试下。至于我说的左键点击 思路是这样的,先鼠标移动到你的 word区域某个点,再postmessage(WM_LBUTTONDOWN) (上班在就不写代码了) 这样就跟你主动去点一下 word文档是一样的。这个方法不是很好,你最研究你那个控件的用法。 [email protected] 我晚上看看吧 如今你是我唯一的救命稻草,因为整个CSDN都没有高手能解决我这个旷世难题!!!! 我看了一下,这个失去焦点是这个控件本身封装的问题,c++版的就不会出现。方案1,我看过你的另一个提问,你有答案了注意:我要得到的是创建的word文档的wordApplication ,wordDocumnet,把方法告诉我一下,这两个对象随便获取哪一个 都是可以对word进行完全操作的,获得焦点当然不在话下,wordApplication 的方法见8楼,wordDocumnet也是可行的,就自已翻阅一下方案2,据我观察,当鼠标离开word区域失去焦点后(不仅是像你所说的切出程序,你点当前程序上其它按钮),只要你单击word区域工具栏以上部分,便能重获焦点,光标闪烁。代码稍后奉上 上面说错一点 应该是单击word区域以下部分 以下举例单击office正中间var pt:TPoint;begin pt:=ClientToScreen(point(Office1.Left+round(Office1.Width/2),Office1.Top+round(Office1.Height/2))); SetCursorPos(pt.X,pt.Y); mouse_event(MOUSEEVENTF_LEFTDOWN,pt.X,pt.Y,0,0); mouse_event(MOUSEEVENTF_LEFTUP,pt.X,pt.Y,0,0);end;当然你可以在单击完后,把鼠标回到开始点,这样更逼真点。至于把这一段写到 窗体的onShow,onPait ,onActivate...就得根据具体你的情况来,这样模拟毕竟不是好方法 针对你提出的方案一:是不可行的因为以前我试过的。wordapp.activewindow.Previous.activate; 针对TOffice控件加载时来的Word文档,只能是击活而不能够让焦点在word文档里面闪烁,你可以试一下,方案一是不行的,至于方案二:这样模拟我还没有试,感觉这是最后才能采用的方法,望我们再开拓创新找出其它的好方法。 试过通过Handle设置focus?如果获取OleContainer中的窗口句柄:http://support.microsoft.com/kb/258511在窗口onActivate事件里处理以下示例代码App := CreateOLEObject('Word.Application');//获取句柄 TempTitle := 'Temp - ' + IntToStr(Random(1000000));App.Caption := TempTitle;Handle := FindWindow('OpusApp', PWideChar(TempTitle));App.Caption := EmptyStr;//设置焦点windows.SetFocus(Handle); Delphi中怎样把一个文件复制到另外一个地方 TreeView的一个小问题 关于随机抽数问题(100) 请教高手有关SOCKET的问题 delphi中begin...End...如何设置成自动配对? 怎样在后台打开网页的源文件并进行代码分析? 谁有 “网络收音机” 方面资料,我想学着做个“网络收音机”。 大家用delphi编软件的时候,一般用到哪些工具 怎么样才能把DELPHI中EDIT输入文字后让它一直保存(配合query使用) Delphi+sql server 在使用触发器应该注意什么 简单的delphi exe的目录更改问题 delphi
var
wordapp:OleVariant;
begin
wordapp:=CreateOleObject('word.application');
wordapp.visible:=true;
wordapp.Documents.open('C:\Users\lenovo\Desktop\北京.doc');
//现在焦点 在文档1 //接着用程序再开文档2,当然与你程序外,手动打开文档,效果是一样的
//焦点进入文档2
wordapp.Documents.open('C:\Users\lenovo\Desktop\两日游.docx'); wordapp.activewindow.Previous.activate;
//激活前一个窗口,现在焦点在 北京.doc
end;
这是激活任意文档(前提是用wordapp打开的,所以我这方法对有点小问题)
我发现你的情况,切出程序打开word(我猜跟你打开word是没有关系的),再切回程序,程序里word失去焦点。 你可以在窗口onshow(是这个吗) 让word控件.setfocus. 也可以自已模拟一个左键点击那个区域。
至于我说的左键点击 思路是这样的,先鼠标移动到你的 word区域某个点,再postmessage(WM_LBUTTONDOWN) (上班在就不写代码了) 这样就跟你主动去点一下 word文档是一样的。这个方法不是很好,你最研究你那个控件的用法。
我看过你的另一个提问,你有答案了
注意:我要得到的是创建的word文档的wordApplication ,wordDocumnet,把方法告诉我一下,这两个对象随便获取哪一个 都是可以对word进行完全操作的,获得焦点当然不在话下,wordApplication 的方法见8楼,wordDocumnet也是可行的,就自已翻阅一下方案2,据我观察,当鼠标离开word区域失去焦点后(不仅是像你所说的切出程序,你点当前程序上其它按钮),只要你单击word区域工具栏以上部分,便能重获焦点,光标闪烁。代码稍后奉上
pt:TPoint;
begin
pt:=ClientToScreen(point(Office1.Left+round(Office1.Width/2),Office1.Top+round(Office1.Height/2)));
SetCursorPos(pt.X,pt.Y);
mouse_event(MOUSEEVENTF_LEFTDOWN,pt.X,pt.Y,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,pt.X,pt.Y,0,0);
end;当然你可以在单击完后,把鼠标回到开始点,这样更逼真点。
至于把这一段写到 窗体的onShow,onPait ,onActivate...就得根据具体你的情况来,这样模拟毕竟不是好方法
如果获取OleContainer中的窗口句柄:http://support.microsoft.com/kb/258511在窗口onActivate事件里处理
以下示例代码App := CreateOLEObject('Word.Application');//获取句柄
TempTitle := 'Temp - ' + IntToStr(Random(1000000));
App.Caption := TempTitle;
Handle := FindWindow('OpusApp', PWideChar(TempTitle));
App.Caption := EmptyStr;
//设置焦点
windows.SetFocus(Handle);