2 авг. 2013 г.

Windows Ribbon Framework. Интеграция с Delphi

Перевод. Оригинал Integrating with Delphi

Теперь, когда мы создали "ленту", настало время добавить ее в наше Delphi-приложение. Вы можете создать новое приложение, используя это руководство, или посмотреть пример приложения TextPad, входящего в состав библиотеки.


Создание нового Delphi-проекта


Чтобы создать новый проект, использующий Windows Ribbon Framework:

  1. Убедитесь, что проект вашей "ленты" полностью рабочий (соберите проект (F9) и проверьте, как он работает в окне предварительного просмотра (Ctrl+F9)).
  2. В среде разработки Delphi создайте новый проект VCL Forms Application. Сохраните его в каталог, в который ранее сохранили проект "ленты". В нашем случае, мы сохранили проект "ленты" в каталог "C:\Projects\TextPad\Ribbon", следовательно, проект приложения мы сохраним в "C:\Projects\TextPad". 
  3. Если вы до сих пор не указали среде разработки путь к библиотеке, самое время это сделать. Для этого, используя "Project | Options | Delphi Compiler | Search Path" укажите путь к каталогу, в который вы распаковали загруженный архив с библиотекой.
  4. Подготовьте ваше приложение к работе с высоким разрешением экрана, чтобы оно выглядело лучше, когда пользователь увеличит разрешение экрана в Windows. В результате текст и изображения не будет размытыми. Для этого:

    1. Откройте диалог настроек проекта ("Project | Options").
    2. Выберите раздел Application.
    3. Отключите "флажок" "Enable runtime themes". Не бойтесь, приложение по-прежнему будет использовать темы оформления Windows.
    4. Выберите "Project | Add to project...".
    5. В диалоге открытия файла укажите тип файла "Resource file (*.rc)".
    6. Укажите файл "UIRibbon.rc" из каталога Lib библиотеки.

  5. Основная форма приложения должна использовать модули UIRibbon, UIRibbonForm и UIRibbonCommands. Добавьте эти модули в объявление uses модуля формы.
  6. Замените родительский класс основной формы на TUIRibbonForm.
  7. В секции implementation добавьте ресурс, который был создан Ribbon Designer. В нашем примере это файл RibbonMarkup.res в подкаталоге Ribbon проекта.

Исходный код основной формы будет выглядеть так:

unit FMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, UIRibbon, UIRibbonForm, UIRibbonCommands;

type
  TFormMain = class(TUIRibbonForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FormMain: TFormMain;

implementation

{$R *.dfm}
{$R 'Ribbon\RibbonMarkup.res'}

end.

Теперь скомпилируйте и запустите приложение.Если вы все сделали правильно, "лента" будет размещена в верхней части формы:


"Ленточная" форма


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

  • RibbonResourceName: возвращает имя ресурса "ленты" в файле ресурсов. Если вы использовали Ribbon Designer для проектирования "ленты", то у вас нет необходимости переопределять этот метод. Если вы использовали Microsoft Ribbon Compiler и указали произвольное имя ресурса, то вы должны переопределить метод, чтобы он вернул верное имя ресурса.
  • RibbonInstance: дескриптор файла, из которого следует загрузить ресурс "ленты". Если ресурс содержится в исполняемом файле приложения, то вы можете не переопределять этот метод. Однако, если ресурс содержится в динамической библиотеке, то вам необходимо будет вернуть дескриптор этой библиотеки. Убедитесь, что этот дескриптор будет существовать в течение всего времени выполнения программы (библиотека не будет выгружена ранее, чем приложения закончит свою работу).
  • RibbonLoaded: метод вызывается, когда "лента" загружена из ресурса. Здесь вы можете выполнить код инициализации, который зависит от "ленты".
  • CommandCreated: метод вызывается каждый раз, когда фреймворк создает команду. Вы можете переопределить этот метод для настройки команды или для установки события, которое будет вызываться при выполнении команды. Мы обсудим это в следующем разделе этого руководства.

TUIRibbon


Кроме описанных выше методов форма имеет свойство-объект Ribbon типа TUIRibbon, которое обеспечивает доступ к "ленте". Объект обладает следующими свойствами:

  • Available: доступен ли фреймворк в текущей системе. Если нет (приложение запущено в старой версии Windows), то вы должны обеспечить альтернативный пользовательский интерфейс.
  • Height: текущая высота "ленты". Вы можете использовать это свойство для размещения других элементов управления на форме. Однако мы советуем вам просто поместить панель (TPanel) на форму и присвоить свойству Align панели значение alClient. После чего разместите элементы управления на этой панели.
  • Visible: видна ли "лента" на форме. Вы можете скрыть "ленту", присвоив этому свойству значение False.
  • Minimized: свернута ли "лента". Если "лента" свернута, то на ней отображаются только заголовки вкладок. Пользователь также может свернуть "ленту" двойным кликом по вкладке.
  • QuickAccessToolbarPosition: расположение панели быстрого доступа (над или под "лентой").
  • BackgroundColor: цвет "ленты". Вы можете использовать это свойство, чтобы указать другую цветовую схему.
  • HighlightColor: цвет подсветки кнопок, над которыми в текущий момент находится указатель "мыши". 
  • TextColor: цвет текста на "ленте".
  • BackgroundHsbColor, HighlightHsbColor, TextHsbColor: аналогичны предыдущим трем свойствам, но позволяют указывать цвета в формате HSB (оттенок, насыщенность, яркость).
  • Framework: указатель на низкоуровневый интерфейс IUIFramework для быстрого доступа к Ribbon API. Чаще всего вам это свойство не важно, если вы используете библиотеку классов Delphi Ribbon.

В примере приложения TextPad свойство BackgroundColor используется, чтобы сделать форму немного темнее "ленты":

procedure TFormMain.RibbonLoaded;
begin
  inherited;
  Color := ColorAdjustLuma(Ribbon.BackgroundColor, -25, False);
end;

Для этого мы переопределили метод RibbonLoaded, потому что, как мы знаем, с этого момента "лента" загружена и ее свойства доступны.

Класс TUIRibbon также содержит несколько методов, которые могут быть интересны:

  • Load: загружает "ленту" из ресурса. Вам не нужно вызывать этот метод, если форма приложения наследует от TUIRibbonForm.
  • ShowContextPopup: показать контекстное окно, которое вы определили для "ленты". Вы должны передать идентификатор команды, соответствующей этому окну, и, если вы хотите, чтобы окно появилось не рядом с указателем "мыши", координаты контекстного окна.
  • SetApplicationModes: как уже говорилось ранее, фреймворк позволяет указать до 32 режимов приложения. Передайте в метод массив целочисленных значений, чтобы включить эти режимы. Например, чтобы перевести наш пример в обычный режим и показать вкладки Home (Главная) и View (Вид), вы должны выполнить вызов SetApplicationModes([0]). Чтобы показать вкладку Print preview (Предварительный просмотр), нужно вызвать SetApplicationModes([1]). Если же по каким-то причинам вы захотите показать все три вкладки, выполните вызов SetApplicationModes([0,1]).
  • SaveSettings: метод позволяет сохранить пользовательские настройки отображения "ленты" (состояние "ленты" (свернута или скрыта), положение панели быстрого доступа и элементы, доступные в ней) в поток или файл.
  • LoadSettings: метод позволяет загрузить ранее сохраненные пользовательские настройки отображения "ленты".

Теперь  мы подошли к основной части нашего приложения и научимся тому, как выполнять команды "ленты".

Далее: Выполнение команд

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

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

Примечание. Отправлять комментарии могут только участники этого блога.