|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
20.03.2012, 16:08 | #1 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
Отправка TCM_SETCURSEL в SysTabControl32
Здравствуйте.
не могу разобраться с ловлей сообщения, после отправки TCM_SETCURSEL в SysTabControl32. у табконтроле имеются две вкладки (Id 0,1) и на каждой из них лежит по кнопке - but1 и but2. мне надо переключаться между вкладками вручную и программно (например- по таймеру и т.п.). вручную всё работает. но ежели отправить сообщение: Код:
Код:
а после отправки TCM_SETCURSEL сообщение WM_NOTIFY не приходит. собственно вопрос - как и какое сообщение принимать? за основу взял MSDN и уже готовую программу "control spy", которую так же нашел в MSDN (ее исходников нет). Может где чего пропустил? Последний раз редактировалось BLACK_RAIN; 20.03.2012 в 16:26. Причина: исправление |
21.03.2012, 00:46 | #2 | |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
Цитата:
Пошлите его сами после TCM_SETCURSEL, сформировав wParam & lParam. |
|
21.03.2012, 09:36 | #3 | |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
я где-то читал, что WM_NOTIFY нельзя послать вручную используя SendMessage. По-этому, как-то об этом не подумал
Спасибо, теперь работает. уточните еще одну деталь: у меня Delphi 7 изначально не понимает структуру TcItem, которая используется при добавлении вкладок в SysTabControl32. Взял из MSDN: Цитата:
Код:
Без них работает (проверял на Windows XP sp3). Что конкретно проверяют эти строчки и как их правильно переписать в Delphi? Без этих строчек программа будет работать в старых версиях винды? (windows 95-2000) Последний раз редактировалось BLACK_RAIN; 21.03.2012 в 09:40. |
|
21.03.2012, 10:28 | #4 |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
На win95 не знаю, на остальных должно работать.
Это зависит, как я понимаю, от версии Comctl32.dll. Просто с Comctl32 поставляется заголовочный файл commctrl.h В нем помимо прочего определен макрос #define _WIN32_IE 0x0500 Значение может быть иным. Определение структуры TCITEM учитывает версию, и если препроцессор встречает в заголовочном файле #define _WIN32_IE 0x0200, то поля dwState, dwStateMask проигнорируются и вместо них будет lpReserved1(2). Но это справедливо для компилятора СИ, а в делфи убирайте Reserved. И если хотите работать, учитывая старые версии, то придется проверять DllGetVersion, и если версия старая - не использовать в коде поля dwState, dwStateMask; Последний раз редактировалось EUGY; 21.03.2012 в 10:34. |
21.03.2012, 12:11 | #5 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
приблизительно понял.
сейчас проверил на Windows 98 - работает. Показывает версию Common controls 5.80 build 2614. а на ХР - 5.82 build 2900. "старая" - начиная с какой? Последний раз редактировалось BLACK_RAIN; 21.03.2012 в 12:37. Причина: добавление |
21.03.2012, 13:16 | #6 |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
Младше 4.71 мне за последние 10 лет не попадались.
Comctl32 поставляется в дистрибутиве с explorer-ом. Можно косвенно судить, если стоит Microsoft® Internet Explorer 4.0 и выше, то все OK. А нет - так поставить Explorer. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как убрать мерцания systabcontrol32 | *PB* | Win Api | 1 | 19.07.2011 21:50 |
отправка POST | CraZZy RabbIt | Работа с сетью в Delphi | 8 | 24.04.2009 16:48 |
Отправка почты | Fo][ | Работа с сетью в Delphi | 1 | 20.01.2009 23:15 |
Отправка СМС. | doniyor | Работа с сетью в Delphi | 1 | 12.01.2009 14:03 |