Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: Размеры формы Добавлено: 16.06.03 13:48  

Автор вопроса:  Vit | Web-сайт: www.home-soft.jino-net.ru
У меня был где-то пример, в котором ставилось ограничение на изменение размеров окна, но я не могу его найти. Может кто-нибудь может выстать такой пример?

Ответить

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

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



ICQ: 50804884 

Вопросов: 72
Ответов: 642
 Web-сайт: freeloader.folder-pro.net
 Профиль | | #1
Добавлено: 16.06.03 15:36

Private Sub Timer1_Timer()
If Form1.ScaleWidth <> 200 Or Form1.scaleheigth <> 400 Then
' твои размеры
End If
End Sub

Ответить

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



ICQ: 50804884 

Вопросов: 72
Ответов: 642
 Web-сайт: freeloader.folder-pro.net
 Профиль | | #2
Добавлено: 16.06.03 15:43
Перепутал просто Width and Heigth

Ответить

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


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #3
Добавлено: 16.06.03 20:05

|¤™•†Raven†•™¤I, ты не прав. Делать надо так:

Private Sub Form_Resize()

If Me.WindowState<>vbMinimized Then

If Me.Width<300 Then Me.Width=300

If Me.Width>500 Then Me.Width=500

If Me.Height<200 Then

If Me.Height>400 Then Me.Height=400

End If

End Sub

А вообще же, если очень крутой и не лень использовать API, можно делать так:

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

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 = 3975 \ Screen.TwipsPerPixelX

MinMax.ptMinTrackSize.y = 1740 \ Screen.TwipsPerPixelY

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

MinMax.ptMaxTrackSize.y = 3480 \ 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

Тогда рамка растягивания (уж не знаю, как ее еще назвать) не будет даже выходить за края выбранного размера из-за того, что процедура окна, обрабатывая сообщение ресайза для этого окна не будет вызывать для этого стандартную оконную функцию, если размер окна больше (меньше) заданного....

Ответить

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


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #4
Добавлено: 16.06.03 20:06

|¤™•†Raven†•™¤I, ты не прав. Делать надо так:

Private Sub Form_Resize()

If Me.WindowState<>vbMinimized Then

If Me.Width<300 Then Me.Width=300

If Me.Width>500 Then Me.Width=500

If Me.Height<200 Then

If Me.Height>400 Then Me.Height=400

End If

End Sub

А вообще же, если очень крутой и не лень использовать API, можно делать так:

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

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 = 3975 \ Screen.TwipsPerPixelX

MinMax.ptMinTrackSize.y = 1740 \ Screen.TwipsPerPixelY

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

MinMax.ptMaxTrackSize.y = 3480 \ 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

Тогда рамка растягивания (уж не знаю, как ее еще назвать) не будет даже выходить за края выбранного размера из-за того, что процедура окна, обрабатывая сообщение ресайза для этого окна не будет вызывать для этого стандартную оконную функцию, если размер окна больше (меньше) заданного....

Ответить

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



ICQ: 50804884 

Вопросов: 72
Ответов: 642
 Web-сайт: freeloader.folder-pro.net
 Профиль | | #5
Добавлено: 17.06.03 07:26

Все равно, то будет работать пусть и не красиво, но будет

Ответить

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



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

То, который с API - это то, что мне надо. Спасибо.

Ответить

Страница: 1 |

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



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