Использование Enter в качестве ускорителя в MATLAB UIMenu

Я создаю графический интерфейс в MATLAB и в настоящее время добавляю пользовательские меню, используя uimenu. Я пытаюсь добавить разные ускорители к разным действиям в меню.

Я обнаружил, что передача char(10) (новая строка) в качестве символа ускорителя в uimenu (см. ниже) Matlab добавляет Ctrl+ Enter в качестве метки ускорителя этого меню. Проблема в том, что он не запустит обратный вызов, когда я нажму Ctrl+ Enter.

Любые идеи, почему это не работает? Я что-то упускаю? Отменяет ли мой вызов Ctrl+ Enter для "запустить текущий раздел"? В таком случае, могу ли я переопределить его?

Пример

Быстрый демонстративный пример того, как MATLAB не примет Ctrl+ Enter

function test
close all
f=figure;
m=uimenu(f,'Label','test');
uimenu(m,'Label','a','callback',@hittest,'Accelerator','r');
uimenu(m,'Label','b','callback',@hittest,'Accelerator',char(10));

    function hittest(h,~)
        disp(h.Label)
    end
end

person Skogsv    schedule 01.08.2016    source источник
comment
Что ж, ваш обратный вызов выдает ошибку, но это работает для меня в OS X. Можете ли вы попробовать запустить MATLAB без рабочего стола, чтобы подтвердить свои подозрения? И какая версия и ОС?   -  person Suever    schedule 01.08.2016
comment
Версия: 9.0.0.370719 (R2016a) Операционная система: Microsoft Windows 7 Enterprise Version 6.1 (Build 7601: Service Pack 1) Попробую запустить без окон и вернусь!   -  person Skogsv    schedule 01.08.2016
comment
Хорошо, у меня тоже работает, пока я запускаю его в режиме -nodesktop. Я думаю, это нормально, так как он будет развернут, когда я закончу с ним. Есть идеи, можно ли заставить его работать даже в режиме рабочего стола?   -  person Skogsv    schedule 01.08.2016
comment
Я подозреваю, что нет хорошего способа сделать это в режиме рабочего стола. Похоже, что приложение перехватывает этот ярлык на очень низком уровне.   -  person Suever    schedule 01.08.2016
comment
Хорошо, очень плохо. Я все еще очень новичок в stackexchange, какие здесь правильные действия? Удалить свой пост или ответить самому себе, чтобы другие увидели в будущем?   -  person Skogsv    schedule 01.08.2016
comment
Нет, я думаю, это хорошо. Я добавил более подробное описание того, что происходит ниже, в качестве ответа и возможного обходного пути для разработки без запуска в автономном режиме.   -  person Suever    schedule 01.08.2016
comment
Можете ли вы изменить его в панели настроек сочетания клавиш?   -  person Suever    schedule 01.08.2016


Ответы (1)


Как вы сказали, похоже, что основное приложение зарегистрировало этот ускоритель и поэтому не позволяет вашему графическому интерфейсу перехватить этот вызов.

Вы можете попробовать изменить сочетание клавиш MATLAB в диалоге настроек сочетания клавиш. . Обратите внимание, что это повлияет только на вашу установку MATLAB.

Если вы запустите MATLAB в режиме -nodesktop, это предотвратит запуск среды MATLAB IDE и освободит ускоритель для вашего использования.

matlab -nodesktop

Поскольку вы упомянули, что это будет развернутое приложение, вы всегда можете использовать isdeployed, чтобы проверить, запускается ли оно как развернутое приложение, и если это не так, вы можете использовать альтернативное сочетание клавиш, чтобы вам не приходилось постоянно запускать MATLAB без IDE

if ~isdeployed
    % Use some other keyboard shortcut for testing
    set(hmenu, 'Accelerator', <some other key for testing>)
else
    % Use the enter key on deployed applications
    set(hmenu, 'Accelerator', char(10))
end

Вы также можете сделать так, чтобы каждый раз, когда ваше приложение развертывается или, Matlab запускается с -nodesktop, оно использовало клавишу ввода:

if usejava('desktop')
    % Use some other keyboard shortcut for testing
    set(hmenu, 'Accelerator', <some other key for testing>)
else
    % Use the enter key on deployed applications
    set(hmenu, 'Accelerator', char(10))
end
person Suever    schedule 01.08.2016