Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.07.2017, 23:51   #1
Kuzya69
Пользователь
 
Регистрация: 20.07.2013
Сообщений: 42
По умолчанию Как получить номер вкладки в PageControl чужой программы

Я управляю интерфейсом чужой программы. В ней есть дочерние окна с именем класса "TPageControl". В каждом из них есть по нескольку вкладок класса "TTabSheet".
Я, пока, смог выбирать-открывать вкладки с помощью
SendMessage(hPageControl, TCM_SETCURFOCUS, nTabSheet, 0)
где
hPageControl - хэндл родительского окна с классом "TPageControl" (родительский, по отношению к окну класса "TTabSheet". вкладки, которую хочу открыть).
nTabSheet - порядковый номер вкладки с классом "TTabSheet", в окне класса "TPageControl".


Вопрос в следующем, я получил хендлы всех нужных мне окон. Как из хэндла окна "TTabSheet", получить его порядковый номер?
Ну или, адекватный моей задаче вопрос, как можно отрыть вкладку "TTabSheet" в "TPageControl", зная только хэндл или Caption окна "TTabSheet" (не определяя его порядковый номер) ?
Kuzya69 вне форума Ответить с цитированием
Старый 18.07.2017, 16:31   #2
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Вы напрасно думаете, что здесь есть какая-то прямая зависимость.
Приложение при смене таба просто получает сообщение об этом.
А что отображать по этому сообщению, менять ли дочернее окно или что-то поменять в его элементах - всё это приложение определяет самостоятельно, в соответствии со своей внутренней логикой
Black Fregat вне форума Ответить с цитированием
Старый 18.07.2017, 17:55   #3
Kuzya69
Пользователь
 
Регистрация: 20.07.2013
Сообщений: 42
По умолчанию

Если я правильно понял, то нельзя получить порядковый номер из хэндла таба.
Тогда какие есть еще варианты, открыть таб с заданным именем (ну и уже известным хэндлом)?
Что я пробовал:
Код:
1). SetActivateWindow(hTabShhet)
2). ShowWindow(hTabShhet, SW_SHOW);  SW_SHOWDEFAULT, SW_SHOWNORMAL
3). SendMessage(hTabShhet, WM_LBUTTONDOWN, 0, rTabSheet.Rect.Left + (rTabSheet.Rect.Top shl 16));
    SendMessage(hTabShhet, WM_LBUTTONUP, 0, rTabSheet.Rect.Left + (rTabSheet.Rect.Top shl 16));//проблема, что в структуре Rect одни нули.
4). SendMessage(hPageCtrl, TCM_SETCURSEL, 3, 0);
Ничего не открывало, кроме
SendMessage(hPageCtrl, TCM_SETUPFOCUS, 3, 0);
Но тут как раз проблема, установить связь между хэндлом и номером вкладки.

Последний раз редактировалось Kuzya69; 18.07.2017 в 18:00.
Kuzya69 вне форума Ответить с цитированием
Старый 18.07.2017, 18:07   #4
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Вы можете пояснить, зачем нужно плясать от handle TTabSheet ?
Ведь обычно вся логика завязана именно на табы - их заголовки и номера
Black Fregat вне форума Ответить с цитированием
Старый 18.07.2017, 18:12   #5
Kuzya69
Пользователь
 
Регистрация: 20.07.2013
Сообщений: 42
По умолчанию

Ну потому, что я сначала нахожу сами табшиты по имени(Caption + ClassName), а потом получаю их хэндл. Чтобы после открытия табшита, искать элементы управления на этой вкладке, с использованием хэндла этого табшита, и пользоваться ими по своему усмотрению.
Если есть способ открытия табшита по имени, тоже буду рад.

Последний раз редактировалось Kuzya69; 18.07.2017 в 18:16.
Kuzya69 вне форума Ответить с цитированием
Старый 18.07.2017, 18:26   #6
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

А там ведь, кажется, Caption у TTabSheet обязательно совпадает с заголовком таба
Поиск по заголовкам табов легко организовать перебором, через TCM_GETITEM message
Black Fregat вне форума Ответить с цитированием
Старый 18.07.2017, 18:30   #7
Kuzya69
Пользователь
 
Регистрация: 20.07.2013
Сообщений: 42
По умолчанию

Так табшиты-то я нашел. Я их не могу открыть(или сделать активными, не знаю как правильно сказать). Потому-что способ для открывания, который я подобрал, требует номера табшита, а номер-то как раз моя-управляющая программа не знает еще.
Kuzya69 вне форума Ответить с цитированием
Старый 18.07.2017, 18:47   #8
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Номера табов идут подряд, от нуля до максимума, который получается через TCM_GETITEMCOUNT message.
Далее в цикле по каждому номеру посылаем TCM_GETITEM message. В результате получаем TCITEM structure. Заголовок таба в ней точно есть. Я не исключаю, что VCL может хранить там и хэндл окна, где-нибудь в поле lParam. Но я думаю, что для идентификации номеров табов достаточно сравнить заголовки с искомыми
Black Fregat вне форума Ответить с цитированием
Старый 18.07.2017, 18:53   #9
Kuzya69
Пользователь
 
Регистрация: 20.07.2013
Сообщений: 42
По умолчанию

Отлично, попробую.
Чего-то не могу найти "спасибо" или "дать в репу".
Напишу словами:
СПАСИБО. Пойду думать дальше.
Kuzya69 вне форума Ответить с цитированием
Старый 18.07.2017, 20:13   #10
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

А TCM_GETITEM будет работать из другого процесса?
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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