Запрет Resize формы меньше заданных значений

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

Запрет Resize формы меньше заданных значений

Сообщение Gogic » 18.09.2011 (Вс) 16:11

Для формы BorderStyle=2 требуется реализовать минимальный размер, до которого можно ее сжимать.

Сделал так:
Код: Выделить всё
Private Sub Form_Resize()
If Me.ScaleWidth < 730 Then
Me.Width = 730 * Screen.TwipsPerPixelX
End If
If Me.ScaleHeight < 400 Then
Me.Height = 400 * Screen.TwipsPerPixelY
End If

Call ResizeElements
End Sub


Но при этом, курсор "ресайзинга" все равно тянется дальше, и создается неприятный эффект на форме.

Как быть?
Может останавливать курсор через SetCursorPos, или может есть проще варианты?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Запрет Resize формы меньше заданных значений

Сообщение Хакер » 18.09.2011 (Вс) 17:29

Gogic писал(а):Как быть?
Может останавливать курсор через SetCursorPos, или может есть проще варианты?


Разработчикам Windows нужно было бы быть последними недоумками, чтобы не предусмотреть способ задать минимальные и максимальные габариты для ресайзинга окон. Поскольку недоумками они не являются, как минимум в этом вопросе, они, о счастье, предусмотрели такую возможность.

Организовано это так: оконная подсистема «спрашивает» у окна: до каких пор тебя можно растянуть/сжать? Окно отвечает до каких. Собственно, и всё, дальше система сама ограничивает ресайзинг и даже ставит клип-рект на указатель мыши.

Общение оконной подсистемы и окна организовано так: оконная подсистема шлёт окну сообщение WM_GETMINMAXINFO, а окно (вернее его оконная процедура) обрабатывает это сообщения, и в рамках обработки заполняет структуру, ссылку на которую передали.

В норме, поскольку разработчик окна сам пишет оконную процедуру, то никакой проблемы нет. Но VB-исты не пишут оконную процедуру, поэтому им во-первых, надо делать сабклассинг, а во-вторых, они тут обычно всякие ошибки допускают.

Ну и в рамках послесловия. Этот вопрос столько раз уже обсуждали, что наверное надо банить за игнорирование поиска.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


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

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

Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 65

    TopList