Изменение размера формы

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

Изменение размера формы

Сообщение IAMRAT » 17.03.2017 (Пт) 17:18

Есть форма BorderStyle=0. Как можно реализовать изменение размера формы, как у BorderStyle=2?

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Изменение размера формы

Сообщение Mikle » 17.03.2017 (Пт) 18:05

Ну элементарно же, если чуть подумать. Вот я для ресайза по X сделал пример, осталось дописать для Y и учесть случай, когда меняются оба размера.
Вложения
FormResize.zip
(1.63 Кб) Скачиваний: 165

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

Re: Изменение размера формы

Сообщение Хакер » 18.03.2017 (Сб) 1:01

IAMRAT писал(а):Есть форма BorderStyle=0. Как можно реализовать изменение размера формы, как у BorderStyle=2?

Ну и какой смысл лишать окно природной функциональности осознанно, а потом борясь с ситуацией возвращать окну поведения, которое у него и так было?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

bon818
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 267
Зарегистрирован: 29.08.2009 (Сб) 4:49
Откуда: Ташкент

Re: Изменение размера формы

Сообщение bon818 » 18.03.2017 (Сб) 10:56

Для формы с стилем BorderStyle=2, нужно:
Код: Выделить всё
Private Sub Form_Load()
'Me.BorderStyle = 2 (уже есть)
Me.Caption = ""
'Me.ControlBox = False ( установить в ручную)
End Sub

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Изменение размера формы

Сообщение Mikle » 18.03.2017 (Сб) 11:06

bon818 писал(а):Для формы с стилем BorderStyle=2, нужно:

И останется бордюр, клиентская часть формы не распространится на всю форму. Хотя это ли нужно топикстартеру?

bon818
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 267
Зарегистрирован: 29.08.2009 (Сб) 4:49
Откуда: Ташкент

Re: Изменение размера формы

Сообщение bon818 » 18.03.2017 (Сб) 11:19

Mikle писал(а):
bon818 писал(а):Для формы с стилем BorderStyle=2, нужно:

И останется бордюр, клиентская часть формы не распространится на всю форму. Хотя это ли нужно топикстартеру?

Не совсем понял про: клиентскую часть формы, клиентскую часть не меняется-же, как была так и есть тех же размеров.
А бордюр можно и убрать, через WINAPI.
По хорошему, для этого случая, нужно все делать через WINAPI, я бы так сделал.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Изменение размера формы

Сообщение Mikle » 18.03.2017 (Сб) 11:32

bon818 писал(а):Не совсем понял про: клиентскую часть формы

Добавь в свой код строки:
Код: Выделить всё
  ScaleMode = vbTwips
  Debug.Print Width - ScaleWidth

Увидишь разницу между формой и её клиентской частью. На бордюре, к примеру, нельзя рисовать, там не работает MouseMove.
bon818 писал(а):А бордюр можно и убрать, через WINAPI

Если удастся убрать, не сломав ресайз мышью - хорошо.

bon818
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 267
Зарегистрирован: 29.08.2009 (Сб) 4:49
Откуда: Ташкент

Re: Изменение размера формы

Сообщение bon818 » 18.03.2017 (Сб) 11:56

Mikle писал(а):Увидишь разницу между формой и её клиентской частью. На бордюре, к примеру, нельзя рисовать, там не работает MouseMove.

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

bon818 писал(а):Если удастся убрать бордюр, не сломав ресайз мышью - хорошо.

Опять же, как бы сделал я:
Оставил бордюр в покое, мне он только на пользу(эстетика), но задал бы ему плоский стиль, при желании подкрасил нужным цветом(привет WinAPI+Subclass).

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Изменение размера формы

Сообщение The trick » 18.03.2017 (Сб) 12:40

Попробуй перехватывать WM_NCHITTEST.
viewtopic.php?f=15&t=45323
UA6527P

bon818
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 267
Зарегистрирован: 29.08.2009 (Сб) 4:49
Откуда: Ташкент

Re: Изменение размера формы

Сообщение bon818 » 18.03.2017 (Сб) 16:36

bon818 писал(а):Если удастся убрать бордюр, не сломав ресайз мышью - хорошо.

Вот что я имел ввиду.
Набросал пример.
Рамка не куда не делать, естественно.
Вложения
STYLE_THICKFRAME.zip
Пример.
(12.67 Кб) Скачиваний: 164

IAMRAT
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 04.04.2005 (Пн) 13:17

Re: Изменение размера формы

Сообщение IAMRAT » 20.03.2017 (Пн) 12:27

Mikle писал(а):Ну элементарно же, если чуть подумать. Вот я для ресайза по X сделал пример, осталось дописать для Y и учесть случай, когда меняются оба размера.

Вопрос: Почему устанавливаешь ScaleMode в пиксели?

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Изменение размера формы

Сообщение Mikle » 20.03.2017 (Пн) 15:24

IAMRAT писал(а):Почему устанавливаешь ScaleMode в пиксели?

Можно оставить в твипах, будет так:
Код: Выделить всё
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
  Dim xx As Single

  If ReSizeMode Then
    xx = Width + x - mx
    If xx > 0 Then
      Move Left, Top, Width + x - mx, Height
      mx = x
    End If
  Else
    If x < ScaleWidth And x > ScaleWidth - 8 * Screen.TwipsPerPixelX Then
      MousePointer = 9
    Else
      MousePointer = 0
    End If
  End If
End Sub

Не важно в каких единицах измеряется клиентская часть формы, главное учесть это в расчётах.

IAMRAT
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 04.04.2005 (Пн) 13:17

Re: Изменение размера формы

Сообщение IAMRAT » 20.03.2017 (Пн) 15:47

Но, такой способ предполагает, что у формы есть не видимая рамка. Если в плотную к краю будет расположен элемент управления, то работать не будет. Поэтому я думал, что может как-то через API можно. Но все ровно огромное спасибо!

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Изменение размера формы

Сообщение Mikle » 20.03.2017 (Пн) 15:54

IAMRAT писал(а):Если в плотную к краю будет расположен элемент управления, то работать не будет.

Будет.


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

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

Сейчас этот форум просматривают: Bing-бот и гости: 51

    TopList