Matlab控件+输入图

时间:2015-07-02 12:03:44

标签: matlab keyboard keyboard-shortcuts enter

我想在用户按住控制键并按下数字窗口上的回车键时捕获。注意:这是编辑器中“评估当前部分”的默认键。

请参阅下面的示例代码:

function test
  f = figure;  
  f.KeyPressFcn = @myKeyPressFcn;
end
function myKeyPressFcn ( hFig, event )
  cm = hFig.CurrentModifier();  
  if ~isempty ( cm )
    fprintf ( 'CurrentKey: %s:%s\n', cm{1}, hFig.CurrentKey );
  else 
    fprintf ( 'CurrentKey: %s\n', hFig.CurrentKey );
  end
end

要重现将上述内容保存在编辑器中的活动文件中并运行该功能 - 编辑器需要打开(这很重要!!)。

图中有效按任意键 - >所选键被写入终端窗口。但是,如果您按住Control并按下回车键(返回),则不会捕获,但是Matlab会尝试在编辑器中“评估当前部分”(或以前调用的单元格)(无论图中是否有焦点)。这当然是错误的......

我已经联系了Matlab支持,这是“预期行为!”。我可以(几乎)看到为什么它可能是演示的好主意 - 但对于在Matlab中运行的专业应用程序,我个人认为这个“功能”是一个错误!!

注释

  1. 当编辑器关闭时,控件+输入将在图中
  2. 中捕获
  3. 在已部署的应用程序中,捕获控件+输入。
  4. 如果我手动更改“评估当前部分”快捷方式,则会捕获“控制+输入”。
  5. 我已经尝试过很多方法来解决这个问题,但没有一个工作,例如隐藏编辑器或设置编辑器启用状态为false(这些都不是可接受的解决方案 - 我试图看看我能做些什么一个小测试用例......):

    function test
      desktop = com.mathworks.mde.desk.MLDesktop.getInstance;
      jEditor = desktop.getGroupContainer('Editor').getTopLevelAncestor;
      jEditor.setVisible(false);
      jEditor.setEnable(false);
      f = figure
      f.KeyPressFcn = @myKeyPressFcn;
      uiwait(f);
      jEditor.setVisible(true);
      jEditor.setEnable(true);
    end
    

    我能让它工作的唯一方法是在启动GUI时关闭所有编辑器文件,然后在GUI关闭时再次打开它们(这不是一个可接受的解决方案...... - 出于相当明显的原因!! )

    我确实考虑过尝试暂时修改“评估当前部分”的快捷键(首选项 - 键盘 - 快捷键) - >但是还没有找到从命令行执行此操作的方法,然后在完成后再将其设置回来。如果速度很快,您可以在用户按下并释放控制键时执行此操作。

    那我在问什么:

    如果可能的话,我需要一个适用于任何地方的解决方案 - 就好像我可以使用它一样,它将被包含在my Matlab GUI Toolbox中的新附加功能中。 - 世界各地的人们都在使用它。

    1. 您知道如何从命令行修改键盘快捷键 - 如果是这样的话!
    2. 还有其他建议吗?
    3. 我的另一个想法是将我的快捷方式更改为不同的组合键 - 但这很有趣! :)(如果某个用户某处已将当前单元格的执行更改为我的新组合,我仍会遇到问题...)
    4. P.S。感谢您阅读这篇文章! :)

2 个答案:

答案 0 :(得分:0)

为什么不去home> Preferences > keyboard > Shortcut并在那里更改?

你只需要点击页面顶部黑框中的Ctrl + Enter来搜索相关命令,这就是评估当前部分并随意改变它。

请记住,你只需要拆开你的窗户(取消它们)。然后,当您点击Ctrl + Enter时,它会执行您想要的任何操作。

我希望你觉得这个答案很有帮助。

答案 1 :(得分:0)

您可以从我的FEX提交中尝试解决方案。 KbTimer的动力是需要捕获键盘笔划而不需要由GUIDE或APP DESIGNER设计的GUI。请注意,功能的实​​现是受基于MEX的PsychToolbox的启发。