5 авг. 2013 г.

Windows Ribbon Framework. Другие типы команд

Перевод. Оригинал Other Command Types

В предыдущем разделе мы рассмотрели тип TUICommandAction, здесь же мы познакомимся с другими типами команд "ленты".


TUICommandBoolean


Этот тип команд применяется для переключателей и "флажков". Тип имеет дополнительное свойство Checked - установлен ли "флажок" или нет. Также имеется свойство-событие OnToggle, которое выполняется, когда пользователь кликнул по переключателю или установил "флажок". Например, четыре кнопки выравнивания текста являются взаимоисключающими переключателями. Они используют общий обработчик события OnToggle:

procedure TFormMain.AlignToggle(const Args: TUICommandBooleanEventArgs);
var
  ParaFormat: TParaFormat2;
begin
  if (Args.Checked) then
  begin
    ParaFormat := FRichEditEx.ParaFormat;
    case Args.Command.CommandId of
      CmdAlignLeft:
        ParaFormat.wAlignment := PFA_LEFT;
      CmdAlignCenter:
        ParaFormat.wAlignment := PFA_CENTER;
      CmdAlignRight:
        ParaFormat.wAlignment := PFA_RIGHT;
      CmdAlignJustify:
        ParaFormat.wAlignment := PFA_JUSTIFY;
    end;
    ParaFormat.dwMask := PFM_ALIGNMENT;
    FRichEditEx.ParaFormat := ParaFormat;
  end;
  UpdateRibbonControls; { Update Checked state of alignment buttons }
end;

Здесь мы используем поля Args.Checked и Args.Command, чтобы определить, какой вид выравнивания был выбран. Соответственно мы изменяем выравнивание текста в фрагменте документа. Здесь я не углубляюсь в детали работы с элементом управления Rich Edit, так как это руководство о работе с Windows Ribbon Framework, а не о том, как создать собственный текстовый редактор. Для этого обратитесь к примеру приложения TextPad из библиотеки.

В последней строке метода выполняется вызов UpdateRibbonControls. Мы должны обновить свойство Checked всех четырех кнопок выравнивания текста. Когда текст фрагмента документа выравнен по левому краю, и пользователь нажал кнопку выравнивания текста по центру, нам необходимо отключить первую из указанных кнопок и включить вторую. В фреймворке не используется концепция взаимоисключающих переключателей, поэтому он не переключит кнопки сам. Метод UpdateRibbonControls также используется для установки свойства Enabled для команд, доступных в определенном контексте. Например, кнопка Paste (Вставить) должна быть доступна только если буфер обмена содержит некоторый текст. Частичная реализация метода тогда будет такой:

procedure TFormMain.UpdateRibbonControls;
var
  ParaFormat: TParaFormat2;
begin
  ParaFormat := FRichEditEx.ParaFormat;

  if Assigned(FCmdPaste) then
    FCmdPaste.Enabled := FRichEditEx.CanPaste;

  if Assigned(FCmdAlignLeft) then
    FCmdAlignLeft.Checked := (ParaFormat.wAlignment = PFA_LEFT);

  if Assigned(FCmdAlignCenter) then
    FCmdAlignCenter.Checked := (ParaFormat.wAlignment = PFA_CENTER);

  if Assigned(FCmdAlignRight) then
    FCmdAlignRight.Checked := (ParaFormat.wAlignment = PFA_RIGHT);

  if Assigned(FCmdAlignJustify) then
    FCmdAlignJustify.Checked := (ParaFormat.wAlignment = PFA_JUSTIFY);
end;

Проверяйте, существует ли команда (не равна nil), перед изменением ее свойств. Это необходимо, так как не каждая команда будет существовать все время выполнения приложения (помните, что команда создается только тогда, когда в первый раз идет обращение к ней). 

TUICommandFont


Этот тип команд используется только для управления шрифтом. Он содержит свойство Font, хранящее настройки текущего шрифта. Это свойство типа TUIFont, аналогичного TFont, но обладающего бОльшим набором свойств. Класс TUICommandFont также имеет свойство-событие OnChanged, которое выполняется когда пользователь изменяет текущие параметры шрифта. Параметр Args.Font хранит параметры выбранного шрифта.

procedure TFormMain.FontChanged(const Args: TUICommandFontEventArgs);
var
  CharFormat: TCharFormat2;
begin
  Args.Font.AssignTo(CharFormat);
  FRichEditEx.CharFormat := CharFormat;
