我想以我的程序的形式嵌入一个单词应用程序。我使用以下代码:
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;
它可以在我的表单中填写单词并且它似乎正常工作。然而,单词应用程序的标题栏全黑,并且不响应鼠标点击。我的代码出了什么问题?
答案 0 :(得分:2)
具有窗口的跨进程父子关系在技术上可能是合法的,但是它很难管理,并且需要两个进程都知道这种情况。 Raymond Chen在他的博客文章Is it legal to have a cross-process parent/child or owner/owned window relationship?中对此进行了详细解释。这种跨进程关系可能是您所面临问题的原因。
如果您尝试实现表单保留在Word之上,则可以基于Application.WindowActivate
事件实施变通方法。只要激活Word窗口,您就可以将自己的表单置于顶部,例如使用SetWindowPos
。