Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
user
Зарегистрирован: 09.07.2012 Сообщения: 4
|
Добавлено: Пн Июл 09, 2012 5:33 pm Заголовок сообщения: Несколько окон рабочего набора в своем приложении |
|
|
Здравствуйте.
Разрабатываю программу, используя автоматизацию OLE и команды MapBasic-a.
Рабочий набор загружаю командами:
Set Application Window winHWND
Set Next Document Parent winHWND Style 1
Run Application map.wor
Грузится превосходно. НО, если в рабочем наборе более одного окна, то отображается только одно. Остальные не видны.
Через GetParent из Windows API посмотрел Parent-ов всех окон. Оказалось, что мой Parent (winHWND) достался только одному окну, а у остальных он совсем другой (скорее всего сам MapInfo).
Как можно заставить MapInfo всем окнам моего рабочего набора присваивать одного (моего) Parent-а? |
|
Вернуться к началу |
|
|
Андрей Могильный
Зарегистрирован: 21.03.2006 Сообщения: 864
|
Добавлено: Вт Июл 10, 2012 8:31 am Заголовок сообщения: |
|
|
Команда Set Next Document Parent как раз определяет Parent для следующего окна, которое будет открыто. Ее нужно выполнять перед каждым открытием окна. Т.е. отвечая на ваш вопрос - если в рабочем наборе у вас куча окон, то не получится присвоить им всем Parent. Открывайте в рабочем наборе одно окно, остальные окна открывайте самостоятельно программно, предваряя вызов Map From вызовом Set Next Document Parent |
|
Вернуться к началу |
|
|
user
Зарегистрирован: 09.07.2012 Сообщения: 4
|
Добавлено: Вт Июл 10, 2012 11:41 am Заголовок сообщения: |
|
|
Спасибо за ответ.
Значит, использовать Run Application map.wor бессмысленно.
Скорее всего буду анализировать файл map.wor на предмет ключевых слов (Map from, Browse, Layout и т.п.), добавлять перед ними Set Next Document Parent и запускать RunCommand. |
|
Вернуться к началу |
|
|
Андрей Могильный
Зарегистрирован: 21.03.2006 Сообщения: 864
|
Добавлено: Ср Июл 11, 2012 8:34 am Заголовок сообщения: |
|
|
Да, можно и так. |
|
Вернуться к началу |
|
|
user
Зарегистрирован: 09.07.2012 Сообщения: 4
|
Добавлено: Ср Июл 11, 2012 12:05 pm Заголовок сообщения: |
|
|
К сожалению, новые окна создаются не только при загрузке рабочего набора, но и при использовании встроенных в MapInfo форм по созданию новой карты, списка, графика и т.п. А делать свои аналоги этих окон не хочется.
Буду через функцию SetParent из Windows API задавать свое окно. В принципе, работает - окна становятся видимыми в моем приложении, но при закрытии программы иногда вылезают сообщения о некорректном закрытии приложения.
Если у кого-нибудь есть опыт по использованию SetParent-a для окон из MapInfo, просьба поделиться (какие есть подводные камни). |
|
Вернуться к началу |
|
|
Андрей Могильный
Зарегистрирован: 21.03.2006 Сообщения: 864
|
Добавлено: Чт Июл 12, 2012 6:36 am Заголовок сообщения: |
|
|
Не надо делать свои аналоги штатных окон "по созданию новой карты, списка, графика и т.п.". Надо всего лишь сделать свои пункты меню, которые будут вызывать штатные по Run Menu Command, предваряя вызов Set Next Document Parent |
|
Вернуться к началу |
|
|
user
Зарегистрирован: 09.07.2012 Сообщения: 4
|
Добавлено: Чт Июл 12, 2012 9:09 am Заголовок сообщения: |
|
|
Спасибо. Действительно, сработало.
Но все равно проблема осталась, так как в стандартном диалоге "Новое окно списка" пользователь может выбрать несколько таблиц и откроется сразу несколько окон. Соответственно, Set Next Document Parent отработает только для первого окна, а остальные все равно будут принадлежать MapInfo. |
|
Вернуться к началу |
|
|
Андрей Могильный
Зарегистрирован: 21.03.2006 Сообщения: 864
|
Добавлено: Чт Июл 12, 2012 10:33 am Заголовок сообщения: |
|
|
Да, про это я не подумал. Ну тогда - переписывать функционал этих пунктов меню самому. Это надежнее. |
|
Вернуться к началу |
|
|
|