end;

Свойства объекта TUIFont могут быть присвоены записи TCharFormat2, которая используется элементом управления Rich Edit для изменения параметров шрифта. Это позволяет значительно упростить работу с элементом управления шрифтом. Вам не придется беспокоиться об индивидуальных параметрах шрифта (имя шрифта, размер, цвет, эффекты и т.д.), хотя вы можете обращаться к ним, когда захотите.

TUICommandDecimal


Этот тип команд применяется исключительно для счетчиков и обладает следующими свойствами:

  • Value: текущее значение (типа Double).
  • MinValue, MaxValue: минимальное и максимальное значения, которые может принимать элемент управления.
  • Increment: значение, на которое увеличивается или уменьшается значение счетчика, когда пользователь нажимает кнопки в правой части этого элемента.
  • DecimalPlaces: количество выводимых знаков после запятой.
  • RepresentativeString: эта строка используется фреймворком для получения ширины элемента управления. Строка нигде не отображается и может содержать любые символы. Используется только для расчета ширины элемента управления: чем длиннее строка, тем он шире.
  • FormatString: строка (например, единица измерения), которая выводится справа от значения счетчика.

Класс также содержит свойство-событие OnChange, которое возникает, когда пользователь изменяет значение. 

TUICommandColorAnchor


Этот тип команд предназначен для цветовых палитр. Вот его свойства:

  • ColorType: тип выбранного цвета (ctNoColor, ctAutomatic или ctRgb). Если свойство равно ctRgb, вы можете использовать свойство Color для получения текущего цвета.
  • Color: текущий выбранный цвет, если ColorType=ctRgb; или clNone, если ColorType=ctNoColor; или clDefault, если ColorType=ctAutomatic. При изменении свойства ColorType будет изменяться соответственно.
  • StandardColors: массив значений цветов, который будет использован в секции Стандартные разворачивающегося окна. Используется только если ColorTemplate=Standard colors.
  • StandardColorTooltips: массив всплывающих подсказок ячеек стандартных цветов.
  • StandardColorsCategoryLabel: заголовок секции стандратных цветов.
  • ThemeColors: массив цветов секции Цвета темы. Может быть использован только если ColorTemplate=Theme colors.
  • ThemeColorTooltips: массив всплывающих подсказок ячеек цветов темы.
  • ThemeColorsCategoryLabel: заголовок секции цветов темы.
  • RecentColorsCategoryLabel: заголовок секции ранее использованных цветов.
  • AutomaticColorLabel: заголовок кнопки "Авто".
  • NoColorLabel: заголовок кнопки "Нет цвета".
  • MoreColorsLabel: заголовок кнопки "Другие цвета...".

Также класс содержит свойство-событие OnExecute, возникающее, когда пользователь выбирает цвет.

TUICommandRecentItems


Применяется для списка последних открытых документов  в меню приложения. Имеет единственное дополнительное свойство-коллекцию Items (тип TUICollection). Для заполнения списка добавьте в коллекцию объект типа TUIRecentItem (или его наследник). Класс TUIRecentItem обладает следующими свойствами:

  • LabelText: заголовок элемента списка (например, имя файла документа).
  • Description: описание документа, которое будет отображаться как всплывающая подсказка при наведении указателя "мыши" на элемент списка (например, полный путь к файлу).
  • Pinned: признак того, что элемент списка прикреплен к меню приложения (если разрешено закреплять элементы списка в меню приложения).

После добавления элементов в коллекцию не нужно самостоятельно освобождать память, занятую ее элементами - за это отвечает сама коллекция. В следующем разделе мы расскажем о  работе с коллекциями чуть больше.

Класс TUICommandRecentItems также имеет свойство-событие OnSelect, возникающее при выборе пользователем элемента списка.

TUICommandContext


Команда применяется для контекстных групп вкладок (таких как "Работа с таблицами" в Microsoft Word, когда вы правите таблицу в документе). Обладает свойством Availability перечислимого типа, которое определяет, когда и как контекстные вкладки должны быть доступны:

  • caNotAvailable: группа вкладок должна быть скрыта.
  • caAvailable: группа вкладок должна показываться, но не должна быть активной.
  • caActive: группа вкладок должна показываться и быть активной.

Для команды не определены какие бы то ни было события.

Завершим мы руководство рассмотрением работы с галереями.

Далее: Работа с галереями

Комментариев нет:

Отправить комментарий