Страница: 1 |
Страница: 1 |
Вопрос: Узнаю координаты курсора
Добавлено: 11.01.06 21:16
Автор вопроса: [root] | Web-сайт:
Узнаю координаты курсора и перемещаю кнопку.
Но чего то не выходит!
Если убрать * Screen.TwipsPerPixelX, тогда она перемещается в маленьком пространстве, т.е. координаты в пикселях.
Как сделать чтобы кнопка перемещалась туда где курсор?
Option Explicit
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Type POINTAPI
X As Long
Y As Long
End Type
Dim z As POINTAPI
Private Sub cmdStart_Click()
GetCursorPos z
cmdStart.Left = z.X * Screen.TwipsPerPixelX
cmdStart.Top = z.Y * Screen.TwipsPerPixelY
End Sub
Ответы
Всего ответов: 9
Номер ответа: 1
Автор ответа:
Mihalыch
ICQ: 373-509-101
Вопросов: 56
Ответов: 330
Профиль | | #1
Добавлено: 12.01.06 04:40
Нужно добавить ScreenToClient
Номер ответа: 2
Автор ответа:
[root]
Вопросов: 45
Ответов: 1212
Web-сайт:
Профиль | | #2
Добавлено: 12.01.06 10:52
А по конкретней можно - не понял.
Номер ответа: 3
Автор ответа:
Mihalыch
ICQ: 373-509-101
Вопросов: 56
Ответов: 330
Профиль | | #3
Добавлено: 12.01.06 11:32
Private Declare Function GetCursorPos Lib "user32.dll" (ByRef lpPoint As POINTAPI) As Long
Private Declare Function ScreenToClient Lib "user32.dll" (ByVal hwnd As Long, ByRef lpPoint As POINTAPI) As Long
Private Type POINTAPI
x As Long
y As Long
End Type
Private Sub Timer1_Timer()
Dim PA As POINTAPI
GetCursorPos PA
ScreenToClient Me.hwnd, PA
cmdStart.Move PA.x * Screen.TwipsPerPixelX, PA.y * Screen.TwipsPerPixelY
End Sub
Номер ответа: 4
Автор ответа:
[root]
Вопросов: 45
Ответов: 1212
Web-сайт:
Профиль | | #4
Добавлено: 12.01.06 12:02
Да только нужно еще вот ето добавить:
Private Sub Form_Load()
Timer1.Interval = 1
End Sub
А если нужно оцентрировать, т.е. кнопка перемещается не туда где курсор, а становится, чтобы курсор был по центру?
Номер ответа: 5
Автор ответа:
[root]
Вопросов: 45
Ответов: 1212
Web-сайт:
Профиль | | #5
Добавлено: 12.01.06 13:13
А вот так еще проще и лучше!
Нажимаешь на кнопку мышкой и кнопка центрируется по указателю мыши:
Private Sub cmdStart_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
cmdStart.Left = cmdStart.Left + X - cmdStart.Width / 2
cmdStart.Top = cmdStart.Top + Y - cmdStart.Height / 2
End Sub
Номер ответа: 6
Автор ответа:
VerhoLom
Вопросов: 20
Ответов: 285
Профиль | | #6
Добавлено: 14.01.06 14:59
А не легче использовать вместо таймера SetCapture(hWnd), ReleaseCapture - Первая вешается на мышку, вторая снимает слежку. Тогда событие NouseMove для формы (или любого другого чего) происходи даже когда курсор не над ней.
Номер ответа: 7
Автор ответа:
VerhoLom
Вопросов: 20
Ответов: 285
Профиль | | #7
Добавлено: 14.01.06 15:00
Извините, очепятка вышла: MouseMove
Номер ответа: 8
Автор ответа:
AndreyMp
ICQ: 237822510
Вопросов: 28
Ответов: 1182
Профиль | | #8
Добавлено: 15.01.06 02:19
Читайте API-Guid. И все у Вас получится.
Номер ответа: 9
Автор ответа:
[root]
Вопросов: 45
Ответов: 1212
Web-сайт:
Профиль | | #9
Добавлено: 15.01.06 02:32
Уже получилось!