|
Вопрос # 4 617/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!
У меня возникла такая проблема. Нужно отправить сообщение слика на кнопку TSpeedBtn, но как оказалось она не имеет handle. Для отправки сообщений я знаю только PostMessage и SendMessage, но в их параметрах нужен handle. Может что-то подскажете или посоветуете.
Ещё такой момен. Я не нашел сообщение именно для клика, только на двойное нажатие - WM_LBUTTONDBCLICK.
 |
Вопрос задал: diamond (статус: Посетитель)
Вопрос отправлен: 28 сентября 2010, 11:03
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Паровоз
Здравствуйте, diamond!
"Нажать" кнопку TSpeedBtn можно так:
1) находим дескриптор окна, содержащего кнопку
wnd:=FindWindow('ClassName','WindowName');
2) посылаем пару сообщений:
SendMessage(wnd,WM_LBUTTONDOWN,MK_LBUTTON,MakeLong(x,y));
SendMessage(wnd,WM_LBUTTONUP,MK_LBUTTON,MakeLong(x,y));
где точка (x,y) должна лежать внутри кнопки
 |
Ответ отправил: Паровоз (статус: 10-ый класс)
Время отправки: 28 сентября 2010, 16:19
|
Мини-форум вопроса
Всего сообщений: 5; последнее сообщение — 28 сентября 2010, 15:42; участников в обсуждении: 3.
|
min@y™ (статус: Доктор наук), 28 сентября 2010, 11:10 [#1]:
Цитата (diamond):
У меня возникла такая проблема. Нужно отправить сообщение слика на кнопку TSpeedBtn, но как оказалось она не имеет handle. Для отправки сообщений я знаю только PostMessage и SendMessage, но в их параметрах нужен handle.
TSpeedButton - это графический компонент Delphi, а не кнопка в понятиях Windows. Этот компонент является наследником TGraphicControl и поэтому не имеет хэндла. Управлять им с помощью сообщений невозможно.
Данная кнопка находится в чужой программе?
Цитата (diamond):
Я не нашел сообщение именно для клика, только на двойное нажатие - WM_LBUTTONDBCLICK.
Зато есть сообщения WM_LBUTTONDOWN и WM_LBUTTONUP.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
diamond (статус: Посетитель), 28 сентября 2010, 11:17 [#2]:
Фактически в одной, но сама кнопка в главной форме, а мослать сообщение нужно с длл'ки
|
|
Вадим К (статус: Академик), 28 сентября 2010, 11:39 [#3]:
если нужно сделать посылку с длл в основное приложение, что бы нажать кнопку или что то подобное, лучше так не делать. Потому что завтра Вам захочется переименовать кнопку или сменить название (банально интернационализация), то код перестанет работать.
Правильнее слать сообщения (вида WM_USER+XXXX) форме, а она перехватывает сообщения и выполняет некие действия. Самой длл нужно будет только дать хендл.
Плюс получаем ещё одно преимущество - можно выполнять самые нестандартные действия. А если использовать ещё sendMessage, то можно и возвращать результат обработки
Галочка "подтверждения прочтения" - вселенское зло.
|
|
min@y™ (статус: Доктор наук), 28 сентября 2010, 11:47 [#4]:
Добавлю: если при загрузке DLL в неё передавать Application.Handle, то отсылать сообщения можно именно окну Application, а обрабатывать - в Application.OnMessage. Очень удобно.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
diamond (статус: Посетитель), 28 сентября 2010, 15:42 [#5]:
Решилось все без сообщения. Спасибо за помощь.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|