Подтвердить что ты не робот

Как отключить стили VCL в Delphi

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

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

4b9b3361

Ответ 1

Стили 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 Part II.

Ответ 2

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