2014-08-27 57 views
0

我有一個從Word模板上的宏調用的Delphi ActiveX。它管理文檔並在單詞實例中打開它們。防止Word的隱藏實例從我的應用程序中竊取焦點

在其中的一部分,我使用另一個隱藏的單詞實例來生成文檔預覽的文檔將顯示在打開之前。

TBlobField(fieldbyname(cdocumentDatafield)).SaveToFile(tmpDocPath +HTMLDOCPREVIEWFILE); 
DMMain.WordApphtml.documents.Open(tmpDocPath +HTMLDOCPREVIEWFILE); 
DMMain.WordApphtml.activedocument.Saveas(tmpDocPath +HTMLPREVIEWFILE, wdFormatText); 
DMMain.WordApphtml.activedocument.Close; 

變量是這樣

dmmain.Wordapphtml := CreateOleObject('Word.Application'); 
dmmain.WordApphtml.Visible := false; 

基本上代碼轉儲從數據庫文件創建,打開該文件在我的隱藏文字實例,並將其保存爲文本文件,你可以運行負荷。我的問題是,文本文件生成後,我加載它,我的應用程序已經失去了焦點(它仍然顯示在單詞的頂部,但如果我打一個鍵沒有任何反應)。我認爲隱形應用程序現在有焦點

+0

我想知道爲什麼你需要這個其他的東西第一個字的首字母 – 2014-08-28 07:46:16

回答

0

最後我通過代碼點擊我的表單來修復它。使用這個SO hack去那裏。

SavedGridPosition := THackDBGrid(DBGridRecipes).cellRect(0,THackDBGrid(DBGridRecipes).row); 
    SavedGridPoint.X := SavedGridPosition.Left; 
    SavedGridPoint.Y := SavedGridPosition.Top; 

    SavedGridPoint := ClientToScreen(SavedGridPoint) ; 

    SavedGridPoint.X := savedgridpoint.x + dbgridRecipes.Left; 

然後,我創建我的預覽文檔後,我打電話一個點擊事件。

setcursorpos(SavedGridPoint.X, savedgridpoint.Y); 
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); 
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); 

似乎工作

+0

那是不是移動光標?並依靠網格上沒有任何東西。如果您輸入虛假信息,請使用SendInput。文檔解釋了原因。 – 2014-08-28 05:45:45

2

最簡單的方式就是 「偷」 焦點回到...

SetActiveWindow(Application.Handle)

,或者如果你想有一個具體形式是活躍

SetActiveWindow(MySpecialForm.Handle)

+0

我會嘗試。 – 2014-08-28 06:52:36

相關問題