如何在数字中添加"教程消息div"?

Dev*_*-iL 12 matlab undocumented-behavior flexbox matlab-figure matlab-gui

安装R2018b后,我打开的第一个数字包含一条有趣的消息(以蓝色显示):

静态图像

它之所以有趣,是因为它包含文本换行,透明度等功能,即使文本调整大小,图像也保持恒定宽度(这让我想起了CSS3 flexbox,因此标签)等等.

动画

动画的最后一部分是慢动作,以更好地显示div的大小如何跟随图形的大小.

如果重要,我正在使用Win 10 v1803.

题:

我想知道我们如何可以得出类似的,定制的,申报单(对于缺乏一个更好的词)在我们的数字.(重要的是要强调这不是一个UIFigure!)


到目前为止我发现了什么:

  • " 了解更多"链接打开页面:

    web(fullfile(docroot, 'matlab/creating_plots/interactively-explore-plotted-data.html'))
    
    Run Code Online (Sandbox Code Playgroud)

    然而,任何一个webdocroot(或偶数doc)的入口点的断点都没有被击中.

  • 假设这个元素是Child图中的一个,我试图找到它的句柄:

    >> set(gcf,'MenuBar','none'); findall(gcf)
    
    ans = 
      22×1 graphics array:
    
      Figure                (1)
      ContextMenu
      AnnotationPane
      Axes
      AxesToolbar
      Text
      Text
      Text
      ToolbarStateButton    (Brush/Select Data)
      ToolbarStateButton    (Data Tips)
      ToolbarStateButton    (Rotate 3-D)
      ToolbarStateButton    (Pan)
      ToolbarStateButton    (Zoom In)
      ToolbarStateButton    (Zoom Out)
      ToolbarPushButton     (Restore View)
      Button
      Button
      Button
      Button
      Button
      Button
      Button
    
    Run Code Online (Sandbox Code Playgroud)

    然而,使这些控件不可见使用set(h(2:end), 'Visible', false)并没有使div消失.

  • 保存图形.fig或为其生成代码,不会留下任何此div的痕迹.

  • uiinspect这个数字时,这个div没有显示(或者至少,找不到它).

  • 我不知道我究竟做了什么让它再次出现,但是因为它设置在你第一次启动R2018b时出现,我怀疑删除prefdir(很明显,在备份之后)并重新启动MATLAB可能会把它带回来.

  • 我唯一没有尝试的是将java调试器附加到MATLAB并尝试将调用者跟踪到com.mathworks.mlservices.MLHelpServices.setCurrentLocation(from mlservices.jar),这将打开帮助浏览器.

Dev*_*-iL 8

在Java方面挖掘了一些东西(从findjobj很多开始,然后是很多.getComponent(0).getComponent(0)...),我终于设法找到了有问题的组件.这是我学到的东西:

  1. 该组件被调用InfoPanel,是MATLAB Java API的一部分.类定义本身可在以下位置找到:

    MATLAB/R2018b/java/jar/hg.jar!/com/mathworks/hg/util/InfoPanel.class
    
    Run Code Online (Sandbox Code Playgroud)
  2. 为了使它出现,我们需要调用该static方法addBannerPanel,传入一个数字句柄:

    com.mathworks.hg.util.InfoPanel.addBannerPanel( figure(randi(1E4)) );
    
    Run Code Online (Sandbox Code Playgroud)

    或者另一个也接受自定义面板的签名:

    jIP = com.mathworks.hg.util.InfoPanel;
    jIP.setBackground(java.awt.Color(0.8, 0.7, 0.1));
    com.mathworks.hg.util.InfoPanel.addBannerPanel( figure(randi(1E4)), jIP );
    
    Run Code Online (Sandbox Code Playgroud)
  3. 控制是否应该出现的MATLAB设置showinteractioninfobar位于<prefdir>/matlab.settingsXML 内部.

  4. 似乎是"有趣的部分" InfoPanel是私有的,这意味着它几乎不允许任何自定义(主要是一些颜色;不是字符串或图标),但它应该相当容易制作这个类的副本并公开我们的所有元素需要.