Форум: "KOL";
Текущий архив: 2008.08.03;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "KOL";
Текущий архив: 2008.08.03;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c