26 мая 2020

Полный контроль над заголовком окна программы в Delphi 10.4

    Одно из интересных новшеств Delphi 10.4 Sydney – это возможность настраивать заголовок окон программы. Теперь легко можно изменить высоту заголовка, перемесить название окна в центр заголовка, а, что еще полезнее – разместить в заголовке окна свои VCL-контролы, как это делает сама Delphi или другие программы (например, Office, Explorer, Google Chrome...).
    Сделать это очень просто. В палитре компонент находим контрол TTitleBarPanel, помещаем его на форму и указываем его в свойстве формы CustomTitleBar.Control. Все – теперь вы можете управлять заголовком окна. Например, на наш TTitleBarPanel (на картинке ниже это панель с системными кнопками под заголовком формы) поместим TEdit:
Положением этого контрола TEdit можно управлять двумя способами:
  1. В design time. Так как TTitleBarPanel является обычным VCL-контролом, то для контрола который поместили на него можно установить обычные свойства позиционирования (Align, Anchors…). Например, чтобы контрол всегда находился справа от системных кнопок, перетащите его в нужное положение, а в свойстве Anchors установите akLeft = False и akRight = True.
  2. В run time. Добавьте форме обработчик события OnShow или OnResize:
    procedure TForm1.FormShow(Sender: TObject);
    begin
      Edit1.Left := CustomTitleBar.CaptionButtonsRect.Left - Edit1.Width - 8;
    end;
Рассмотрим основные свойства, которые можно установить для заголовка окна:
  • CaptionAlignment – позиция текста заголовка (Talignment, по умолчанию taLeftJustify);
  • Enabled – включает/выключает использование пользовательских настроек заголовка;
  • Height – высота строки заголовка в пикселях (чтобы эта настройка сработала необходимо свойству TTitleBar.SystemHeight присвоить False);
  • ShowCaption – включает/выключает отображением текста заголовка;
  • ShowIcon – включает/выключает отображением иконки формы в левой части строки заголовка;
  • BackgroundColor, ForegroundColor, InactiveBackgroundColor и InactiveForegroundColor – цвета для рисования заголовка (чтобы эти настройки сработали необходимо свойству TTitleBar.SystemColors присвоить False);
  • ButtonBackgroundColor, ButtonForegroundColor, ButtonHoverBackgroundColor, ButtonHoverForegroundColor, ButtonInactiveBackgroundColor, ButtonInactiveForegroundColor, ButtonPressedBackgroundColor и ButtonPressedForegroundColor - цвета для рисования кнопок заголовка (чтобы эти настройки сработали необходимо свойству TTitleBar.SystemColors присвоить False);
  • IconRect, FrameRect, ClientRect и CaptionButtonsRect – свойства определяющие границы отрисовки элементов заголовка (можно использовать для расчета позиций своих контролов на заголовке или в событии TTitleBarPanel.OnPaint);
  • CustomButtons – коллекция кнопок, которые располагаются слева от стандартных кнопок Minimize, Maximize и Close. Каждая кнопка (TCaptionButtonItem) обладает своим свойством ButtonType – тип кнопки (Close, Minimize, Restore, space, или custom) и стандартными для любых кнопок свойствами и событиями (Enabled, Hint, Visible, Width, OnClick, OnPaint).
    TTitleBarPanel работает в Windows 7, Windows 8 и Windows 10. Для его работы необходимо, что бы для визуализации окон использовался Desktop Window Manager (DWM). Например, отключение Aero в Windows 7 приведет к его неработоспособности. Для проверки работает ли кастомный заголовок окна используется свойство TForm.CustomTitleBar.Supported.

    TTitleBarPanel – это очередной пример простоты и элегантности разработки приложений с использованием Delphi.

2 комментария:

  1. Анонимный29 ноября, 2023 23:00

    Картинки не подгружаются, а жаль (

    ОтветитьУдалить
    Ответы
    1. Таже проблема у человека: https://it-blackcat.blogspot.com/2019/09/new-xlsx-files-generator-in-ehlib.html?showComment=1700061101752#c4253525581132291733
      А, что картинки с blogspot из рф не грузятся без VPN?

      Удалить