Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Как запретить resize окна


Автор: ProgramerForever 10.3.2008, 14:59
Привет всем! скажите, как ограничить минимальные (и максимальные) размеры окна. В Delphi есть свойства MinHeight MaxWidth или какие-то подобные, не помню точно. Они ограничивают ресайз окна. Пробовал в обработчике resize изменять размеры, но получается дёрганно, да и окно всё равно меняет размеры (потом программно обработчик подгоняет под минимум. но это не решение).

Автор: BorisVorontsov 10.3.2008, 15:36
Запросто. Лови и обрабатывай WM_SIZING/WM_WINDOWPOSCHANGING.

Автор: iff 10.3.2008, 15:44
http://forum.vingrad.ru/forum/topic-179889/anchor-entry1316594/0.html

Автор: JusTalionis 10.3.2008, 19:46
Если тебе просто надо запретить менять размеры (а не ограничивать макс-мин), то просто выставь свойство формы BorderStyle в Fixed Single (или Fixed Dialog, или другой какой-нибудь fixed).

Автор: Akina 11.3.2008, 09:27
Так надо ОГРАНИЧИТЬ (т.е. менять можно, но в заданных пределах) или ЗАПРЕТИТЬ (менять нельзя вообще)?

Автор: ProgramerForever 11.3.2008, 19:20
Ограничить. Это более гибкое решение, чем запретить.

Автор: Akina 11.3.2008, 21:30
В таком разе 
Код

Private Const MinWidth As Long = 8000
Private Const MaxWidth As Long = 12800
Private Const MinHeigth As Long = 6000
Private Const MaxHeigth As Long = 10240

Private Sub Form_Resize()
If Me.Width > MaxWidth Then Me.Width = MaxWidth
If Me.Width < MinWidth Then Me.Width = MinWidth
If Me.Height > MaxHeigth Then Me.Height = MaxHeigth
If Me.Height < MinHeigth Then Me.Height = MinHeigth
' не обязательно, но можно добавить
'DoEvents
End Sub

Автор: ProgramerForever 12.3.2008, 08:32
Нет, такое решение не подходит, я писал в первом топике: получается дёрганно, сами попробуйте.

Автор: Akina 12.3.2008, 09:11
Цитата(ProgramerForever @  12.3.2008,  09:32 Найти цитируемый пост)
получается дёрганно, сами попробуйте

У меня получается нормально, никаких дерганий.

Автор: JusTalionis 12.3.2008, 09:32
Тогда делаешь так:
Запрещаешь изменение размеров формы мышкой (делаешь ее Fixed, как было сказано), и изменяешь ее размеры программно:

Код

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
'X,Y, - мышиные координаты
wmin = 1000: wmax = 5000
hmin = 1000: hmax = 5000
If Button = 1 Then 'когда нажата левая кнопка мыши
  If X < wmax And X > wmin Then Form1.Width = X + 200
  If Y < hmax And Y > hmin Then Form1.Height = Y + 500
End If
End Sub


Ну можно еще приделать ограничение, чтоб мышь чувствовалась только у границы формы, сменить значок курсора на стрелочки ресайза, и тому подобные украшательства)))

Автор: Rrader 12.3.2008, 14:09
Пример в аттаче

Автор: Naghual 12.3.2008, 14:27
Rrader, отличный пример.

Автор: Akina 12.3.2008, 16:40
Пример размещен в FAQ

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)