Как включить цветовые схемы для всего приложения? - PullRequest
2 голосов
/ 03 января 2012

Я хотел бы применить цветовые схемы к моему заявлению.Это делается путем установки для всех компонентов ParentColor равных true, а также ParentBackground и ParentFont.Когда я меняю цвет формы, все меняется.Есть исключение: панели инструментов и кнопки не меняются.Можно ли поменять их цветом формы или я должен реализовать это отдельно?

То же самое относится и к цветам шрифта, но это немного страннее.Когда я изменяю цвет шрифта формы, цвет шрифта заголовка группового блока не изменяется, но заголовок надписей надписей (также внутри группового блока) меняется в полном порядке.Собственные цвета - это путь (изменить цвет формы, установить для всех компонентов ParentColor) или есть лучшие способы для достижения этой цели?

1 Ответ

1 голос
/ 04 января 2012

Один из способов добиться этого - использовать interfaces.

Это немного (ручная) работа, но если вы хотите сделать это простым способом, вы можете просто определить интерфейс и убедиться, что все ваши формы реализуют этот интерфейс.

например:

type ITheme = interface
  procedure SetTheme(const AColor : TColor);
end;

тогда в каждой из форм вы можете реализовать этот интерфейс.

Таким образом, чтобы изменить все цвета ваших форм, вам просто нужно вызвать 1 функцию:

procedure SetGlobalTheme(const AColor : TColor);
var Intf : ITheme;
begin
  for i:=0 to screen.Formcount-1 do
  begin
    if Supports(Screen.Forms[i],ITheme,intf) then
      intf.SetTheme(AColor);
  end;
end;

Используя этот метод, вы получаете полный контроль над каждым цветом компонентов, хотя нужно еще немного кодировать. Альтернативой является использование предложения Дэвида о стилях VCL (если ваша IDE поддерживает его)

...