![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
WM_THEMECHANGED
Jon © (2007-10-08 22:43:00)When a combobox (not simple or read-only) recieves a WM_THEMECHANGED message, all its text becomes selected. If there are many comboboxes on the form, they all are selected which looks messy. Is this a bug?
Jon (2007-10-14 21:58:00) [1]This is a better solution for comboboxes:
ComboBox.OnMessage := TOnMessage(MakeMethod(nil,@ComboMessage));
...
function ComboMessage(Dummy: Pointer; var Msg: tagMSG; var Rslt: Integer): Boolean;
begin
Result := False;
case Msg.message of
WM_THEMECHANGED:
PostMessage(Msg.hwnd,CB_SETEDITSEL,0,MakeLParam(Word(-1),Word(-1)));
end;
end;
Vladimir Kladov (2007-10-13 14:02:00) [2]Да каких-то поблем нет, прицепляется к Appletу еще один динамический обработчик, и дальще лучше уже не рассылкой сообщений, а либо рекурсивным спуском либо, еще лучше, держать список всех контролов, ждущих этого сообщения, и вызывать свой метод.
Что, кроме тем ХР, есть ещё обычные темы. А они нужны, разве WM_DESKTOPCHANGED или как оно там, не достаточно.
homm (2007-10-13 09:10:00) [3]Понял, WM_THEMECHANGED шлется по всем окнам в случае смены темы XP, в случае смены обычной темы, шлется только окнам первого уровня.
Я вот теперь припоминаю, когда разрабатывал граши, просил у Вас, Владимир, какой-то способ доставить это сообщение от формы до родителей, Вы отказали.
А вообще, майкросовт, хитрые. Когда им что-то нужно, делают все через жопу, отправляют сообщения всем окнам, а когда им не дужно, то только избранным, типо не наше дело, разбирайтесь сами с этим сообщением.
homm (2007-10-13 08:48:00) [4]Во первых, Владимир, прошу прощения, я Ваше письмо видел, но забыл про него.
2007 Борланд Студия нагло вылетает с формулировкой Out of memory при смене темы :)
По моим тестам WM_THEMECHANGED посылает только когда меняется XP Theme. Мне это не подходит. Есть ли сообщение, которое шлется при изминении обычной темы???
Vladimir Kladov (2007-10-13 07:20:00) [5]There is another bad thingn with changing theme, but I don't know yet how to fix it: transparency disappears for GRush controls. But I do not think that this is a big problem at all: the MS Inernet Explorer has even more troubles with changng theme. Thing holes of 1 or 2 pixels are appearing sometimes between its panels, buttons are away from toolbars, etc. and only restart of Windows fixes the problem.
Jon (2007-10-13 02:46:00) [6]For a temporary fix, I use in Form.OnMessage handler:
function FormMessage(Dummy: Pointer; var Msg: tagMSG; var Rslt: Integer): Boolean;
var
Counter: Integer
begin
Result := False;
case Msg.message of
WM_THEMECHANGED:
begin
for Counter := 0 to Form.ChildCount -1 do
if Form.Children[Counter].SubClassName = 'obj_COMBOBOX' then
begin
Form.Children[Counter].SelStart := 0;
Form.Children[Counter].SelLength := 0;
end;
end;
end;
end;
But I believe that there must be a more elegant solution.
Jon (2007-10-09 16:59:00) [7](1) Same result with and without GRAPHCTL_XPSTYLES defined.
From kol.pas:
{$IFDEF GRAPHCTL_XPSTYLES}
{$I visual_xp_styles.inc}
{$ENDIF}
(2) In VCL text remains unselected at theme changed.
I tested by starting and stopping themes service from command line whie application active.
Vladimir Kladov (2007-10-09 16:16:00) [8]1st: with visual_xp_styles? (if Yes, this seems is answer to MTsvDN)
2nd: what is in VCL (if 1st <> true)?