TRibbon не показывает вкладки - PullRequest
7 голосов
/ 07 декабря 2011

Я запускаю Delphi 2010 как на 64-битной машине Windows (Win 7), так и на 32-битной машине Windows (XP).

Я пытаюсь научиться использовать элемент управления TRibbon.

Я следовал примеру в Руководстве Марко Канту 2009 года и смотрел демонстрации на YouTube, но мой контроль не работает так, как описано в книге или демонстрациях.

Я добавил две вкладки, щелкнув правой кнопкой мыши элемент управления. Тем не менее, TRibbon выглядел точно так же, как на моем скриншоте, когда я перетаскивал его на основную форму. Это не так высоко, как в книгах или демонстрациях на YouTube.

Я попробовал то же самое на своем ноутбуке с Win 32 под управлением Windows Xp и Delphi 2010 и получил точно такие же результаты

вот как это выглядит на моей машине

64 bit laptop screenshot

вот как это должно выглядеть в демоверсии

from youtube video demo

Еще раз. Когда он помещает его в форму, он не принимает форму и высоту, как я вижу в демонстрациях. Даже когда я добавляю вкладки. Я сделал что-то не так во время установки Delphi 2010?

1 Ответ

8 голосов
/ 08 декабря 2011

Мне наконец удалось воспроизвести проблему в Delphi XE (обновление 1) на Win7 64 с включенной Aero. Кажется, что в файле .DFM задан неправильный размер, и поскольку Ribbon не поддерживает ручное изменение размера, вы не можете визуально исправить его в IDE (хотя он отображается правильно во время выполнения) или в Object Inspector. Иногда он отображается корректно во время выполнения, но, кажется, это также спорадично.

Это неприятная ошибка, потому что это делает невозможным проектирование Ribbon. Вы можете добавить RibbonGroup элементов и назначить ActionManager, а также попытаться создать его полностью, используя Structure Pane, но, конечно, это не практичное решение.

К счастью, есть довольно простой обходной путь, хотя это раздражает. :)

Мне дважды удавалось заставить работать следующий обходной путь, но запуск через него несколько раз не удался, поэтому возможен обходной путь (без обещаний - работал в XE, последовательно проваливался в XE2 Update 2):

  • Щелкните правой кнопкой мыши на Ribbon и добавьте хотя бы одну вкладку.
  • Щелкните правой кнопкой мыши форму в IDE и выберите View as Text в контекстном (всплывающем) меню.
  • Найдите элемент управления Ribbon в тексте .dfm и измените Height с 26, который IDE присвоил 200. (Следующий шаг настроит его, но это нормально - 200 устраняет непосредственную проблему.)
  • Снова щелкните правой кнопкой мыши и выберите View as Form, и Ribbon должно отобразиться правильно.

(я сообщал об этом в QC против XE2 Update 2, так как там также существует проблема - QC # 101642 )

Я проследил это до TCustomRibbon.GetCaptionHeight, в частности

FCaptionHeight := Max(GetSystemMetrics(SM_CYCAPTION), 26);

Кажется, что вызов GetSystemMetrics возвращает что-то меньшее 26 в некоторых конфигурациях Win7 (хотя я пока не могу понять, почему). В этом методе есть пара закомментированных строк, которые, кажется, изменяют результат, но, как я уже сказал, они были закомментированы.

Странная часть в том, что в TCustomRibbon.Create, Height устанавливается с помощью вызова GetRibbonMetric(rmFullHeight), который устанавливает Result := cRibbonHeight + GetCaptionHeight;, а cRibbonHeight является константой, определенной как cRibbonHeight = 117;.

Наконец-то, думаю, я это отследил. В объявлении TRibbon есть объявление свойства published:

published
   ...
  property Height default TCustomRibbon.cRibbonHeight;

Поскольку это значение по умолчанию, похоже, что любое другое значение означает, что вызов GetRibbonMetric, упомянутый выше, не происходит (см. TCustomRibbon.Create, упомянутый выше), и странный результат от вызова GetSystemMetric приводит к тому, что ошибочное значение 26 сохраняется как «другое значение». Wierd; обновит КК в АМ.

Приложение: Обновлен отчет о контроле качества с дополнительной информацией.

Приложение: отчет о контроле качества открыто в мае 2012 года, но, по-видимому, не было разрешено по состоянию на XE5 Обновление 1 (проверено в январе 2014 года).

...