Кликнуть мышкой на объект??

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Scuder
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 334
Зарегистрирован: 17.08.2002 (Сб) 13:18
Откуда: Moscow, Russia

Кликнуть мышкой на объект??

Сообщение Scuder » 18.10.2004 (Пн) 15:33

Есть OCX, кладу его на форму. При клике на него производятся определённые действия. Мне нужно, чтобы не пользователь на него кликал, а программа. Но у него даже hwnd нет. Как на него кликнуть можно по-хорошему? :?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 18.10.2004 (Пн) 16:01

mouse_event?
Изображение

Scuder
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 334
Зарегистрирован: 17.08.2002 (Сб) 13:18
Откуда: Moscow, Russia

Сообщение Scuder » 18.10.2004 (Пн) 16:07

А передаваемые в функцию координаты после выполнения реально меняются?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 18.10.2004 (Пн) 16:15

Нет, конечно - они же передаются ByVal
Изображение

Scuder
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 334
Зарегистрирован: 17.08.2002 (Сб) 13:18
Откуда: Moscow, Russia

Сообщение Scuder » 18.10.2004 (Пн) 16:20

http://bbs.vbstreets.ru/viewtopic.php?t ... mouseevent

Не работает. :-(
Если в модуле пишу так:
Код: Выделить всё
Public Enum MouseButtonsClick
mbtnLeft = 6
mbtnMiddle = 96
mbtnRight = 24
End Enum

И вызываю так:
Код: Выделить всё
MouseClick 9970, 3370, mbtnLeft

ругается на Ambiguous name detected: mbtnLeft

А если так:
Код: Выделить всё
MouseClick 9970, 3370, 6

то ничего не происходит..

9970 и 3370 - координаты контрола (+10).

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 18.10.2004 (Пн) 16:26

координаты надо в пикселах давать, а не твипах
и относительно экрана, а не окна
Изображение

Scuder
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 334
Зарегистрирован: 17.08.2002 (Сб) 13:18
Откуда: Moscow, Russia

Сообщение Scuder » 18.10.2004 (Пн) 16:41

Ничего не происходит.. :-(
Уже растянул его на весь экран.

Код: Выделить всё
MouseDown 500, 500, 2
Sleep 2000
MouseUp 500, 500, 4


Даже так не работает.. :-(

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 18.10.2004 (Пн) 16:58

Sleep-то зачем?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Scuder
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 334
Зарегистрирован: 17.08.2002 (Сб) 13:18
Откуда: Moscow, Russia

Сообщение Scuder » 18.10.2004 (Пн) 17:08

Потому что никак не работает.. :-(

Так тоже:
Код: Выделить всё
mouse_event 6, 50, 50, 0&, 0&


И так:
Код: Выделить всё
MouseClick 50, 50, 6

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2056
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 18.10.2004 (Пн) 19:52

Может я чего то недопонял, но по ходу, прога ругается на наличие такого же объекта как mbtnleft - Ambiguous name detected: mbtnLeft ?

:scratch:

Scuder
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 334
Зарегистрирован: 17.08.2002 (Сб) 13:18
Откуда: Moscow, Russia

Сообщение Scuder » 19.10.2004 (Вт) 9:45

Ругается. Такое ощущение, что это зарезервированное имя.. :shock:
Потому что на mbtnLeftqqq она уже не ругается.. Но дело не в этом. Делаю одну большую кнопку на всю форму. Форму - на весь экран. Делаю вторую кнопку (маленькую). При нажатии на неё должна нажиматься большая. Не получается..

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 19.10.2004 (Вт) 18:44

Вот работающая версия: (Command1 маленькая в левом верхнем углу формы, Command2 большая на весь экран)

Код: Выделить всё
Option Explicit

Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliSeconds As Long)

Private Enum MouseButtons
Left = 2
Middle = 32
Right = 8
End Enum

Private Sub MouseDown(ByVal MouseButton As MouseButtons)
mouse_event MouseButton, 0, 0, 0&, 0&
End Sub

Private Sub MouseUp(ByVal MouseButton As MouseButtons)
mouse_event MouseButton * 2, 0, 0, 0&, 0&
End Sub

Private Sub MouseClick(ByVal MouseButton As MouseButtons)
MouseDown MouseButton
MouseUp MouseButton
End Sub

Private Sub MouseMove(ByVal X As Long, ByVal Y As Long)
mouse_event 1, X, Y, 0&, 0&
End Sub

Private Sub MouseClickAt(ByVal X As Long, ByVal Y As Long, ByVal MouseButton As MouseButtons)
MouseMove X, Y
MouseClick MouseButton
MouseMove -X, -Y
End Sub

Private Sub Command1_Click()
MouseClickAt 50, 50, Left
End Sub

Private Sub Command2_Click()
MsgBox "!"
End Sub



Ошибка в коде AAZ - из-за того, что одинаковые имена даны членам разных енумов. Чтобы их использовать, нужно писать явно, напр. MouseButtonsUp.mbtnLeft
Изображение

Scuder
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 334
Зарегистрирован: 17.08.2002 (Сб) 13:18
Откуда: Moscow, Russia

Сообщение Scuder » 20.10.2004 (Ср) 9:50

tyomitch, спасибо большое! А то я уж подумал, что мне совсем не везёт в этой жизни.. ;-)


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14

    TopList  
cron