2016-08-23 5 views
1

Я хочу внедрить приложение Word в форму моей программы. Я использую следующий код:Строка заголовка во встроенном документе Word не реагирует

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

Никакой шанс на это не работать с SetParent. Или, действительно, любым другим способом. Воспроизведение кросс-процессов - это не то, что вы можете использовать для других приложений. Бросьте его и найдите другой дизайн. https://blogs.msdn.microsoft.com/oldnewthing/20130412-00/?p=4683 –

+0

Word поддерживает встраивание * редактора * в качестве COM-объекта. (Или, во всяком случае, он использовался.) Он не поддерживает встраивание * всего приложения *. Изучите первое, если вы хотите, чтобы пользователи редактировали документы Word, не покидая вашу программу. –

ответ

2

Наличие взаимосвязи между родительскими и дочерними отношениями окон может быть юридически законным, но его очень сложно управлять и потребовать, чтобы оба процесса были осведомлены об этой ситуации. Это подробно объясняется Раймондом Ченом в его сообщении в блоге Is it legal to have a cross-process parent/child or owner/owned window relationship? Такая взаимосвязь между процессами, вероятно, является причиной проблемы, с которой вы сталкиваетесь.

Если вы пытаетесь достичь того, что ваша форма остается на вершине Word, вы можете реализовать обходное решение, основанное на событии Application.WindowActivate. Когда активируется окно Word, вы можете принести свою форму вверху, например. используя SetWindowPos.