2

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

一个线索是,当我:

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

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

尝试以下操作:

  1. 将这些组件粘贴到一个空表单中
  2. 将 32x32 图像添加到图像列表
  3. 将 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
4

3 回答 3

3

问题是相关的 TActionClients 对象(在结构视图中找到它)以某种方式(默认情况下?)得到 SmallIcons=true ......导致字形的不正确定位。在对象检查器中对其进行了更改,现在可以使用。

于 2009-11-20T13:57:30.670 回答
0

我曾经在 Delphi 2009 上也遇到过这个问题(似乎在 2010 年消失了)。

IIRC,尝试将操作管理器中的大图像列表引用设置为空,然后再次返回图像列表。

N@

于 2009-11-20T03:23:23.730 回答
0

我自己又发现了这个问题。我在运行时向页面添加了一个组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;

希望这可以帮助某人。:)

于 2010-05-25T09:45:52.477 回答