代码之家  ›  专栏  ›  技术社区  ›  X-Ray

Tribbon的大按钮图像不是居中的…有什么想法吗?设计时易于演示

  •  2
  • X-Ray  · 技术社区  · 15 年前

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

    一个线索是当我:

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

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

    尝试以下操作:

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

    你会立刻明白我的意思的!

    glyph is not centered! http://xrw.bc.ca/download/so/hurry.png

    有人能告诉我为什么会那样吗?

    我发现有趣的是Ribbon演示应用程序没有显示这个问题。我甚至尝试了同样的图像。

    谢谢您!

    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
    
    3 回复  |  直到 14 年前
        1
  •  3
  •   X-Ray    15 年前

    问题是相关的tactionclients对象(在结构视图中找到它)在某种程度上(默认情况下?)获取smallicons=true…导致字形的位置不正确。在对象检查器中更改了它,它现在可以工作了。

        2
  •  0
  •   Nat    15 年前

    我以前也有Delphi2009的这个问题(似乎在2010年消失了)。

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

    n@

        3
  •  0
  •   Nat    14 年前

    我自己又发现了这个问题。我正在向 TRibbon 页面在运行时(我有一个插件框架来完成这项工作)。添加组并添加按钮后,图像被偏移。但是 只有 在XP上。

    认为 问题与某个点的glyph宽度为0有关,这使得tcustomationcontrol中的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;
    

    希望这能帮助别人。:)