Отловление Form_Resize()

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
IIIypuk
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 10.06.2006 (Сб) 12:39

Отловление Form_Resize()

Сообщение IIIypuk » 30.07.2006 (Вс) 17:34

День добрый.
Скажите, уважаемые, как можно отловить конец события Form_Resize()

Имеется ввиду, что при изменении размера, постоянно генерируется событие Form_Resize(). А как отловить последнее Form_Resize() игнорируя все до него. :roll:

Спасибо.
Есть 10 типов людей. Те, кто понимает двоичную систему исчисления, и те, кто не понимает...

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

Сообщение tyomitch » 30.07.2006 (Вс) 17:35

WM_WINDOWPOSCHANGED
Изображение

Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 30.07.2006 (Вс) 22:44

А как установить минимальный-максимальный размер формы?
Подпись находится в стадии разработки...

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

Сообщение GSerg » 30.07.2006 (Вс) 23:08

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

IIIypuk
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 10.06.2006 (Сб) 12:39

Сообщение IIIypuk » 06.08.2006 (Вс) 11:40

Я наверно что то не так делаю, но отлавливается не последнее событие...

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

Private Sub Form_Load()
    OldWindowProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
    Call SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf SubClass1_WndMessage)
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Call SetWindowLong(Me.hwnd, GWL_WNDPROC, OldWindowProc)
End Sub


В модуле:

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

Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public 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)
Const WM_WINDOWPOSCHANGED = 71
Public OldWindowProc As Long

Public Function SubClass1_WndMessage(ByVal hwnd As Long, ByVal Msg As Long, ByVal wp As Long, ByVal lp As Long) As Long

    SubClass1_WndMessage = CallWindowProc(OldWindowProc, hwnd, Msg, wp, lp)
    If Msg = 71 Then Debug.Print "Last resize"
   
End Function


В чём ошибка?
Есть 10 типов людей. Те, кто понимает двоичную систему исчисления, и те, кто не понимает...

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

Сообщение tyomitch » 06.08.2006 (Вс) 11:54

ну, тогда WM_EXITSIZEMOVE
Изображение

IIIypuk
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 10.06.2006 (Сб) 12:39

Сообщение IIIypuk » 06.08.2006 (Вс) 12:09

Ясно, спасибо. =)
Const WM_EXITSIZEMOVE = &H232

Просто смотрел в стандартном WIN32API.TXT, не нашел там такой константы. :oops:
Есть 10 типов людей. Те, кто понимает двоичную систему исчисления, и те, кто не понимает...


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

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

Сейчас этот форум просматривают: SemrushBot и гости: 81

    TopList