|
|
|
| Имею в MSA процедуру, в которой создаю Word-объект WordApp, отрываю в нем doc-файл и говорю WordApp.Visible = True. Вижу на экране окно Word'a. И пускай себе висит, но мне нужно вернуться в окно MSA. Все это выглядит так:
Dim meHWND as long, WordApp As Object, Ret
meHWND = Application.hWndAccessApp ' запоминаю Hwnd Access'a
Set WordApp = CreateObject("Word.Application")
WordApp.Documents.Open "C:\MUSOR.DOC", , true
WordApp.Visible = True ' показываю открытый документ
Ret = ShowWindow(meHWND, 5) ' с помощью API активизирую окно Access
Ret = ShowWindow(meHWND, 3) ' с помощью API отображаю в развернутом виде
но вижу окно Word'a :(
Ret = 16 (> 0), т.е. ф-ция ShowWindow вроде бы отрабатывает правильно
Читаю по запомненному meHWND заголовок окна - то что надо
Где грабли? | |
|
| |
|
|
|
| может так попробовать
dim frm as form
set frm = SCREEN.ACTIVEFORM
frm.setfocus
frm!ПолеИлиКонтролВФорме.setfocus | |
|
| |
|
|
|
| После
WordApp.Visible = True ' показываю открытый документ
написал в лоб
Forms!MAIN.SetFocus
Результат тот же.
И правильно, ведь речь идет об окнах Windows. | |
|
| |
|
|
|
|
| форма может получить фокус только если в ней нет ни одного контрола которые может получать фокус, по этому кроме
Forms!MAIN.SetFocus
нужно еще
Forms!MAIN.controls("имяПоля").SetFocus | |
|
| |
|
|
|
|
| Может задержка нужна между WordApp.Visible = True и ShowWindow?
Я бы просто свернул окно Word-а. | |
|
| |
|
|
|
| Все мучения закончились путем замены
Ret = ShowWindow...
на
Ret = SetForegroundWindow(meHWND)
Большое спасибо участникам за участие, сочуствие и потраченное время. Считаю тему закрытой. | |
|
| |
|
|
|
| Вдогонку. Окончательный рез-т:
Dim WordApp As Object, Ret
Set WordApp = CreateObject("Word.Application")
WordApp.Documents.Open "C:\MUSOR.DOC", , true
WordApp.Visible = True ' показываю открытый документ
Ret = SetForegroundWindow(Application.hWndAccessApp) ' возврат в Access-окно | |
|
| |