问题标签 [tactionmanager]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1323 浏览

delphi - Delphi TActionMainenuBar - 2nd-level submenu menu item is disabled

With Delphi XE5 I am converting a TMainMenu to a TActionMainMenuBar but I am having issues with a submenu node within a category being disabled at runtime, for example in my 'File' category. Most 'File' category items are actions dragged over from the Action Manager, but I also want to group two of those actions under a submenu node within the File menu. With TMainMenu I would simply use Create submenu and edit the resulting TMenuItem caption, but I see that the TActionMainMenuBar has context items for each client item, and this is what I've tried to use. The result is that the layout looks ok but the submenu item is disabled at runtime (presumably because it does not have an action).

This is what I see at design time - I've created the 'Batch Reporting' item myself using 'Add item' in the object inspector.

This is what I see at design time - I've created 'Batch Reporting' myself..

This is what I see at run time, the item is disabled.

enter image description here

This is what I see in the object inspector with my context items included.

enter image description here

Should I be setting a special property on the 'Batch Reporting' item to give it a 'no action' status? Or am I forced to use an action with a 'do nothing' OnExecute?

0 投票
1 回答
477 浏览

delphi - 快捷方式在第一个创建的表单而不是具有焦点的表单上触发 TAction

我发现(在 Delphi 2010 中)快捷方式总是以具有该操作的第一个表单(由主表单拥有)结束,但不是当前关注的表单。我TMainFrm拥有几个TViewFrm. 每个都有一个TActionManager相同的TActons

我看到了一些出路,但想知道最好的解决方法是什么..(而不是一个糟糕的黑客)

  • 表单使用调用其 Hide() 和 Show() 的选项卡集进行导航。我没想到隐藏的表单会收到按键。难道我做错了什么?
  • 似乎动作快捷方式总是从主表单开始,并使用TCustomForm.IsShortCut()get 分发到拥有的表单。我看不到尊重隐藏窗口的逻辑,我应该覆盖它并让它首先触发焦点表单吗?
  • 禁用 TViewFrm.Hide() 中的所有 TAction .. ?
  • 移动TActionToolBarTMainFrm但那是一个蛇坑和最后的手段。
0 投票
0 回答
280 浏览

delphi - 当要显示的项目太多时如何让 TActionMainMenuBar 下拉项目滚动

有谁知道如何使用 TThemedPopupMenu 让 TActionMainMenuBar 像标准菜单一样工作,如果屏幕上有太多项目(垂直)无法容纳,则会出现两个滚动按钮(一个顶部,一个底部)?

我努力了:

  • 将 TActionMainMenuBar.Orientation 设置为 boTopToBottom 并将 TActionMainMenuBar.AllowScrolling 设置为 true - 这使得表单上的栏具有滚动条,您实际上看不到顶部项目。

它看起来像这样:

而不是这样的:

  • 将 TThemedPopupMenu.Orientation 设置为 boTopToBottom 并将 TThemedPopupMenu.AllowScrolling 设置为 true。这具有水平挤压下拉菜单的效果,图标和快捷方式相互叠加。

之所以设置这些属性是因为 TCustomActionDockBar.SetAllowScrolling 只有在“AllowScrolling and (Orientation = boTopToBottom))”时才设置为true

我在互联网上找到的关于这类事情的唯一参考是 Brian Long 的“动作、动作列表和动作管理器”

有谁知道是否可以让动作管理器垂直滚动?或者有任何参考资料可以帮助我吗?</p>

0 投票
1 回答
428 浏览

delphi - 如何为 TActionToolbar 设置选择性字幕?

我有一个 TActionToolbar ......但是有一个“功能”我不太清楚如何控制。

从 TActionToolbar 的自定义对话框 (Vcl.CustomizeDlg.TCustomizeDlg)。注意标题选项列表框:

动作工具栏自定义对话框

那么,您究竟是如何使用选择性字幕的呢?现在它似乎与“完整”标题相同,因为我似乎无法拼凑出你如何告诉 Delphi 哪些按钮应该显示选择性标题(或者如果它是可定制的,选择性标题措辞应该是什么) TAction 没有似乎具有与选择性字幕相关的任何属性。TCaption的描述和示例似乎也没有得到任何提示。

...或者这只是 Delphi 显示某种标准窗口对话框的情况之一,包括 Delphi 实际上不支持的功能?

0 投票
1 回答
2344 浏览

delphi - 如何在操作中从 TShortCut 获取快捷方式字符串?

我正在使用TActionManager,其中每个操作都有一个ShortCut分配给它的键盘。我想向用户显示代表键盘快捷键的文本。例如,F4Ctrl+FCtrl+Shift+S。但是,TShortCut定义为:

如何获得一个用户可读的字符串,它代表分配给操作的快捷方式?

0 投票
1 回答
615 浏览

delphi - 动作图像更改时按钮字形未更新

我正在使用操作管理器,并且我有一些与其中一些操作相关联的按钮。这些按钮的字形会自动从操作管理器的图像列表中分配相应的图像。但是,如果我去更改其中一个此类操作的图像索引,或者以其他方式更改图像列表中的实际图像,则该按钮将保留最初分配给该操作时的原始字形,并且不会更新到新图像。

当我更改动作的图像时,如何确保这些按钮的字形得到更新?

