www.map-info.ru :: Просмотр темы - Вызов функции из другой MBX
                               РќР° главную страницу сайта

 
                                
ВходВход    РегистрацияРегистрация    ПрофильПрофиль    ПользователиПользователи    ГруппыГруппы    FAQFAQ    ПоискПоиск  

 
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Предыдущая тема :: Следующая тема  
Автор Сообщение
Online



Зарегистрирован: 10.06.2008
Сообщения: 26

СообщениеДобавлено: Вс Мар 11, 2012 12:03 pm    Заголовок сообщения: Вызов функции из другой MBX Добавить ответ со ссылкой на данный текст

Добрый день! Нужен совет специалистов. Я из основной программы MBX вызываю другую MBX (которая создает панель с кнопками). По нажатию на одну из кнопок хочу уведомить основную программу, чтобы та выполнила некоторые действия (вызвала функцию/процедуру) и по окончании работы уведомила вторую MBX об окончании работы функции/процедуры. Пробую делать через DDE, но появляются ошибки. Еще заметил, что после вызова DDEExecute "подвисает" на несколько секунд MapInfo.

Код:

Include "mapbasic.def"

Declare Sub Main
Declare Sub RemoteMsgHandler
Declare Sub StartProc

Sub Main
   Terminate Application "second.mbx"
   Run Application ApplicationDirectory$() + "second.mbx"
End Sub

Sub RemoteMsgHandler
   If CommandInfo(CMD_INFO_MSG) = "Start" Then
      Call StartProc
   End If
End Sub

Sub StartProc
   ' <обработка>

   ' уведомляем об окончании
   Dim iChanel As integer

   iChanel = DDEInitiate("MapInfo", "second.mbx")
   DDEExecute iChanel, "End"
   DDETerminate iChanel
End Sub


Код:

Declare Sub Main
Declare Sub TestProc
Declare Sub TestProcAfter
Declare Sub RemoteMsgHandler

Sub Main
   Create ButtonPad "Test" As
      PushButton
      Calling TestProc
End Sub

Sub TestProc
   Dim iChanel As integer

   iChanel = DDEInitiate("MapInfo", "main.mbx")
   DDEExecute iChanel, "Start"
   DDETerminate iChanel
End Sub

Sub TestProcAfter
   Note "TestProcAfter"
End Sub

Sub RemoteMsgHandler
   If CommandInfo(CMD_INFO_MSG) = "End" Then
      Call TestProcAfter
   End If
End Sub
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Андрей Могильный



Зарегистрирован: 21.03.2006
Сообщения: 864

СообщениеДобавлено: Вс Мар 11, 2012 9:19 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

У вас тут синхронный двунаправленный DDE-вызов. Т.е. первый вызов рождает обратный второй DDE-вызов. Я бы посоветовал использовать обработчик RemoteQueryHandler, вместо RemoteMsgHandler, он такие вызовы лучше переваривает. Правда я не уверен, может ли RemoteQueryHandler использоваться в DDE (точно используется в OLE), поштудируйте документацию на этот счет.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
thegeo



Зарегистрирован: 17.01.2012
Сообщения: 119

СообщениеДобавлено: Вс Мар 11, 2012 10:42 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

1. Почему бы не собрать обе программы в один mbx.
2. Не ясно, какое уведомление требуется, так как возврат в вызывающую программу и есть уведомление.
3. В предложенной конструкции действительно возникает ошибка. Вероятно, нельзя переназначить клиент и сервер для уже открытой связи.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Top.Mail.Ru