没有一个人会,我很失望,我对csdn人才失落而失望

解决方案 »

  1.   

    可以啊,你下载office view ocx就可以了,网上好多的
      

  2.   

    我一般没用控件操作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;
      //激活前一个窗口,现在焦点在 北京.doc
    end;
      

  3.   

    wordapp.Documents.item(i).activate;//i从1开始
    这是激活任意文档(前提是用wordapp打开的,所以我这方法对有点小问题)
    我发现你的情况,切出程序打开word(我猜跟你打开word是没有关系的),再切回程序,程序里word失去焦点。 你可以在窗口onshow(是这个吗) 让word控件.setfocus. 也可以自已模拟一个左键点击那个区域。
      

  4.   

    onshow里试过了,不行的,可以让Toffice控件得到焦点,即.setfocus方法,但是还是不会激活里面的文档的,因为Toffice控件得到焦点后,并不会激活里面的文档,即光标不会在里面闪烁!你说的模拟一个左键点击那个区域,怎样模拟呢??请赐教之!!!
      

  5.   

    你这个控件我是没用过,但应该会有激活文档的函数,setfocus是把焦点给当前控件,你多试下。
    至于我说的左键点击 思路是这样的,先鼠标移动到你的 word区域某个点,再postmessage(WM_LBUTTONDOWN) (上班在就不写代码了) 这样就跟你主动去点一下 word文档是一样的。这个方法不是很好,你最研究你那个控件的用法。
      

  6.   

    [email protected] 我晚上看看吧
      

  7.   

    如今你是我唯一的救命稻草,因为整个CSDN都没有高手能解决我这个旷世难题!!!!
      

  8.   

    我看了一下,这个失去焦点是这个控件本身封装的问题,c++版的就不会出现。方案1,
    我看过你的另一个提问,你有答案了
    注意:我要得到的是创建的word文档的wordApplication ,wordDocumnet,把方法告诉我一下,这两个对象随便获取哪一个 都是可以对word进行完全操作的,获得焦点当然不在话下,wordApplication 的方法见8楼,wordDocumnet也是可行的,就自已翻阅一下方案2,据我观察,当鼠标离开word区域失去焦点后(不仅是像你所说的切出程序,你点当前程序上其它按钮),只要你单击word区域工具栏以上部分,便能重获焦点,光标闪烁。代码稍后奉上
      

  9.   

    上面说错一点  应该是单击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...就得根据具体你的情况来,这样模拟毕竟不是好方法
      

  10.   

    针对你提出的方案一:是不可行的因为以前我试过的。wordapp.activewindow.Previous.activate; 针对TOffice控件加载时来的Word文档,只能是击活而不能够让焦点在word文档里面闪烁,你可以试一下,方案一是不行的,至于方案二:这样模拟我还没有试,感觉这是最后才能采用的方法,望我们再开拓创新找出其它的好方法。
      

  11.   

    试过通过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);