 |   |  |
 | |  |
 | |  |
 | |  |
 | |  |
 |
|
|
|
Дело было вечером, делать было чего... Ковырялся с работой с меню. Из всей простоты 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). Закрытие окон ловится стандартным обработчиком. |
|
|
|
 |  |
|
|
|
Добрый день.
Аналог Alter Menu - Alter ButtonPad , так же существует возможность подмены обработчиков нажатий на кнопки toolbar.
|
|
|
|
 |  |
|
|
|
| спасибо, про нее как-то забыл...
остается вопрос ка это все будет работать если несколько приложений захотят поставить хуки на одинаковые пункты меню... |
|
|
|
 |  |
|
|
|
В ситуации , когда перехват событий в разных программах, события обрабатываются во всех . |
|
|
|
 |  |
|
|
|
Приветствую!
У меня также актуальна эта тема. Прошу помощи: имеется иерархическое меню, где каждый элемент дожен вызывать одну и ту же процедуру но с разными параметрами. Фактически проблема сводится к тому, что требуется узнать, какой элемент меню вызвал данную процедуру. Возлгал надежды на MenuItemInfoById( ), но тут надо указать id элемента, а мне надо его определить. Есть ли решение такой задачи? |
|
|
|
|  |
 | |  |
 | |  |
 | |  |
|