Подписка

Проекты

Сборник идей для разработок в Delphi и использования их в Интернет. Участвуй в работе коллективного разума!

Google API в Delphi - проект с открытым исходным кодом.


А тут я коплю на лицензию Delphi 2011. Сумма пожертвования не фиксирована.

Друзья блога

Блоги и сообщества

DelphiFeeds.ru - Все Delphi-блоги Рунета О раскрутке блога по программированию Сообщество умных людей VR-Online.RU Бесплатный журнал для программистов и всех, кто интересуется IT Статьи и уроки по Delphi Статьи по Delphi

Счётчики


Анализ веб сайтов

Рейтинг блогов




Система Orphus

  • 12Jan

    Да, давненько я уже не запускал Delphi 2010. Всё как-то в последнее время работа в Lazarus кипит.

    Сегодня решил немного выделить время и снова поразбираться с Ribbon Controls. Как раз и причина появилась – вопрос читаеля блога. Конечно, если б вопрос касался чего-нибудь наподобие “где находится Action Manager?” то поста бы и не было, а был бы ответный комментарий. Но, простой на первый взгляд вопрос, касающийся работы со ScreenTips, чувствую может попортить кровь не одному желающему использовать Ribbon Controls. Поэтому расскажу-ка я про подсказки немного по-подробнее (заодно и самому будет потом шпаргалка, если вдруг чего забуду).

    Итак, сегодняшний пост посвящён работе с подсказками Ribbon они же ScreenTips. ' ' Частично про ScreenTips я рассказывал в первом шаге своего изучения Ribbon. В отличие от стандартных Hints (подсказок), ScreenTips дают нам на порядок больше возможностей, в т.ч. вставка в подсказку своих изображений, использование горячих клавишь и т.д.

    Рассмотрим простой пример использования ScreenTips.

    Открываем Delphi 2010, создаем новый проект и укладываем на главную форму ActionManager, Ribbon и ScreenTipsManager, как показано на рисунке:

    У Ribbon создаем одну страницу RibbonPage1 (кому не нравятся стандартные имена – переименуйте, я показываю пример) и на этой странице располагаем одну группу RibbonGroup1.

    Теперь производим следующие манипуляции с компонентами:

    1. У компонента ScreenTipsManager1 открываем редактор свойства LinkedActionLists, жмем в редакторе кнопку “Add New…” или Ins. В итоге добавится пустой контейнер.
    2. Выбираем в редакторе “0 – TActionListItem” и в Object Inspector’е указываем ActionManager1:

    Собственно теперь наш ScreenTipManager способен создать подсказки для всех действий определенных в ActionManager.

    Теперь открываем двойным щелчком редактор ActionMaager’а и, не сильно заморачиваясь, добавляем в список новое дейтсвие:

    Обработчик действия может быть каким угодно на Ваше усмотрение. Измените только у Action1 свойство Hint (сейчас нам это свойство будет очень важно). Пусть, допустим, оно будет равно “Подсказка для Action1″.

    Теперь перетягиваем мышкой Action1 из редактора на RibbonGroup1 и у нас практически всё готово:

    Всё, что нам теперь остается сделать – это сгенерировать подсказки. Делается это двойным кликом по компоненту ScreenTipsManager или с использованием опции “Generate Screen Tips” в Object Inspector.

    При этом, если Вы всё сделали правильно, то получите сообщение вида:

    Если же допущена ошибка, то, первое, что обычно видит пользователь после двойного клика по компоненту это:

    Т.е. в данном случае не было определено свойство LinkedActionLists.

    После того как подсказки сгенерированы, Вы можете смело присупать к их редактированию и настройке внешнего вида. Для этого Вы можете опять же воспользоваться встроенным редактором свойств, который доступен по двойному клику на компоненте и выглядит следующим образом:

    В редакторе отражены все используемые у ScreenTip свойства:

    • ShowImage: boolean – показывать или нет картинку у подсказки
    • ShowFooter: boolean – показывать или нет “подвал” (нижнюю часть). Обычнов подвале размещается какая-либо дополнительная информация, например, как по умолчанию приглашение нажать F1 для получения справки.
    • ShowHeader: boolean – показывать или нет “шапку”, в нашем случае – это название определенное для Action1.
    • Show Short Cut: boolean – показывать или нет горячие клавиши для действия, если они были определены.
    • Border Style – стиль бордюра. Для подсказки ScreenTip возможо применения двух стилей: Normal - при этом форма окна подсказки быдет прямоугольной и Rounded - для придания форме подсказки скругленых углов (используется по умолчанию).
    • Corner Size: integer – определяет радиус скругления углов для подсказки.
    • Color Start и Color End : TColor – определяют градиент заливки формы ScreenTip’а.
    • Offset X и Offset Y: integer – определяют на каком расстоянии от элемента будет располагаться подсказка. Чем больше значение – тем дальше от элемента появится ScreenTip.
    • FooterImage: TBitmap – изображение, которое будет расположено в “подвале”. Желательно не выбирать слишком большие изображения.

    Дополнительно Вы можее настроить в редакторе вид и текст подсказки при выключенном действии (когда у Action свойство Enabled усановлено в False). Для этого необходимо включить свойство “Disabled в группе “Mode”

    Ну, а теперь устанавливаем у главной формы приложения свойство ShowHint в значение True и запускаем приложение. У меня получилась вот такая подсказка для действия Action1:

    Красота да и только. Но это ещё не всё. Помните, я сказал, что свойство Hint у Action1 для нас важно? Сказал я это не просто так. Вы, вероятно, заметили, что после того как подсказки были сгенерированы, то текст у подсказок по умолчанию соответствовал тому, что было написано в Hint? Следовательно было бы логично предположить, что ScreenTipManager, а вместе с ним и Ribbon “наследуют” все подсказки из контейнеров. Давайте проверим так ли это на самом деле.

    Выделяем RibbonGroup1 и в свойстве DialogAction указываем Action1. По логике вещей мы ничего не поменяли ни в подсказках ни где. Теперь точно такой же ScreenTip должен появиться и у кнопки дополнительного действия у группы. Проверяем:

    Спрашивается: что за дела? Действие тоже самое, подсказку не меняли, мэнеджер не трогали.

    Я не буду утверждать, что это на самом деле – глюк или недокументированная возможность, но факт остается фактом – RibbonGroup с опеределенным свойством DialogAction плевать хотела на всякие подсказки.

    Но ведь у того же Word 2007 такие подсказки работают превосходно. Признаюсь, после того как мне был задан вопрос по поводу подсказок для DialogAction, я полез копаться в модулях Ribbon, отслеживать что, откуда и как поступает, какие свойства перекрываются, какие наследуются и пр.  Дошло даже до того, что стал собирать свой собственный мэнеджер подсказок. А оказалось, что решение проблемы-то лежит на самой, что ни есть поверхности, а точнее на панели компонентов Ribbon Controls :).


    Смотрите, как всё оказывается просто. Берем с панели Ribbon Controls компонент ScreenTipsPopup, укладываем его на форму и устанавливаем свойство Visible в false.

    Теперь в свойстве Associate выбираем RibbonGroup1. В свойстве ScreenTipsManager указываем ScreenTipManager1 и заполняем все необходимые свойства во вкладке ScreenTip. Запускаем приложение и любуемся результатом:

    Конечно этот вариант никак нельзя назвать изящным или панацеей от всех болезней. Скорее всего это что-то наподобие “костыля” для Ribbon Controls, т.к. мы ассоциируем подсказку не конкретно с кнопкой вызова диалога дополнительных действий, а со всей панелькой RibbonGroup1 сразу. Но, тем не менее, вариант вполне работоспособный. А если учесть, что панели Ribbon изменяют свой размер автоматически, то при полном заполнении панели действиями пользователь в принципе и не почувствует “подвоха”.

    Вот такие “кренделя” подчас приходится выписывать при работе с Ribbon Controls в Delphi. Надеюсь мое решение вопроса Вам пригодиться. За сим раскланиваюсь, до новых встречь. И не забывайте подписываться на RSS-канал блога – вас ждет много интересного.

    --------------------------------
    Хотите разрабоать свой сайт, но не знаете даже основ HTML? Не расстраивайтесь Узнайте стоимость сайта и закажите его создание на 4eka.ru. Делают всё - от сайта-визитки до портала.

    Интересуетесь карточными играми? Обожаете играть в покер и интересуетесь последними новостями этой карточной игры? Тогда newspoker.ru - это то, что Вам необходимо. Все новости покера на одном сайте.
    --------------------------------

    Related posts:

    1. Ribbon Controls шаг за шагом. Шаг 1 – визуальная разработка интерфейса.
    2. Ribbon Controls шаг за шагом. Шаг 2 – дополнительные элементы интерфейса
    3. Компоненты Ribbon в Delphi. Возможности, проблемы, будущее.

    Автор Vlad в 2:02 am

    Метки: , , ,

