![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Потомок TCheckBox и BM_SETCHECK [D7, WinXP]
cosinus © (2007-06-26 09:30:00)В чужом приложении имеется потомок TCheckBox(видимо все таки потомок, судя по названию класса TcxCheckBox). Шлю ему сообщение
SendMessage(hWindow, BM_SETCHECK, Integer(true), 0);, а он его не обрабатывает, причем обычными методами (клик мышкой) все работает. У меня такой вопрос, можно ли установить ему Checked в True, какими либо методоми, кроме получения региона и эмуляции нажатия мышкой?
cosinus (2007-06-26 14:18:00) [1]
> Игорь Шевченко © (26.06.07 12:48) [6]
Ну не зря же я поставил ковычки. Естественно, она ведет себя совершенно логично и правильно, своим "неустойчево" я хотел сказать только то, что из MSDN-а например ( http://msdn2.microsoft.com/en-us/library/ms633538.aspx) не ясно, почему она возвращает те или иные значения в зависимости от подключения\не подключения манифеста и т.д.
За ссылку, огромное спасибо, пытаюсь разобраться.
Однокамушкин
> Игорь Шевченко ©
Спасибо
Однокамушкин (2007-06-26 14:02:00) [2]
> cosinus © (26.06.07 12:24) [5]
> В смысле, мне удовлетвориться вашим ответом, и посчитать,
> что товаристЧ просто что-то не так делал, или же для Вас
> это тоже новость?
Новость... честно говоря, с RealGetWindowClass серьйзно я не работал, так, повозился немного ради интереса, и во всех моих экспериментов она вела себя вполне предсказуемо... с манифестами её не пробовал, не знаю, как там...
> Игорь Шевченко © (26.06.07 12:48) [6]
Спасибо за интересную ссылку
Игорь Шевченко (2007-06-26 12:48:00) [3]
> однако же, человек говорит, что, например с TPanel так и
> остались проблеммы, что говорит о какой то странной "неустойчивой"
> работе RealGetWindowClass
Несть числа невеждам.
Читать и думать над прочитанным:
http://ian.joeuser.com/index.asp?c=1&AID=3258
cosinus (2007-06-26 12:24:00) [4]
> cosinus © (26.06.07 12:22) [4]
> ...Так в чем же дело?
В смысле, мне удовлетвориться вашим ответом, и посчитать, что товаристЧ просто что-то не так делал, или же для Вас это тоже новость?
cosinus (2007-06-26 12:22:00) [5]
> Однокамушкин (26.06.07 12:16) [3]
Глянь, что нашел
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=45455
Правда манифест я не подключаю, однако же, человек говорит, что, например сTPanelтак и остались проблеммы, что говорит о какой то странной "неустойчивой" работеRealGetWindowClass. Так в чем же дело?
Однокамушкин (2007-06-26 12:16:00) [6]
> cosinus © (26.06.07 12:02) [2]
> Хде мой косяк? По-моему так не должно быть...
Косяка нет, просто это значит, что оконный класс TcxCheckBox не порождён сабклассингом от стандартного класса, а является полностью независимым классом, поэтому имя класса и реальное имя класса для него совпадают... Поэтому он и не реагирует на BM_SETCHECK...
cosinus (2007-06-26 12:02:00) [7]Хм... Делаю так
const WndClassNameLen=512;
function enumSetCheckTr(hWindow: HWND; Param: Longint): Bool; stdcall
var
WndClassName: string;
ClassName:array[0..WndClassNameLen-1] of Char;
begin
SetLength (WndClassName, 512);
GetClassName (hWindow, PChar (WndClassName), 512);
if PChar(WndClassName)='TcxCheckBox' then
begin
//SendMessage(hWindow, BM_SETCHECK, 1{Integer(true)}, 0);
RealGetWindowClass(hWindow,ClassName,WndClassNameLen);
ShowMessage(String(ClassName));
end;
result:=true;
end;
Пишет то же самое, что иGetClassName (hWindow, PChar (WndClassName), 512);, то естьTcxCheckBox.
Хде мой косяк? По-моему так не должно быть...
Однокамушкин (2007-06-26 09:48:00) [8]Может, вообще не потомок, может, с нуля написан... Попробуйте получить имя базового оконного класса через функцию RealGetWindowClass, TCheckBox и его потомки порождены через сабклассинг от системного класса BUTTON... Если RealGetWindowClass вернёт не BUTTON, значит, TcxCheckBox никакого отношения к системному CheckBox'у не имеет и реагировать на BM_SETCHECK не должен...