0 投票
1 回答
1124 浏览

delphi - 带有 TAction 的 TSpeedButton - 自动生成的禁用图像仅考虑黑色

首先,我已经知道,当你在实现 aTSpeedButton时,当你分配它的时候Glyph,如果你没有多个字形,那么NumGlyphs应该是1,当它被禁用时,它会自动使用相同的图像来自动生成一个字形的禁用版本。

但是,在我的情况下,我正在为这个速度按钮分配一个动作。TActionManager既具有又Images指向DisabledImages同一个TImageList。我还测试了没有任何DisabledImages分配,以及使用全黑蒙版创建图像的副本,并通过DisabledImages.

启用时,字形显示得很好(基于操作上设置的图像)。但是当它被禁用时,图像中只有纯黑色将用于禁用图像。任何除了纯黑色之外的任何颜色,甚至是略带黑色的颜色,都会被完全忽略,并且在渲染禁用的图像时不包括在内。

这是启用测试的图像和自动生成的禁用图像之间的比较。该图像只是一个带有一些垂直线的 16x16 位图。从最右边开始,一条完全黑色的线,然后是左边稍亮的线。

比较启用和禁用的操作

如您所见,禁用时,它只考虑完全黑线。下一行只比全黑稍微亮一点。

我不能自己分配该Glyph属性,因为它会被分配给它的操作覆盖。我也无法在图像列表上设置两个字形宽度的图像,因为这些图像被广泛用于许多其他没有多个字形概念的地方。我也不想为我的图像使用全黑。

当分配给它的操作时,如何让禁用TSpeedButton(作为 disabled 的结果)显示禁用(灰色)图像?TAction

注意:同样的情况也发生在TBitBtn或任何依赖于Glyph.


u44169002.pas

u44169002.dfm

例如,这是我使用的测试位图:

测试位图


实际上,在Vcl.Buttons单元中,在函数TButtonGlyph.CreateButtonGlyph中,下面的代码似乎明确地只考虑了黑色区域:

0 投票
1 回答
900 浏览

delphi - 如何以编程方式将子菜单添加到 TActionMainMenuBar?

我一直在开发 VCL 程序,并正在添加代码以放置列出一组文件的“最近的文件”下拉子菜单。对于这个程序,我填充了一个 tActionManager 和一个 tActionMainMenuBar。在使用标准 tMainMenu 组件中的 tmenuitems 之前,我已经创建了类似的菜单,在 FormCreate 事件过程中生成最近文件子菜单项的列表。但是,我不确定如何使用 Action 组件动态地进行此操作,也没有找到任何示例作为模型。

谁能提供一个如何做到这一点的例子

0 投票
0 回答
214 浏览

delphi - 启用 VCL 样式时的 TActionMainMenuBar 绘制错误

TActionMainMenuBar 中存在一个关键且易于重现的错误,该错误仅在启用 VCL 样式时发生,我想知道是否有人已经看到它并找到任何解决方法。我正在使用最新的 Delphi 10.3.3 Rio(也发生在 10.4.1 Sydney),而不是使用高 DPI 显示器。

重新创建它的步骤:

  • 创建一个新的 Delphi VCL 应用程序。通过项目选项启用 VCL 样式。为其分配任何内置样式。
  • 向其中添加 3 个组件:TActionManager、TActionMainMenuBar 和一个 TCustomizeDlg。通过 ActionManager 属性链接 TActionMainMenuBar 和 TActionManager。还将 TCustomizeDlg 链接到 ActionManager。
  • 现在,向 ActionManager 组件添加一些操作。在我的示例中,我添加了 4 个 DataSet 标准操作 + 3 个 Dialog 标准操作。
  • 将新创建的操作拖放到 ActionMainMenuBar,因此现在有 2 个顶部菜单项,第一个具有 4 个操作,第二个具有 3 个操作。看图片

在此处输入图像描述

  • 现在将此代码添加到一些用户触发的事件中(我使用了 ActionMainMenuBar DblClick 事件):
  • 运行应用程序并双击 ActionMainMenuBar。显示 CustomizeDlg 并且操作主菜单栏进入设计模式,允许您对其进行自定义。
  • 从对话框中拖动一个动作并将鼠标移动到第二个顶部菜单项上(它将下拉并且所有 3 个项都将可见)。见下图:

在此处输入图像描述

  • 现在将鼠标移动到另一个顶部菜单操作(该示例中的 DataSet)并将其移回 Dialog 菜单项。现在菜单的绘制完全被打破了:

在此处输入图像描述

从现在开始,菜单的绘制将中断,直到您关闭 CustomizeDlg。

到目前为止我所知道的:

  • 如果未启用 VCL 样式,则不会发生此问题。
  • 该错误与 CustomizeDlg 无关,而是与进入 DesignMode 时的 ActionMainMenuBar 相关(祖先 TCustomActionBar 有一个名为 DesignMode 的属性)。
  • 它至少发生在 Delphi 10.3.3 Rio 和 10.4.1 Sydney。可能是其他人

不幸的是,调试这种场景非常耗时,有时无法直接调试(调试本身会在处理鼠标消息时改变场景等)

是否有任何已知的修复、补丁或解决方法(除了禁用不是选项的 VCL 样式)?