嵌入式word文档中的标题栏无响应

时间:2016-08-23 07:17:48

标签: delphi ms-word ole

我想以我的程序的形式嵌入一个单词应用程序。我使用以下代码:

procedure TAMainForm.Button1Click(Sender: TObject);
var
  WordApp: Variant;
  WordHandle: THandle;
  TempTitle: string;
begin
  WordApp := CreateOleObject('Word.Application');
  TempTitle := 'Temp - ' + IntToStr(Random(1000000));
  WordApp.Caption := TempTitle;
  WordHandle := FindWindow(nil, PChar(TempTitle));
  WordApp.Visible := True;
  Windows.SetParent(WordHandle, Handle);
  SetWindowPos(WordHandle, 0, Left+20, Top+50, 700, 500, SWP_ASYNCWINDOWPOS);
end;

它可以在我的表单中填写单词并且它似乎正常工作。然而,单词应用程序的标题栏全黑,并且不响应鼠标点击。我的代码出了什么问题?

1 个答案:

答案 0 :(得分:2)

具有窗口的跨进程父子关系在技术上可能是合法的,但是它很难管理,并且需要两个进程都知道这种情况。 Raymond Chen在他的博客文章Is it legal to have a cross-process parent/child or owner/owned window relationship?中对此进行了详细解释。这种跨进程关系可能是您所面临问题的原因。

如果您尝试实现表单保留在Word之上,则可以基于Application.WindowActivate事件实施变通方法。只要激活Word窗口,您就可以将自己的表单置于顶部,例如使用SetWindowPos