|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
17.07.2017, 23:51 | #1 |
Пользователь
Регистрация: 20.07.2013
Сообщений: 42
|
Как получить номер вкладки в PageControl чужой программы
Я управляю интерфейсом чужой программы. В ней есть дочерние окна с именем класса "TPageControl". В каждом из них есть по нескольку вкладок класса "TTabSheet".
Я, пока, смог выбирать-открывать вкладки с помощью SendMessage(hPageControl, TCM_SETCURFOCUS, nTabSheet, 0) где hPageControl - хэндл родительского окна с классом "TPageControl" (родительский, по отношению к окну класса "TTabSheet". вкладки, которую хочу открыть). nTabSheet - порядковый номер вкладки с классом "TTabSheet", в окне класса "TPageControl". Вопрос в следующем, я получил хендлы всех нужных мне окон. Как из хэндла окна "TTabSheet", получить его порядковый номер? Ну или, адекватный моей задаче вопрос, как можно отрыть вкладку "TTabSheet" в "TPageControl", зная только хэндл или Caption окна "TTabSheet" (не определяя его порядковый номер) ? |
18.07.2017, 16:31 | #2 |
Программист
Участник клуба
Регистрация: 23.06.2009
Сообщений: 1,772
|
Вы напрасно думаете, что здесь есть какая-то прямая зависимость.
Приложение при смене таба просто получает сообщение об этом. А что отображать по этому сообщению, менять ли дочернее окно или что-то поменять в его элементах - всё это приложение определяет самостоятельно, в соответствии со своей внутренней логикой |
18.07.2017, 17:55 | #3 |
Пользователь
Регистрация: 20.07.2013
Сообщений: 42
|
Если я правильно понял, то нельзя получить порядковый номер из хэндла таба.
Тогда какие есть еще варианты, открыть таб с заданным именем (ну и уже известным хэндлом)? Что я пробовал: Код:
SendMessage(hPageCtrl, TCM_SETUPFOCUS, 3, 0); Но тут как раз проблема, установить связь между хэндлом и номером вкладки. Последний раз редактировалось Kuzya69; 18.07.2017 в 18:00. |
18.07.2017, 18:07 | #4 |
Программист
Участник клуба
Регистрация: 23.06.2009
Сообщений: 1,772
|
Вы можете пояснить, зачем нужно плясать от handle TTabSheet ?
Ведь обычно вся логика завязана именно на табы - их заголовки и номера |
18.07.2017, 18:12 | #5 |
Пользователь
Регистрация: 20.07.2013
Сообщений: 42
|
Ну потому, что я сначала нахожу сами табшиты по имени(Caption + ClassName), а потом получаю их хэндл. Чтобы после открытия табшита, искать элементы управления на этой вкладке, с использованием хэндла этого табшита, и пользоваться ими по своему усмотрению.
Если есть способ открытия табшита по имени, тоже буду рад. Последний раз редактировалось Kuzya69; 18.07.2017 в 18:16. |
18.07.2017, 18:26 | #6 |
Программист
Участник клуба
Регистрация: 23.06.2009
Сообщений: 1,772
|
А там ведь, кажется, Caption у TTabSheet обязательно совпадает с заголовком таба
Поиск по заголовкам табов легко организовать перебором, через TCM_GETITEM message |
18.07.2017, 18:30 | #7 |
Пользователь
Регистрация: 20.07.2013
Сообщений: 42
|
Так табшиты-то я нашел. Я их не могу открыть(или сделать активными, не знаю как правильно сказать). Потому-что способ для открывания, который я подобрал, требует номера табшита, а номер-то как раз моя-управляющая программа не знает еще.
|
18.07.2017, 18:47 | #8 |
Программист
Участник клуба
Регистрация: 23.06.2009
Сообщений: 1,772
|
Номера табов идут подряд, от нуля до максимума, который получается через TCM_GETITEMCOUNT message.
Далее в цикле по каждому номеру посылаем TCM_GETITEM message. В результате получаем TCITEM structure. Заголовок таба в ней точно есть. Я не исключаю, что VCL может хранить там и хэндл окна, где-нибудь в поле lParam. Но я думаю, что для идентификации номеров табов достаточно сравнить заголовки с искомыми |
18.07.2017, 18:53 | #9 |
Пользователь
Регистрация: 20.07.2013
Сообщений: 42
|
Отлично, попробую.
Чего-то не могу найти "спасибо" или "дать в репу". Напишу словами: СПАСИБО. Пойду думать дальше. |
18.07.2017, 20:13 | #10 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
А TCM_GETITEM будет работать из другого процесса?
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
PageControl ошибка при закрытие последней вкладки | waka2ebawer | Общие вопросы Delphi | 5 | 26.08.2013 15:21 |
Как получить данные с чужой программы в свою? | pepesina | Общие вопросы Delphi | 21 | 13.07.2012 16:24 |
Не переключаться вкладки PageControl | Shouldercannon | Общие вопросы Delphi | 1 | 24.05.2010 09:53 |
PageControl - сравнить вкладки. | Небесный | Общие вопросы Delphi | 9 | 04.05.2009 08:43 |
как получить чужой комп в свои руки | zetrix | Безопасность, Шифрование | 7 | 13.11.2008 16:32 |