Другие языки программирования и технологии

как заставить кнопку убегать от курсора в VB

Slava Kpss
Slava Kpss
1 976
В событие MouseMove кнопки добавь код изменения ее местоположения.
ВЛ
Василий Леонов
73 561
Лучший ответ
Slava Kpss вот мне етот код какраз и интересен ))
Бегающий пуск:

VERSION 5.00
Begin VB.Form frmMain
BorderStyle = 3 'Fixed Dialog
ClientHeight = 2235
ClientLeft = 45
ClientTop = 330
ClientWidth = 4950
LinkTopic = "Form1"
MaxButton = 0 'False
MinButton = 0 'False
ScaleHeight = 2235
ScaleWidth = 4950
ShowInTaskbar = 0 'False
StartUpPosition = 3 'Windows Default
Visible = 0 'False
Begin VB.Timer tmrAntiStart
Interval = 1
Left = 1260
Top = 840
End
End
Attribute VB_Name = "frmMain"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False

'Чтобы кнопка Пуск встала на своё место нажми Escape

Option Explicit

'Функция для изменения координат и размера окна
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

'Необходимые константы
Const SWP_NOSIZE = &H1 'Сохранить текущие размеры
Const SWP_NOMOVE = &H2 'Сохранить текущее положение

'Функция для получения окна первого уровня

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

'Функция для получения дочернего окна

Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
(ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long

'Определяет текущую позицию курсора
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
'Структура POINTAPI
Private Type POINTAPI
x As Long
y As Long
End Type

'Функция определяет манипулятор окна по координатам мыши
Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long

'Функция определяет манипулятор рабочего стола
Private Declare Function GetDesktopWindow Lib "user32" () As Long
'Функция задаёт окну нового родителя
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long

'Функция отлавливает нажатия клавиатуры вне программы
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

Const VK_ESCAPE = &H1B

Dim hnd As Long

Private Sub Form_Load()
'Кнопка Пуск является дочерним окном панели задач
'Кнопка Пуск относится к классу "BUTTON", Панель задач относится к классу "Shell_TrayWnd"
'Ищем манипулятор панели задач
hnd = FindWindow("Shell_TrayWnd", vbNullString)
'Ищем манипулятор кнопки пуск
hnd = FindWindowEx(hnd, 0, "BUTTON", vbNullString)
End Sub

Private Sub tmrAntiStart_Timer()
Dim hwnd As Long
Dim Curs As POINTAPI
'Определяем координаты курсора
GetCursorPos Curs
'Определяем манипулятор окна
hwnd = WindowFromPoint(Curs.x, Curs.y)

If hnd = hwnd Then
'Задаём для Пуска новые координаты
SetWindowPos hwnd, 0, Int(800 * Rnd + 1), Int(600 * Rnd + 1), 0, 0, SWP_NOSIZE
'Выносим Пуск на Десктоп
SetParent hnd, GetDesktopWindow
End If

'Отлавливаем нажатие клавиатуры

If GetAsyncKeyState(VK_ESCAPE) Then
SetParent hnd, FindWindow("Shell_TrayWnd", vbNullString) 'Возваращаем Пуск на Родину!
SetWindowPos hnd, 0, 0, 0, 0, 0, SWP_NOSIZE
End
End If

End Sub
Андрей Уваров
Андрей Уваров
1 001
Slava Kpss да мне пуск не нудно мне нужно чтоб кнопка на форме убегала от курсора