Форум: "Система";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];
ВнизОтследить изменение схемы оформления Window Найти похожие ветки
← →
Le][a (2004-04-15 18:37) [0]Добрый вечер, Мастера! Вопрос такой: какое сообщение нужно ловить, чтобы отследить изменение схемы оформления Windows? (это которая в свойствах экрана. Всякие там "Баклажан", "Ель", "Кирпичная" и пр. Или "Серебристая", "Оливковая", "Синяя" - это если в WinXp). Заранее благодарен.
← →
Le][a (2004-04-15 19:52) [1]Неужели никто не знает?
← →
VMcL © (2004-04-15 20:14) [2]WM_SETTINGCHANGE
?
← →
Le][a (2004-04-15 20:35) [3]Тьфу-ты, дурная моя голова! Я-то обрабатывал 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.
← →
Игорь Шевченко © (2004-04-15 20:39) [4]скорее, WM_SYSCOLORCHANGE
← →
Le][a (2004-04-15 20:57) [5]> Игорь Шевченко © (15.04.04 20:39) [4]
Пишу то же самое, что и в [3], заменяя *SETTINGCHANGE на *SYSCOLORCHANGE - система виснет (Win 98).
← →
Игорь Шевченко © (2004-04-15 21:13) [6]
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 21:41) [7]> Игорь Шевченко © (15.04.04 21:13) [6]
Win 98 стабильно виснет. После убиения Project1.exe схема меняется, работоспособность системы восстанавливается. А вот WM_SETTINGCHANGE обрабатывается без проблем. Что это может быть? Система?
← →
Игорь Шевченко © (2004-04-15 21:50) [8][7] Le][a (15.04.04 21:41)
На Win9x не могу протестировать - нету их у меня. Судя по тому, что в документации не указано никакой отличительной особенности обработки этого сообщения под Win9x, проблема в чем-то другом. Мой код, скопированный один в один тоже виснет ?
← →
Le][a (2004-04-15 22:31) [9]> Игорь Шевченко © (15.04.04 21:50) [8]
> Мой код, скопированный один в один тоже виснет ?
Да.
← →
Dimaxx © (2004-04-15 22:36) [10]Нифига! Ловить нужно WM_THEMECHANGED ($031A)!
← →
Dimaxx © (2004-04-15 22:37) [11]В смысле, под ХРюшей...
← →
Dimaxx © (2004-04-15 22:41) [12]Тьфу, это я про темы. Пардон!
← →
Rouse_ © (2004-04-15 22:52) [13]
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.
← →
Le][a (2004-04-16 10:31) [14]> Rouse_ © (15.04.04 22:52) [13]
Система виснет.
← →
Le][a (2004-04-16 10:45) [15]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 нет.
← →
Игорь Шевченко © (2004-04-16 17:41) [16]Le][a (16.04.04 10:45)
Могу посоветовать только полазить отладчиком, с включенной опцией Use Debug DCU и указанием пути к файлам VCL в опциях проекта.
У меня Win9x нету, помочь разобраться не смогу.
← →
Rouse_ © (2004-04-16 20:05) [17]> [14] Le][a (16.04.04 10:31)
Именно в моем варианте виснет?
У меня 98, без проверки я не отправлял код...
← →
Rouse_ © (2004-04-16 20:05) [18]В смысле если б не проверил, не отбравил бы :)
← →
Le][a (2004-04-16 21:36) [19]> Rouse_ © (16.04.04 20:05) [17]
> Именно в моем варианте виснет?
Дико извиняюсь, Саш. Висло когда я писал такую конструкцию:
procedure TForm1.WMSysColorChange(var Message: TMessage);
begin
ShowMessage("qwe");
Inherited;
end;
Видимо вся проблема и состоит в этом ShowMessage. Как же его отобразить?
← →
Игорь Шевченко © (2004-04-16 21:45) [20]
> Видимо вся проблема и состоит в этом ShowMessage.
Попробуй Windows.MessageBox
← →
Le][a (2004-04-16 22:15) [21]Все. Проблема решена методом предложенным Rouse_ и дополненным Игорем Шевченко. Спасибо вам. Также спасибо Dimaxx за участие и VMcL за WM_SETTINGCHANGE. Вот. ;о) Обсуждение можно закрыть.
← →
Yanis © (2004-04-17 00:12) [22]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.
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.038 c