Правильный WM_LButtonClick |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
Правильный WM_LButtonClick |
Unconnected |
19.06.2011 15:13
Сообщение
#1
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Как правильно отправить кнопке клик мыши? Делал традиционно так:
Procedure clickng(w:THandle); за 1-3 параметры уверен, а вот 4й - в msdn написано, что там должна быть структура с координатами курсора, а везде в сети там тупо 0 или 1, но я подозреваю, что это очередной ГК.. хотя раньше всегда так же делал, ну вот сейчас опять работает как-то непонятно и через раз. -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
IUnknown |
19.06.2011 15:22
Сообщение
#2
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Опять "магические числа"?
SendMessage(w, WM_LBUTTONDOWN, MK_LBUTTON, MakeLong(xPos, yPos));не проще читается? |
Unconnected |
19.06.2011 15:25
Сообщение
#3
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Проще, ну это для краткости) А xPos-yPos это искать координаты кнопки ведь?
-------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
IUnknown |
19.06.2011 15:31
Сообщение
#4
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
xPos и yPos - это координаты мыши (относительно клиентской части окна W), которые будут переданы в обработчик WM_LBUTTONDOWN.
|
Unconnected |
19.06.2011 15:32
Сообщение
#5
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Проще, ну это для краткости) А xPos-yPos это искать координаты кнопки ведь?
added: и ещё.. в msdn про последний параметр что-то было про "выше-левее угла клиентской области", что ли, не совсем понял. Это, случаем, значило не то, что клик не будет работать, если кнопка вне экрана (окно так расположено, например) ? -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
IUnknown |
19.06.2011 15:34
Сообщение
#6
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Цитата в msdn про последний параметр что-то было про "выше-левее угла клиентской области", что ли, не совсем понял. Это?Цитата(MSDN) The coordinate is relative to the upper-left corner of the client area. "Координата относительно верхнего левого угла клиентской области". |
Unconnected |
19.06.2011 16:00
Сообщение
#7
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Procedure clickng(w:THandle); Сделал так.. что-то он вообще кликать перестал, только тень на кнопке появляется. -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
IUnknown |
19.06.2011 16:17
Сообщение
#8
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Следи за руками:
p:=r.TopLeft;Теперь нажимается? |
Unconnected |
19.06.2011 16:33
Сообщение
#9
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
O_o нажалось... я сначала примерно так же пробовал, только ScreenToClient-ом возвращал значение в другую переменную, а там видать входной параметр сам и изменяется.. спасибо)
-------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
Unconnected |
20.06.2011 0:10
Сообщение
#10
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
deleted
Сообщение отредактировано: Unconnected - 20.06.2011 1:50 -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
TarasBer |
20.06.2011 9:31
Сообщение
#11
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
А тебе для чего посылать щелчок?
Я когда таким образон радиогруппу переключал (потому что это наименее накладный способ, не запоминать ИД первого и последнего элементов), Вольво меня разругал. -------------------- |
Unconnected |
20.06.2011 11:53
Сообщение
#12
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Ну, надо кнопку нажать.. или ещё как-то можно её нажать, не щелчком? Он как-то нестабильно работает. У меня на машине всегда, а на других иногда вообще не кликает, хотя тоже XP.. посмотрите, может не так делаю чего..
-------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
TarasBer |
20.06.2011 12:07
Сообщение
#13
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Чтобы нажать кнопку, надо просто вызвать ту же процедуру, которая сидит в ветке WM_COMMAND->ID_BTN_1 в оконной процедуре.
-------------------- |
Unconnected |
20.06.2011 12:15
Сообщение
#14
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Что-то новое.. и как её вызвать, тоже sendmessage какой-то?
-------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
IUnknown |
20.06.2011 12:29
Сообщение
#15
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Цитата посмотрите, может не так делаю чего.. Угу... Все не так... Не надо делать этот ужасный цикл длительностью до 50 секунд. Проверил один раз - нет на экране подходящего окна - все, устанавливай хук. Глобальный. На HCBT_CREATEWND. Там проверяй заголовок создаваемого окна, и если он - тот, что нужен, то работай дальше (дождись появления окна на экране и пошли ему Enter, если кнопка, которую ты пытаешься нажать - дефолтная, а в большинстве случаев это так - то она и нажмется. Если не дефолтная - то надо будет искать).На данный момент у меня твой код не работает. По одной простой причине: if pos(fn,sp)>0 then begin // Ищем заголовок, если учесть, что в fn находится заголовок, НЕ приведенный к верхнему регистру, то программа даже теоретически не может отработать. Никогда (поскольку 'PrivatCom' и 'PRIVATCOM' - это очень уж разные вещи для компьютера). Либо ты показываешь не тот код, который работает, либо выдаешь желаемое за действительное... Сообщение отредактировано: IUnknown - 20.06.2011 12:35 |
Unconnected |
20.06.2011 12:36
Сообщение
#16
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Ооо нет, опять эти dll, мэппинг, затыки на пустом месте.. а почему бы не проверять хотя бы в таймере наличие нужного окна? Кнопки все дефолтные (TButton и TBitButton).
added: Цитата Либо ты показываешь не тот код Да да, в оригинале большими буквами, эту константу уже тут допечатывал.. так то хэндлы всегда находятся, но нажимается далеко не всегда. Сообщение отредактировано: Unconnected - 20.06.2011 12:38 -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
IUnknown |
20.06.2011 12:43
Сообщение
#17
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Цитата а почему бы не проверять хотя бы в таймере наличие нужного окна? Да мне-то все равно, хоть вручную проверяй (показывай каждую секунду сообщение пользователю, "если на экране появилось окошко с заголовком bla_bla_bla, то подведите мышу к кнопке ПОДКЛЮЧЕНИЕ и нажмите левую кнопку мыши. Если нет - нажмите Cancel"). Только вот пользоваться такой программой никому на фиг не надо. Равно как и той, что работает по таймеру. Выбирай, присоединяться к 90% "писателей кода", либо учиться, наконец, делать нормально... Как выберешь - скажешь... |
Unconnected |
20.06.2011 12:58
Сообщение
#18
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Хочу нормально, а с дллками связываться не хочу... Ладно, допустим есть у меня хэндл кнопки\окна, чтобы отправить ей WM_COMMAND, надо ID кнопки где-то взять же?
-------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
TarasBer |
20.06.2011 13:22
Сообщение
#19
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
> Что-то новое.. и как её вызвать, тоже sendmessage какой-то?
Нет, тупо берёшь и вызываешь. Ты ведь нажимаешь кнопку своего приложения, так? У тебя на эту кнопку уже повешена какая-то процедура, так? Ну вот её тупо и вызывай. -------------------- |
Unconnected |
20.06.2011 13:27
Сообщение
#20
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Если бы своего, то понятное дело не кликал бы так) В общем, посмотрел, что окну при нажатии шлётся: извещение BN_CLICKED, в wParam лежит ID кнопки, а в lParam - её хэндл, или окна.. вот как бы ID получить.
-------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
Текстовая версия | 27.09.2024 16:17 |