Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.08.03;
Скачать: CL | DM;

Вниз

WM_THEMECHANGED   Найти похожие ветки 

 
Jon ©   (2007-10-08 22:43) [0]

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?


 
Vladimir Kladov ©   (2007-10-09 16:16) [1]

1st: with visual_xp_styles? (if Yes, this seems is answer to MTsvDN)
2nd: what is in VCL (if 1st <> true)?


 
Jon   (2007-10-09 16:59) [2]

(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.


 
Jon ©   (2007-10-13 02:46) [3]

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.


 
Vladimir Kladov ©   (2007-10-13 07:20) [4]

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.


 
homm ©   (2007-10-13 08:48) [5]

Во первых, Владимир, прошу прощения, я Ваше письмо видел, но забыл про него.

2007 Борланд Студия нагло вылетает с формулировкой Out of memory при смене темы :)

По моим тестам WM_THEMECHANGED посылает только когда меняется XP Theme. Мне это не подходит. Есть ли сообщение, которое шлется при изминении обычной темы???


 
homm ©   (2007-10-13 09:10) [6]

Понял, WM_THEMECHANGED шлется по всем окнам в случае смены темы XP, в случае смены обычной темы, шлется только окнам первого уровня.

Я вот теперь припоминаю, когда разрабатывал граши, просил у Вас, Владимир, какой-то способ доставить это сообщение от формы до родителей, Вы отказали.

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


 
Vladimir Kladov ©   (2007-10-13 14:02) [7]

Да каких-то поблем нет, прицепляется к Appletу еще один динамический обработчик, и дальще лучше уже не рассылкой сообщений, а либо рекурсивным спуском либо, еще лучше, держать список всех контролов, ждущих этого сообщения, и вызывать свой метод.

Что, кроме тем ХР, есть ещё обычные темы. А они нужны, разве WM_DESKTOPCHANGED или как оно там, не достаточно.


 
Jon ©   (2007-10-14 21:58) [8]

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;



Страницы: 1 вся ветка

Текущий архив: 2008.08.03;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.017 c
15-1213859829
antarion
2008-06-19 11:17
2008.08.03
Вакансия программиста Delphi


2-1214973707
uno-84
2008-07-02 08:41
2008.08.03
Несколько вопросов по StringGrid


4-1193915862
fedormoore
2007-11-01 14:17
2008.08.03
сканер


15-1213948991
k101k
2008-06-20 12:03
2008.08.03
будущее Delphi


2-1215351389
Аврам
2008-07-06 17:36
2008.08.03
onclick and oncheckclick