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

Как отключать стили XP для отдельных контролов?

Delphi , ОС и Железо , Windows

Темы должны быть включены и манифест лежать на форме:

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

Бессконечная борьба за отключение темы XP для конкретных контролов!

В этом случае вы используете компонент TXPManifest для включения файла manifests XP в ваш проект. Это хороший подход, поскольку позволяет легко переключаться между темами Windows.

Чтобы отключить тему XP для конкретных контролов, можно использовать функцию SetWindowTheme из библиотеки UXTheme (uxtheme.dll). Однако, эта функция требует handle окна (HWND) в качестве первого параметра.

В вашем коде вы уже используете эту функцию в процедуре Unload2Themes, чтобы отключить тему XP для определенных кнопок. Проблема заключается в том, что вы передаете handles этих кнопок, а также handle формы в эту функцию.

Чтобы достичь желаемого результата, вам нужно настроить тему для каждого контрола индивидуально. К сожалению, нет простой способа сделать это с помощью компонента TXPManifest alone. Вам придется вручную отключать тему XP для каждого контрола, который требует этого.

Вот обновленная версия вашего кода:

procedure TForm1.FormCreate(Sender: TObject);
begin
  // Отключить тему XP для кнопок Button4 и Button5
  SetWindowTheme(Button4.Handle, '', '');
  SetWindowTheme(Button5.Handle, '', '');

  // Отправить пользовательское сообщение для отрузки тем
  PostMessage(Handle, WM_USER + 1, 0, 0);
end;

В этом примере мы отключаем тему XP для кнопок Button4 и Button5 в процедуре FormCreate формы. Это обеспечивает, что эти контролы не наследуют тему от формы или других контролов.

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

Как альтернативное решение, вы можете рассмотреть следующие подходы:

  1. Создать custom-темы для каждого контрола, который требует конкретной настройки.
  2. Использовать third-party-библиотеку или компонент, который предоставляет болееadvanced-possibilities для управления темой.
  3. Реализовать custom-рисунок, чтобы перекрыть default-Windows-тему для конкретных контролов.

Выберите подход, который лучше всего подходит к вашим потребностям и требованиям.

В статье описывается способ отключения стиля XP для отдельных контролов в Delphi с помощью класса TXPManifest и процедуры SetWindowTheme, позволяющей изменять тему для конкретного окна или элемента управления.


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

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




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


:: Главная :: Windows ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 00:44:42/0.0031890869140625/0