Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Resizzzze Добавлено: 28.06.03 00:56  

Автор вопроса:  Zeus | Web-сайт: apirussia.by.ru | ICQ: 161801353 

Типа дело такое... Имеется форма. Изменяю размеры формы, форму можно уменьшить до миннимума. А, допустим, необходимо, чтобы минимальные размеры формы были 200х200 (так, к примеру). В Form_Resize добавляю нужный код, но при попытке уменьшить ширину или высоту до рамеров менее 200 единиц форма на некоторый промежуток времени (<1 мс) принимает размеры менее 200 единиц, при этом границы как бы нооровятся вернуться назад, но мышь то двигается, и получается такой себе ОЧЕНЬ НЕКРАСИВЫЙ ЭФФЕКТ(((

Запутано както написал, конечно... Но если кто то не понял, вот код, всавьте в любой проект и поизменяйте размеры формы. Всё поймете.

Private Sub Form_Resize()
    If WindowState = vbMinimized Then Exit Sub
    If Me.Height < 5000 Then Me.Height = 5000
    If Me.Width < 5000 Then Me.Width = 5000
End Sub

Ответить

  Ответы Всего ответов: 8  

Номер ответа: 1
Автор ответа:
 Vit



Вопросов: 68
Ответов: 62
 Web-сайт: www.home-soft.jino-net.ru
 Профиль | | #1
Добавлено: 28.06.03 09:19

В форме написать:

Private Const GWL_WNDPROC = (-4)

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

А в модуле:

Public OldWindowProc As Long ' Original window proc

Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long

Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSource As Any, ByVal ByteLen 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 WM_GETMINMAXINFO = &H24

Type POINTAPI

x As Long

y As Long

End Type

Type MINMAXINFO

ptReserved As POINTAPI

ptMaxSize As POINTAPI

ptMaxPosition As POINTAPI

ptMinTrackSize As POINTAPI

ptMaxTrackSize As POINTAPI

End Type

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

If Msg = WM_GETMINMAXINFO Then

Dim MinMax As MINMAXINFO

CopyMemory MinMax, ByVal lp, Len(MinMax)

MinMax.ptMinTrackSize.x = 200 \ Screen.TwipsPerPixelX

MinMax.ptMinTrackSize.y = 200\ Screen.TwipsPerPixelY

MinMax.ptMaxTrackSize.x = Screen.Width \ Screen.TwipsPerPixelX

MinMax.ptMaxTrackSize.y = Screen.Height \ Screen.TwipsPerPixelY

CopyMemory ByVal lp, MinMax, Len(MinMax)

SubClass1_WndMessage = 1

Exit Function

End If

SubClass1_WndMessage = CallWindowProc(OldWindowProc, hwnd, Msg, wp, lp)

End Function

Ответить

Номер ответа: 2
Автор ответа:
 Zeus



ICQ: 161801353 

Вопросов: 63
Ответов: 220
 Web-сайт: apirussia.by.ru
 Профиль | | #2
Добавлено: 30.06.03 13:52

спасиба)))))

 

Ответить

Номер ответа: 3
Автор ответа:
 Zeus



ICQ: 161801353 

Вопросов: 63
Ответов: 220
 Web-сайт: apirussia.by.ru
 Профиль | | #3
Добавлено: 30.06.03 13:52

спасиба)))))

 

Ответить

Номер ответа: 4
Автор ответа:
 Zeus



ICQ: 161801353 

Вопросов: 63
Ответов: 220
 Web-сайт: apirussia.by.ru
 Профиль | | #4
Добавлено: 30.06.03 13:53

спасиба)))))

Ответить

Номер ответа: 5
Автор ответа:
 Zeus



ICQ: 161801353 

Вопросов: 63
Ответов: 220
 Web-сайт: apirussia.by.ru
 Профиль | | #5
Добавлено: 30.06.03 14:00

Эт апять я...

Короче, проверил етот код, и вот что скажу:

ничего он не делает.... Т.е. он при загрузке формы бирёт и делает мне минимальные размеры формы...  А глюки с РЕСАЙЗОМ так и остались...

===========================

а может вы не тот код дали?

Ответить

Номер ответа: 6
Автор ответа:
 Vit



Вопросов: 68
Ответов: 62
 Web-сайт: www.home-soft.jino-net.ru
 Профиль | | #6
Добавлено: 30.06.03 15:06

Это CALLBACK-функция, вызываемая ОС при воздействии на окно. В Resize можешь ничего не писать. Хотя, у меня тоже возникали глюки с этим способом, но зато окно не уменьшается  и не увеличивается за пределы заданных размеров.

 

MinMax.ptMinTrackSize.x = 200 \ Screen.TwipsPerPixelX - мин. ширина окна

MinMax.ptMinTrackSize.y = 200\ Screen.TwipsPerPixelY - мин. высота окна

MinMax.ptMaxTrackSize.x = Screen.Width \ Screen.TwipsPerPixelX - макс. ширина окна

MinMax.ptMaxTrackSize.y = Screen.Height \ Screen.TwipsPerPixelY - макс. высота окна

Но возможно, я чего-то не понял?..

Ответить

Номер ответа: 7
Автор ответа:
 Vit



Вопросов: 68
Ответов: 62
 Web-сайт: www.home-soft.jino-net.ru
 Профиль | | #7
Добавлено: 30.06.03 15:08
А Resize то тебе зачем уже? Это CALLBACK-функция

Ответить

Номер ответа: 8
Автор ответа:
 Zeus



ICQ: 161801353 

Вопросов: 63
Ответов: 220
 Web-сайт: apirussia.by.ru
 Профиль | | #8
Добавлено: 08.07.03 00:14
спсбо, понял все!

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам