Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Потомок 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 не должен...


Наверх

Титульная страница Поиск, карта сайта Написать письмо