Form_Layout или Как перехватить движение формы

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
X-BOND
Реалист
Реалист
 
Сообщения: 944
Зарегистрирован: 19.08.2002 (Пн) 11:44
Откуда: Ukraine

Form_Layout или Как перехватить движение формы

Сообщение X-BOND » 15.07.2003 (Вт) 19:24

В VBA у формы есть событие UserForm_Layout, которое помогало таскать за главной формой другие формы. В VB такого, к сожалению, нет. Как можно перехватить событие движения формы по экрану не используя GetCursorPos, таймеры и циклы?
Может быть истина где-то рядом...
Спасибо за ответы. :)

MEMBER
Гугль
Гугль
 
Сообщения: 758
Зарегистрирован: 29.11.2002 (Пт) 12:02
Откуда: 10 этаж

Сообщение MEMBER » 15.07.2003 (Вт) 21:02

В модуль:
Код: Выделить всё
Declare Function SetWindowLong Lib "user32" Alias _
                 "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex _
                 As Long, ByVal dwNewLong As Long) As Long
               
Declare Function CallWindowProc Lib "user32" Alias _
                 "CallWindowProcA" (ByVal lpPrevWndFunc As Long, _
                 ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam _
                 As Long, ByVal lParam As Long) As Long
                   

Public Const GWL_WNDPROC = -4
Public Const WM_MOVE = &H3
Public gWH As Long
Public OldWndProc As Long
'------------------------------
Function WindowProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal _
                    wParam As Long, ByVal lParam As Long) As Long
    Dim lReturn As Long
    lReturn = CallWindowProc(OldWndProc, hwnd, Msg, wParam, lParam)
    Select Case Msg 'проверяем сообщения
        Case WM_MOVE 'если нужное нам, то выполняем некоторые действия
         MsgBox ("Поехали!!!")
    End Select
    WindowProc = lReturn 'вернем значение функции
End Function


В форму:
Код: Выделить всё
Private Sub Form_Load()
    gWH = Me.hwnd 'дескриптор нашего окна
    OldWndProc = SetWindowLong(gWH, GWL_WNDPROC, AddressOf WindowProc)
End Sub
'------------------------------
Private Sub Form_Unload(Cancel As Integer)
    SetWindowLong gWH, GWL_WNDPROC, OldWndProc
End Sub
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com


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

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

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

    TopList  
cron