TRibbon 的大按钮图像未居中……有什么想法吗?易于在设计时演示
-
21-09-2019 - |
题
我正在使用delphi 2009(更新1、2、3、4)。我看到了一些很奇怪的东西。当我有一个带有大字形的大按钮时,按钮上的图像未居中!字形的左侧部分不是居中,而是从按钮的中心开始。
一个线索是,当我:
- 进入动作编辑器并选择动作
- 使用对象检查器中的 ImageIndex 组合框,列表为空(通常我会在组合框中看到可用的图像)。
似乎有一个图像宽度属性我未能设置或图像列表未正确配置。我预计大按钮上的字形应该是 32x32。
尝试以下操作:
- 将这些组件粘贴到空表单中
- 将 32x32 图像添加到图像列表
- 将 Action1 图像索引设置为 0
你马上就会明白我的意思!
(来源: xrw.bc.ca)
谁能告诉我为什么它看起来是这样的?
我发现有趣的是功能区演示应用程序没有显示这个问题。我什至尝试了相同的图像。
谢谢你!
object ActionManager1: TActionManager
ActionBars = <
item
Items = <
item
Action = Action1
Caption = '&Action1'
ImageIndex = 0
CommandProperties.ButtonSize = bsLarge
end>
ActionBar = RibbonGroup1
end>
LargeDisabledImages = img3232
LargeImages = img3232
Left = 376
Top = 184
StyleName = 'Ribbon - Luna'
object Action1: TAction
Caption = 'Action1'
ImageIndex = 0
end
end
object Ribbon1: TRibbon
Left = 0
Top = 0
Width = 693
Height = 147
ActionManager = ActionManager1
Caption = 'Ribbon1'
Tabs = <
item
Caption = 'RibbonPage1'
Page = RibbonPage1
end>
ExplicitLeft = 232
ExplicitTop = 80
ExplicitWidth = 0
DesignSize = (
693
147)
StyleName = 'Ribbon - Luna'
object RibbonPage1: TRibbonPage
Left = 0
Top = 54
Width = 692
Height = 93
Caption = 'RibbonPage1'
Index = 0
object RibbonGroup1: TRibbonGroup
Left = 4
Top = 3
Width = 54
Height = 86
ActionManager = ActionManager1
Caption = 'RibbonGroup1'
GroupIndex = 0
end
end
end
object img3232: TImageList
Height = 32
Width = 32
Left = 376
Top = 256
end
解决方案
问题是相关的 TActionClients 对象(在“结构”视图中找到它)以某种方式(默认情况下?)获取 SmallIcons=true...导致字形定位不正确。在对象检查器中更改了它并且现在可以工作了。
其他提示
我曾经在使用 Delphi 2009 时也遇到过这个问题(似乎在 2010 年就消失了)。
IIRC,尝试将动作管理器中的大图像列表引用设置为空,然后再次返回图像列表。
氮@
我自己又发现了这个问题。我正在将一个组添加到 TRibbon
运行时的页面(我有一个插件框架来做这项工作)。添加组并添加按钮后,图像发生了偏移。但 仅有的 在 XP 上。
我 思考 问题与字形宽度在某些时候为 0 有关,这使得 TCustomActionControl 中的 FGlyphPos 成为按钮的中心(对于大按钮),并且文本位于按钮的最左侧(对于小按钮)纽扣)。因此,该组的宽度也小于应有的宽度。
踢入组以重新对齐所有内容的一种快速而简单的方法是将此代码添加到表单中(这里我已将其添加到 OnShow 事件中,但您可以将其放在您喜欢的位置):
for LTabIndex := 0 to Ribbon.Tabs.Count - 1 do
for LGroupIndex := 0 to Ribbon.Tabs[LTabIndex].Page.GroupCount - 1 do
Ribbon.Tabs[LTabIndex].Page.Groups[LGroupIndex].AlignGroupControls;
希望这对某人有帮助。:)
不隶属于 StackOverflow