Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Изменение цвета Group-box и Radio Group в Delphi 2006 с помощью XPManifest

Delphi , Компоненты и Классы , TGroupBox

Изменение цвета Group-box и Radio Group в Delphi 2006 с помощью XPManifest

При работе с Delphi 2006 пользователи могут столкнуться с проблемой изменения цвета Group-box и Radio Group captions, так как они всегда отображаются в синем цвете. Однако, если в проекте присутствует XPManifest, это можно изменить, переопределив метод Paint TGroupBox.

Подтвержденный ответ заключается в том, что переопределение метода Paint TGroupBox является единственным способом изменить цвет Group-box и Radio Group captions в Delphi 2006 с помощью XPManifest. Ниже приведен пример кода, который использует класс Interposer для достижения этой цели:

type
  TGroupBox = class(StdCtrls.TGroupBox) // объявить это перед определением формы
  public
    procedure Paint; override;
  end;

uses
  Themes;

{ TGroupBox }
procedure TGroupBox.Paint;
var
  H: Integer;
  R: TRect;
  Flags: Longint;
  CaptionRect,
  OuterRect: TRect;
  Size: TSize;
  Box: TThemedButton;
  Details: TThemedElementDetails;
begin
  with Canvas do
  begin
    Font := Self.Font;

    if ThemeServices.ThemesEnabled then // если функция ThemeControl не существует в Delphi 2006, используйте ThemeServices.ThemesEnabled
    begin
      if Text <> '' then
      begin
        GetTextExtentPoint32(Handle, PChar(Text), Length(Text), Size);
        CaptionRect := Rect(0, 0, Size.cx, Size.cy);
        if not UseRightToLeftAlignment then
          OffsetRect(CaptionRect, 8, 0)
        else
          OffsetRect(CaptionRect, Width - 8 - CaptionRect.Right, 0);
      end
      else
        CaptionRect := Rect(0, 0, 0, 0);

      OuterRect := ClientRect;
      OuterRect.Top := (CaptionRect.Bottom - CaptionRect.Top) div 2;
      with CaptionRect do
        ExcludeClipRect(Handle, Left, Top, Right, Bottom);
      if Enabled then
        Box := tbGroupBoxNormal
      else
        Box := tbGroupBoxDisabled;
      Details := ThemeServices.GetElementDetails(Box);
      // Нарисуйте оформленный контур
      ThemeServices.DrawElement(Handle, Details, OuterRect);
      SelectClipRgn(Handle, 0);
      if Text <> '' then
      begin
        H := TextHeight('0');
        if not UseRightToLeftAlignment then
          R := Rect(8, 0, 0, H)
        else
          R := Rect(R.Right - Canvas.TextWidth(Text) - 8, 0, 0, H);
        Flags := DrawTextBiDiModeFlags(DT_SINGLELINE);
        //Теперь используйте Windows.DrawText
        DrawText(Handle, PChar(Text), Length(Text), R, Flags or DT_CALCRECT);
        Brush.Color := Color; // фоновый цвет подписи
        Font.Color := clRed; // цвет подписи.
        DrawText(Handle, PChar(Text), Length(Text), R, Flags);
      end;
    end
    else
      inherited; // если элемент не оформлен, используйте исходный метод Paint.
  end;
end;

Примечания:

  • Если функция ThemeControl не найдена, используйте ThemeServices.ThemesEnabled вместо ThemeControl(Self).
  • Чтобы фон текста был таким же, как фон формы (который является изображением в данном случае), установите свойство Color TGroupBox на тот же цвет, что и у формы. Если это не работает, можно установить цвет фона в этой строке кода: Brush.Color := Color; (прочтите комментарии в коде).

Альтернативный ответ:

В Delphi 2006 нет встроенной поддержки изменения цвета Group-box и Radio Group captions с помощью XPManifest. Однако, переопределив метод Paint TGroupBox, можно добиться желаемого результата.

Создано по материалам из источника по ссылке.

При работе с Delphi 2006 для изменения цвета Group-box и Radio Group captions с помощью XPManifest необходимо переопределить метод Paint TGroupBox.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TGroupBox ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 13:19:21/0.0053060054779053/1