|
Изменение размера элементов внутри формы - Стр. 1 | |||||||
Эта статья опубликована на сайте VBNet       Интерфейс пользователя, популяризированный компанией Microsoft, быстро завоевал пользователей своим чрезвычайным удобством. Главным принципом организации этого интерфейса можно считать то, что каждое приложение состоит из одного или более окон. Мы можем открыть несколько приложений и работать с ними одновременно. При этом одним из замечательных свойств окон является возможность их произвольного размещения на экране монитора.
       К сожалению, обойтись без этих первичных приготовлений нельзя, но в целях экономии вашего времени к статье прилагается уже готовый проект-каркас созданный в среде VB 6.0.       Итак, создайте стандартный exe-проект. В единственную форму проекта Form1 добавьте хотя бы один элемент меню. Определите для формы следующие свойства: ScrollBars = false BorderStyle = 2 'Sizeable      Теперь необходимо позаботиться о главных героях нашей статьи - элементах управления. Добавьте на форму текстовое поле Text1 и кнопку Button1. Расположите их так, чтобы текстовое поле занимало практически всю площадь формы, оставляя только место внизу для кнопки. Свойства Top и Left установите равными 0. Меню и элементы управления не будут играть никакой практической роли, - для нас будут важны лишь их размеры. Запустите проект. Результатом должно быть нечто похожее на Рис 1.
      А теперь попробуйте изменить размеры формы. Все элементы управления остаются на своих местах и при своих размерах. Для того чтобы элементы правильно позиционировались на форме, необходимо добавить в обработку события изменения размера формы соответствующий код. Мы должны закрепить некоторые параметры элементов управления относительно размеров формы-контейнера. Вычислите, например, разницу следующих свойств Form1.Width - Form1.Text1.Width. Число, которое мы получим - это разница между шириной формы и шириной текстового поля. Запомните его, для нас обозначим его как А. Очевидно, что при любых размерах формы эта разница должна оставаться постоянной.
Private Sub Form_Resize() Text1.Width = Me.Width - А Text1.Height = Me.Height - В End Sub      Не забудьте вместо А и В вставить реальные значения, которые у Вас получились. Благодаря обработчику изменение размеров формы будет приводить к соответствующим изменениям в параметрах текстового поля. Запустите проект и снова поэкспериментируйте с изменением размеров окна. Размеры текстового окна изменяются правильно, а вот кнопка никак не реагирует. Что ж уважим и кнопку. Размеры кнопки можно оставлять постоянными, а вот ее положение по вертикали необходимо изменять при изменении размеров окна. Найдем еще одну разницу Form1.Height - Form1.Button1.Top. Для чего мы его вычисли, думаю пояснять не нужно. Запомним число как С. Модифицируйте обработчик события Resize следующим образом: Private Sub Form_Resize() Text1.Width = Me.Width - А Text1.Height = Me.Height - В Button1.Top = Me.Height - C End Sub      Запустите проект. Теперь как бы все нормально, но это, к сожалению, до поры до времени. Вот тут и начинаются те самые нюансы, о которых было сказано в начале статьи. Таких нюансов можно по началу не заметить, но в процессе реального использования рано или поздно они все равно "всплывают".       Попробуйте уменьшить размеры окна до совсем малых размеров. Возникает ошибка, когда мы пытаемся присвоить свойствам элементов отрицательные значения. Ширина окна должна быть достаточно для размещения кнопки с учетом расстояний до краев формы, т.е. не меньше, чем Button1.Width + TextWDiff. Что касается высоты, то нужно учесть, что кнопка не должна "залазить" на текстовое поле. Для этого необходимо оставить для нее место, равное ее высоте, а также зарезервировать место для текстового поля. Пускай, для простоты, эта величина будет равняться 2B.       Чтобы меньше использовать условные обозначения, определим дополнительные переменные. Новый вариант обработчика имеет следующий вид: Private Sub Form_Resize() Dim TextWDiff As Integer Dim TextHDiff As Integer Dim ButtTDiff As Integer TextWDiff = А TextHDiff = В ButtTDiff = С If Me.Height < 2 * В Then Me.Height = 2 * В If Me.Width < Button1.Width + TextWDiff Then Me.Width = _ Button1.Width + TextWDiff Text1.Width = Me.Width - TextWDiff Text1.Height = Me.Height - TextHDiff Button1.Top = Me.Height - ButtTDiff End Sub |
||||||||
Designed by ProGa ® |