![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Отследить изменение схемы оформления Window [D7, Win95/98, WinXP]
Le][a © (2004-04-15 18:37:00)Добрый вечер, Мастера! Вопрос такой: какое сообщение нужно ловить, чтобы отследить изменение схемы оформления Windows? (это которая в свойствах экрана. Всякие там "Баклажан", "Ель", "Кирпичная" и пр. Или "Серебристая", "Оливковая", "Синяя" - это если в WinXp). Заранее благодарен.
Yanis (2004-04-17 00:12:00) [1]to [13],[19]
Мож вот так:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
private
{ Private declarations }
procedure WMSysColorChange (var Message: TMessage);
message WM_SYSCOLORCHANGE;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.WMSysColorChange(var Message: TMessage);
begin
//строчки местами поменять.
//сначало надо чтобы система с сообщением разобралась
Inherited;
//а теперь и наша прога на "подсосе" работать начинает :)
Caption := 'qwe';
end;
end.
Le][a (2004-04-16 22:15:00) [2]Все. Проблема решена методом предложенным Rouse_ и дополненным Игорем Шевченко. Спасибо вам. Также спасибо Dimaxx за участие и VMcL за WM_SETTINGCHANGE. Вот. ;о) Обсуждение можно закрыть.
Игорь Шевченко (2004-04-16 21:45:00) [3]
> Видимо вся проблема и состоит в этом ShowMessage.
Попробуй Windows.MessageBox
Le][a (2004-04-16 21:36:00) [4]> Rouse_ © (16.04.04 20:05) [17]
> Именно в моем варианте виснет?
Дико извиняюсь, Саш. Висло когда я писал такую конструкцию:
procedure TForm1.WMSysColorChange(var Message: TMessage);
begin
ShowMessage('qwe');
Inherited;
end;
Видимо вся проблема и состоит в этом ShowMessage. Как же его отобразить?
Rouse_ (2004-04-16 20:05:00) [5]В смысле если б не проверил, не отбравил бы :)
Rouse_ (2004-04-16 20:05:00) [6]> [14] Le][a (16.04.04 10:31)
Именно в моем варианте виснет?
У меня 98, без проверки я не отправлял код...
Игорь Шевченко (2004-04-16 17:41:00) [7]Le][a (16.04.04 10:45)
Могу посоветовать только полазить отладчиком, с включенной опцией Use Debug DCU и указанием пути к файлам VCL в опциях проекта.
У меня Win9x нету, помочь разобраться не смогу.
Le][a (2004-04-16 10:45:00) [8]MSDN:
WM_SYSCOLORCHANGE
The WM_SYSCOLORCHANGE message is sent to all top-level windows when a change is made to a system color setting.
Windows NT/2000/XP: Included in Windows NT 3.1 and later.
Windows 95/98/Me: Included in Windows 95 and later.
Никаких, как уже сказал Игорь Шевченко, отличительных особенностей обработки в 98 нет.
Le][a (2004-04-16 10:31:00) [9]> Rouse_ © (15.04.04 22:52) [13]
Система виснет.
Rouse_ (2004-04-15 22:52:00) [10]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
private
procedure WMSysColorChange (var Message: TMessage);
message WM_SYSCOLORCHANGE;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.WMSysColorChange(var Message: TMessage);
begin
Caption := 'qwe';
Inherited;
end;
end.
Dimaxx (2004-04-15 22:41:00) [11]Тьфу, это я про темы. Пардон!
Dimaxx (2004-04-15 22:37:00) [12]В смысле, под ХРюшей...
Dimaxx (2004-04-15 22:36:00) [13]Нифига! Ловить нужно WM_THEMECHANGED ($031A)!
Le][a (2004-04-15 22:31:00) [14]> Игорь Шевченко © (15.04.04 21:50) [8]
> Мой код, скопированный один в один тоже виснет ?
Да.
Игорь Шевченко (2004-04-15 21:50:00) [15][7] Le][a (15.04.04 21:41)
На Win9x не могу протестировать - нету их у меня. Судя по тому, что в документации не указано никакой отличительной особенности обработки этого сообщения под Win9x, проблема в чем-то другом. Мой код, скопированный один в один тоже виснет ?
Le][a (2004-04-15 21:41:00) [16]> Игорь Шевченко © (15.04.04 21:13) [6]
Win 98 стабильно виснет. После убиения Project1.exe схема меняется, работоспособность системы восстанавливается. А вот WM_SETTINGCHANGE обрабатывается без проблем. Что это может быть? Система?
Игорь Шевченко (2004-04-15 21:13:00) [17]
unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TfMain = class(TForm)
private
procedure WMSysColorChange (var Message: TMessage);
message WM_SYSCOLORCHANGE;
end;
var
fMain: TfMain;
implementation
{$R *.dfm}
{ TfMain }
procedure TfMain.WMSysColorChange(var Message: TMessage);
begin
inherited;
ShowMessage('A change is made to system color settings');
end;
end.
Сообщение появляется после смены схемы в панели управления.
Windows 2000
Le][a (2004-04-15 20:57:00) [18]> Игорь Шевченко © (15.04.04 20:39) [4]
Пишу то же самое, что и в [3], заменяя *SETTINGCHANGE на *SYSCOLORCHANGE - система виснет (Win 98).
Игорь Шевченко (2004-04-15 20:39:00) [19]скорее, WM_SYSCOLORCHANGE
Le][a (2004-04-15 20:35:00) [20]Тьфу-ты, дурная моя голова! Я-то обрабатывал WM_DISPLAYCHANGE! :)) Вот начеркал пару строк. Так должно быть? (извиняюсь, конечно, просто хочется себя проверить ;))
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
private
{ Private declarations }
procedure WMSETTINGCHANGE(var message: TMessage); message WM_SETTINGCHANGE;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.WMSETTINGCHANGE(var message: TMessage);
begin
//лалала
inherited;
end;
end.