2 Comments

WP_Cloudy
  • bambarmia пишет:

    Vlad, ОГРОМНОЕ спасибо, что не остались равнодушным к моему вопросу и разродились целой статьей в ответ, читал взахлёб, а когда дошел до “я полез копаться в модулях Ribbon” чуть не обоготворил автора))) но жаль что нашёлся только “костыль”, хотя, для подсказок к элементам галереи, мне так даже и костыля пока найти не удалось, равно как и для элементов из RibbonApplicationMenuBar (((
    // кстати, в дополнение, про “кренделя” – изготавливая подсказку для самой кнопки RibbonApplicationMenuBar тоже приходится танцевать с бубном, назначая ей отдельный Action и отдельно настраивая ScreenTips среди свойств Ribbon’a

  • Vlad пишет:

    Всегда рад помочь, тем более земляку-Сибиряку :) В принципе Ribbon пока остается с большим количеством недоработок, которые тянутся с Delphi 2009. Это мы ещё только подбираемся к самой “засаде” :) Ещё не касались MIDI-приложений. Зарубежные други по-тихоньку скулят, говорят там баг на баге. Сам пока не проверял – только более менее разобрался со скинами к риббону.

Ваш ответ

Внимание: Все комментарии модерируются, и это может вызвать задержку их публикации. Отправлять комментарий заново не требуется.

Пожалуйста, заключайте исходный код в тэги [code][/code].