Как отключить стили VCL в Delphi - PullRequest
19 голосов
/ 22 декабря 2011

Я использую новую систему стилей VCL в Delphi XE2.Это прекрасно работает, но я хочу отключить его для конкретной формы, на которой есть несколько изображений (форма всплеска / о).Проблема в том, что я не могу найти свойство формы, которое связывает его с определенным стилем, и поэтому не могу отключить его только для этой формы.Кажется, существует только глобальный класс TStyleManager, который выглядит статичным.

Имея это в виду, единственный способ добиться этого - вызвать TStyleManager.TrySetStyle('Windows'), показать форму и затем вернуть ее обратно.к оригинальному стилю, когда форма закрыта?

Ответы [ 3 ]

25 голосов
/ 22 декабря 2011

Стили VCL применяют обложку ко всем приложениям VCL, но вы можете отключить Стили VCL для определенного класса управления. Поэтому, если вы хотите отключить стили VCL для конкретной формы, вы можете использовать функцию RegisterStyleHook, передающую тип формы, и класс TStyleHook, который является пустым классом ловушек стиля.

Эта строка кода отключит стили VCL во всех формах типа TFormChild:

TStyleManager.Engine.RegisterStyleHook(TFormChild, TStyleHook);

Теперь, если вы запустите этот код для всех элементов управления формы, TFormChild по-прежнему будет рисоваться с помощью стилей VCL, поэтому для исправления этого необходимо отключить стандартную ловушку стиля для всех элементов управления формы, используя такой прием, как этот

unit uChild;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TButton   = class(Vcl.StdCtrls.TButton); //This declaration is only for disabling the TButton of this form
  TFormChild = class(TForm)
    Button1: TButton;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

и теперь вы можете отключить VCL Стили TButton этой формы, а также с этим кодом

TStyleManager.Engine.RegisterStyleHook(uChild.TButton, TStyleHook);

Если вам нужна дополнительная информация об использовании класса TStyleHook, ознакомьтесь со статьей Изучение Delphi XE2 - VCL Styles Part II .

1 голос
/ 05 марта 2019

Удаление (снятие отметки) с опции seClient из свойства StyleElements формы Splash помогло мне (Delphi XE10).

0 голосов
/ 22 декабря 2011

Самый простой способ - поместить Splash-форму в отдельную DLL. Таким образом, стайлер не будет касаться этого.

...