Изображение большой кнопки TRibbon не по центру ... есть идеи?легко демонстрируется во время разработки

StackOverflow https://stackoverflow.com/questions/1767843

Вопрос

я использую delphi 2009 (обновления 1, 2, 3, 4).я вижу нечто совершенно необычное.изображение на кнопке не центрировано по кнопке, когда у меня есть большая кнопка с большим глифом!вместо того чтобы располагаться по центру, левая часть глифа начинается в центре кнопки.

подсказка заключается в том, что когда я:

  1. перейдите в редактор действий и выберите нужное действие
  2. используйте выпадающий список ImageIndex в инспекторе объектов, список пуст (обычно я бы видел доступные изображения в выпадающем списке).

похоже, что есть свойство ширины изображения, которое мне не удалось установить, или неправильно настроен imagelist.я ожидал, что глиф на большой кнопке должен быть размером 32x32.

попробуйте следующее:

  1. вставьте эти компоненты в пустую форму
  2. добавьте изображение размером 32x32 в список изображений
  3. установите для Action1 imageindex значение 0

вы сразу поймете, что я имею в виду!

glyph is not centered!
(источник: xrw.bc.ca)

кто-нибудь может сказать мне, почему это так выглядит?

я нахожу интересным, что демонстрационное приложение 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
Это было полезно?

Решение

проблема заключалась в том, что связанный объект TActionClients (найдите его в представлении структуры) каким-то образом (по умолчанию?) получает SmallIcons= true...что приводит к неправильному расположению глифа.изменил его в инспекторе объектов, и теперь он работает.

Другие советы

Раньше у меня тоже была эта проблема с Delphi 2009 (кажется, исчезла в 2010).

IIRC, попробуйте установить для ссылки на большой список изображений в диспетчере действий значение nothing, затем снова вернитесь к списку изображений.

N@

Я сам снова обнаружил эту проблему.Я добавлял группу в TRibbon страница во время выполнения (у меня есть фреймворк плагина, выполняющий эту работу).После добавления группы и кнопки изображения были смещены.Но Только в XP.

Я подумай проблема связана с тем, что ширина глифа в какой-то момент равна 0, что затем делает FGlyphPos в TCustomActionControl центром кнопки (для больших кнопок), а текст должен располагаться в самом левом углу кнопки (для маленьких кнопок).Из-за этого ширина группы также меньше, чем должна быть.

Быстрый и простой способ настроить группы на повторное выравнивание - добавить этот код в форму (здесь я добавил его в событие 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