Текущий раздел:   Форум

Открылся специализированный форум по Автоматизированному Кадастровому Офису. Для перехода на форум нажмите здесь.

Форум

  
 
  Forum  Программное обе...  MapBasic  Меню Mapinfo
Предыдущий Предыдущий
 
Следующий Следующий
Новые публикации 13.10.2009 23:52
  FedorinoFF
14 публикаций
Без ранга


Меню Mapinfo 
Изменил  FedorinoFF  на 13.10.2009 23:55:23)
Дело было вечером, делать было чего...
Ковырялся с работой с меню. Из всей простоты MapBasic, самое сложное или недоделанное, на мой взгляд, это работа с меню... (может, конечно, попробовать RTFM, но мы не исчем легких путей).
В муках наткнулся на возможность создавать обработчики (хуки) для стандартных пунктов меню.

Тема такая:
---------------
Include "MENU.DEF"
Include "MAPBASIC.DEF"

Declare Sub CloseAllHandler
Declare Sub CloseHandler
Declare Sub OpenFileHandler
declare Sub EndHandler
declare sub Main
Declare Sub EndApp

Sub Main
Print "App starting..."
Alter Menu Item M_FILE_CLOSE_ALL Calling CloseAllHandler
Alter Menu Item M_FILE_CLOSE Calling CloseHandler
Alter Menu Item M_FILE_OPEN Calling OpenFileHandler

Alter Menu Bar Add "MB_Test"
Alter Menu "MB_Test" Add "Exit app" Calling EndApp
End Sub

Sub Endapp
End program
End sub

Sub CloseAllHandler
Print "Before Closeall"
Run Menu Command M_FILE_CLOSE_ALL
Print "After CloseAll"
' need to self-manage Menu state
Alter Menu Item M_FILE_CLOSE_ALL Disable
End Sub

Sub CloseHandler
Print "Before Close"
Run Menu Command M_FILE_CLOSE
Print "After Close"

' need to self-manage Menu state
If NumTables() = 0 Then
Alter Menu Item M_FILE_CLOSE Disable
Alter Menu Item M_FILE_CLOSE_ALL Disable
end if
End Sub

Sub OpenFileHandler
Print "Before OpenFile"
Run Menu Command M_FILE_OPEN
Print "After OpenFile"

' need to self-manage Menu state
Alter Menu Item M_FILE_CLOSE Enable
Alter Menu Item M_FILE_CLOSE_ALL Enable
End Sub

Sub EndHandler
' Restore Menu, otherwise Menu items disappered
Onerror Goto err_trap
' If MI_Rus
Create Menu "Файл" As Default
' If MI_Eng
Create Menu "File" As Default
Exit_sub:
Print "App finished."
Exit Sub
err_trap:
Resume Next
end sub
-------------------

В итоге имеем обработчики на пункт меню "Открыть", "Закрыть" и "Закрыть все", но:
1.кнопка "открыть" на тулбаре не ловится
2.приходится ручками манажить пункты меню (не смотря на вызов стандартных обработчиков, пункты не активируются/деактивируются)
3. при завершении приложения три пункта меню пропадают (понятно почему), но вернуть их можно только через восстановление default меню
4. если не делать возврат default menu и запустить приложени при его автривности, то пункты меню пропадают...

Кто что может сказать/поделиться/прокомментировать по данному вопросу?

Не проверял что будет, если несколько приложений повесят свои обработчики на пункты меню...

Тема интересна для "оживления" своих пунктов меню, когда происходит закрытие/открытие таблиц (или WOR). Закрытие окон ловится стандартным обработчиком.
 
Новые публикации 14.10.2009 11:57
  ESTIMAP
56 публикаций
Без ранга


Re: Меню Mapinfo 

Добрый день.

Аналог Alter Menu - Alter ButtonPad , так же существует возможность подмены обработчиков нажатий на кнопки toolbar.

 

 

 
Новые публикации 14.10.2009 23:28
  FedorinoFF
14 публикаций
Без ранга


Re: Меню Mapinfo 
спасибо, про нее как-то забыл... остается вопрос ка это все будет работать если несколько приложений захотят поставить хуки на одинаковые пункты меню...
 
Новые публикации 15.10.2009 10:01
  ESTIMAP
56 публикаций
Без ранга


Re: Меню Mapinfo 

В ситуации , когда перехват событий в разных программах, события обрабатываются во всех .

 
Новые публикации 30.01.2010 11:37
  ginpetr
5 публикаций
Без ранга


Re: Меню Mapinfo 

Приветствую!

У меня также актуальна эта тема. Прошу помощи: имеется иерархическое меню, где каждый элемент дожен вызывать одну и ту же процедуру но с разными параметрами. Фактически проблема сводится к тому, что требуется узнать, какой элемент меню вызвал данную процедуру. Возлгал надежды на MenuItemInfoById( ), но тут надо указать id элемента, а мне надо его определить. Есть ли решение такой задачи?

 
Предыдущий Предыдущий
 
Следующий Следующий
  Forum  Программное обе...  MapBasic  Меню Mapinfo