我正在使用delphi 2009(更新1、2、3、4)。我看到了一些很奇怪的东西。当我有一个带有大字形的大按钮时,按钮上的图像未居中!字形的左侧部分不是居中,而是从按钮的中心开始。

一个线索是,当我:

  1. 进入动作编辑器并选择动作
  2. 使用对象检查器中的 ImageIndex 组合框,列表为空(通常我会在组合框中看到可用的图像)。

似乎有一个图像宽度属性我未能设置或图像列表未正确配置。我预计大按钮上的字形应该是 32x32。

尝试以下操作:

  1. 将这些组件粘贴到空表单中
  2. 将 32x32 图像添加到图像列表
  3. 将 Action1 图像索引设置为 0

你马上就会明白我的意思!

glyph is not centered!
(来源: 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;

希望这对某人有帮助。:)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top