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

Не устанавливается цвет панели

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

Code:

unit Unit1;
 
interface
 
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, XPMan;
 
type
TForm1 = class(TForm)
   Panel1: TPanel;
   XPManifest: TXPManifest;
   procedure FormCreate(Sender: TObject);
end;
 
var
Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
uses
Themes;
 
type
TMyPanel = class(TPanel)
public
   constructor Create(AOwner: TComponent); override;
end;
 
{ TMyPanel }
 
constructor TMyPanel.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
 
if ThemeServices.ThemesEnabled then
   ControlStyle := ControlStyle - [csParentBackground] + [csOpaque];
end;
 
procedure TForm1.FormCreate(Sender: TObject);
var
R: TRect;
begin
with TMyPanel.Create(Self) do
begin
   Parent := Self;
   Color := clGreen;
   R := Panel1.BoundsRect;
   R.Left := R.Left + 300;
   R.Right := R.Right + 300;
   BoundsRect := R;
end;
end;
 
end.

Автор: Smike

Взято из http://forum.sources.ru

Можно отключать стили XP и для отдельных контролов (темы должны быть включены и манифест лежать на форме):

Code:

unit Unit1;
 
interface
 
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, ComCtrls, XPMan;
 
 
type
TForm1 = class(TForm)
   Button1: TButton;
   Button2: TButton;
   Button3: TButton;
   Button4: TButton;
   Button5: TButton;
   XPManifest1: TXPManifest;
   procedure FormCreate(Sender: TObject);
private
   procedure Unload2Themes(var M:TMSG); message WM_USER+1;
public
   { Public declarations }
end;
 
var
Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
function SetWindowTheme(hwnd: HWND; pszSubAppName: LPCWSTR;
                       pszSubIdList: LPCWSTR): HRESULT; stdcall;  external 'uxtheme.dll';
 
 
procedure TForm1.Unload2Themes(var M: TMSG);
begin
SetWindowTheme(Button4.Handle, ' ', ' ');
SetWindowTheme(Button5.Handle, ' ', ' ');
SetWindowTheme(Form1.Handle, ' ', ' ');
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
PostMessage(Handle,WM_USER+1,0,0)
end;
 
end.

Автор: Krid

Взято из http://forum.sources.ru

Бессконечная борьба с обработкой темы в Delphi!

В первом коде, автор пытается создать пользовательский панель с зеленым фоном, используя класс TMyPanel, который наследуется от TPanel. Однако, проблема заключается в том, что свойство ControlStyle не настроено корректно.

В обработчике события FormCreate формы TForm1 создается новый экземпляр TMyPanel и его свойства настраиваются. Однако, когда панель отображается, она будет наследовать стандартный вид темы, потому что свойство ControlStyle не правильно переопределяется для исключения рисования фона родительского элемента.

Чтобы решить эту проблему, можно настроить свойство ControlStyle явно в конструкторе TMyPanel, как показано ниже:

constructor TMyPanel.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  ControlStyle := ControlStyle - [csParentBackground] + [csOpaque];
end;

Это обеспечит, что фон панели будет рисоваться с указанным цветом (в этом случае clGreen) вместо наследования стандартного вида темы.

Второй код-снippet автор пытается отключить тему XP для конкретных контролов, используя процедуру Unload2Themes. Это подход несколько хакерский и может не работать как ожидалось в всех случаях.

Идея этого кода заключается в отправке пользовательского сообщения (WM_USER + 1) в процедуру окна формы, которая затем вызывает процедуру Unload2Themes. Эта процедура настраивает тему для конкретных контролов с помощью функции SetWindowTheme из библиотеки uxtheme.dll.

Однако, этот подход имеет несколько ограничений:

  • Он требует, чтобы библиотека uxtheme.dll была установленной и доступной на системе.
  • Он может не работать правильно, если контролы размещены в контейнерном элементе (например, панели или групповой ячейке).
  • Это немного инвазивный подход, потому что он изменяет настройки темы для конкретных контролов.

В целом, я бы рекомендовал использовать первый подход (переопределение свойства ControlStyle) для достижения желаемого вида для вашего пользовательского панели. Если вам нужно более тонкое управление темой, вы можете хотеть рассмотреть использование третьей-сторонней библиотеки или создать свой собственный движок темы с нуля.

Статья рассказывает о способах отключения стиля XP для отдельных контролов на форме в Delphi.


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

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




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


:: Главная :: TPanel ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-06-15 23:03:59/0.00370192527771/0