Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TComboBox, Программно кликнуть в выпадающем списке 
:(
    Опции темы
Schumi
Дата 4.12.2008, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 5.4.2006

Репутация: 1
Всего: 1



Немного лирического отступления... smile
Хочу программно управлять одной копией другой своей программы. Для этого фиксирую нажатие клавиши и кликание мыши и передаю второй копии.
На входе имею хэндл окна, на который кликнули.
Пытаюсь получить TControl через FindControl, зная хэндл.
Если он нашелся, то всё замечательно. Далее я получаю форму, на которой он лежит. Плюс начинаю перебирать все дочерние элементы контрола и сопоставляю их расположение относительно того, где кликнули. Таким образом я получаю клики на всяких лейбелах, rxlabel, RxSpinButton, RxSpinEdit.
И соотвественно передаю удаленной копии контрол, где кликнули и клиентские координаты. Таким образом я также кликаю на кнопку диалога на TFilenameEdit, потому что хотя она и находит кнопку, я реально передаю именно владельца TFilenameEdit со смещением мыши над кнопкой.
Тупо координаты мыши не могу передать, потому что форма может отресайзина и всякие тулбары передвинуты...

И вот затык с ComboBox. Начнем с попроще. Когда они щелкают на поле редактора. Там лежит Edit, его как контрол получить не удается :( Хотя если перебирать все хэндлы формы, то на нее выйти можно.
А с выпадающим списком вообще труба, тогда создается THintWindow, и как на него щелкнуть... 
PM ICQ YIM   Вверх
mrbrooks
Дата 4.12.2008, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Schumi, я чего то не пойму - это рассказ или все-таки вопрос.  smile 

По поводу управления - юзай FindWindow. Имя классов ты и так должен знать - ведь утилита то твоя. Если что - поможет тебе WinSight32 - входящая в состав бормана.

Добавлено @ 15:22
SendMessage - соответственно передача события контролу по найденному дескриптору

Это сообщение отредактировал(а) mrbrooks - 4.12.2008, 15:24
PM MAIL   Вверх
Schumi
Дата 4.12.2008, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 5.4.2006

Репутация: 1
Всего: 1



mrbrooks smile

Всё получается. Я получаю хэндл выпадающего списка и при нажатии на нем, точно буду знать, что нажали в выпадающем списке. Как узнать что нажали именно выпадающий список и не проверять на каждом нажатом контроле? (потому что не всё же время будут кликать на комбо) - тут просто - хэндл выпадающего списка вернет класс - ComboLBox. А вот как нажать на в таком же выпадающем списке такой же программы, но другого компа?

И опять же вопрос, какому комбобокс принадлежит данный выпадающий список? Перебирать все комбобоксы и сравнивать хэндлы их выпадающих списков...не айс
mrbrooks, 
PM ICQ YIM   Вверх
Schumi
Дата 8.12.2008, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 5.4.2006

Репутация: 1
Всего: 1



не пойму, а как сделать программное нажатие мыши - двойной клик, без отправки месаги?
То есть когда курсор уже стоит в нужном месте и надо просто кликнуть дважды.
Одинарный делается на ура:    
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
А двойной даже не представляю как...

PM ICQ YIM   Вверх
Schumi
Дата 8.12.2008, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 5.4.2006

Репутация: 1
Всего: 1



не пойму, а как сделать программное нажатие мыши - двойной клик, без отправки месаги?
То есть когда курсор уже стоит в нужном месте и надо просто кликнуть дважды.
Одинарный делается на ура:    
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
А двойной даже не представляю как...

PM ICQ YIM   Вверх
Alca
Дата 9.12.2008, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Симулировать щелчок мышкой 
Код

//Set the mouse cursor to position x,y: 
SetCursorPos(x, y);

// Simulate the left mouse button down 
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);

// Simulate the right mouse button down 
mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);

// Simulate a double click 
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
GetDoubleClickTime;
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);

// Simulate a double click on a panel 
SendMessage(Panel1.Handle, WM_LBUTTONDBLCLK, 10, 10)


Это сообщение отредактировал(а) Alca - 9.12.2008, 19:02


--------------------
PM WWW ICQ Skype Jabber   Вверх
Schumi
Дата 10.12.2008, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 5.4.2006

Репутация: 1
Всего: 1



Alca, да, спасибо, с этим уже разобрался
Но застреваю в другом месте: на некоторых кнопках на тулбаре (тулбар правда нестандартный - из пакета ToolBar2000), мескаги application->OnMessage не появлялись. Точнее WM_хBUTTONUP не появлялись. Перешел на проверку WM_хBUTTONDOWN, стало на ура. Но почему, так и не выяснил.
Также нарвался на другое - если я в своей проге вызываю контекстное меню (popup menu), то месага, про левую кнопку вызова меню появляется, а вот когда на самом пункте меню щелкаю - нет. Это же касается и главного меню :(
PM ICQ YIM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0485 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.