Масштабирование интерфейса

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

Масштабирование интерфейса

Сообщение PLA » 07.10.2005 (Пт) 9:48

Как в профессиональные разработчики на VB добиваются, что бы при изменение размера формы изменялись положение и/или размер контролов на форме.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 07.10.2005 (Пт) 10:30

Обрабатывают Form_Resize.

Код: Выделить всё
Private Sub Form_Resize()
    Command1.Move Form1.ScaleWidth - Command1.Width - 50,50
    Command2.Move Command1.left, Command1.Height + 100
End Sub


Для каждого контрола на форме

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 07.10.2005 (Пт) 12:04

AmedНе, так новички :) Профессиональные делают сабклассинг :lol:
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

PLA
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 08.04.2005 (Пт) 16:09
Откуда: Москва

Сообщение PLA » 07.10.2005 (Пт) 12:45

vvs_adm писал(а):AmedНе, так новички :) Профессиональные делают сабклассинг :lol:

А с помощью сабклассинга легче?
Тяжело как то для каждого контрола высчитывать где он должен находиться и его размер.
А нельзя попроще? Для каждого контрола высчитывать новое положение задача не из легких. Когда добавляешь элементы на форму, как то не задумываешься об его ширине, длине в пикселях и об координатах на форме. Что бы это учитывать нужно сделать таблицу с координатами при стандартном размере форме и менять эти данные в зависимости от Resize.
Я понимаю, что VB не знает где должен находится контрол при изменение размера. Но наверняка есть стандартный алгоритм. Например при увеличение ширины, у всех контролов увеличивается ширина на одинаковый коэффициент и относительно линии центра формы отношения остаются те же.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 07.10.2005 (Пт) 12:48

Каждый программист решает эту задачу по-своему.

Опишите внешний вид программы. Тогда советы будут не абстрактные, а практические.

Еще лучше - скриншот.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 07.10.2005 (Пт) 12:57

Можно и полегче.
Купи компонент Olectra Resizer.
Lasciate ogni speranza, voi ch'entrate.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 07.10.2005 (Пт) 13:07

Надо в предыдущий пост вставить 2 смайлика ';)': после "купи" и после точки.

PLA
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 08.04.2005 (Пт) 16:09
Откуда: Москва

Сообщение PLA » 07.10.2005 (Пт) 13:41

Amed писал(а):Опишите внешний вид программы. Тогда советы будут не абстрактные, а практические.
Еще лучше - скриншот.


Ok.
Вложения
OM.JPG
Скриншот программы
OM.JPG (40.05 Кб) Просмотров: 294

PLA
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 08.04.2005 (Пт) 16:09
Откуда: Москва

Сообщение PLA » 07.10.2005 (Пт) 13:43

Olectra Resizer - это мысль.

А Вы это используете? Нравится?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 07.10.2005 (Пт) 14:05

Нет, я кодирую руками.
Но Olectra Resizer достаточно качественный продукт.
Lasciate ogni speranza, voi ch'entrate.

VAngel
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 81
Зарегистрирован: 13.01.2005 (Чт) 0:10
Откуда: 2:5030

Сообщение VAngel » 07.10.2005 (Пт) 19:11

А как можно реализовать так что бы при хватании мышкой за край можно было изменить размер контрола, скажем кнопки?

dimix
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 174
Зарегистрирован: 08.02.2005 (Вт) 22:47

Сообщение dimix » 07.10.2005 (Пт) 21:19

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


Может я чего не понял, но почему нельзя использовать
Код: Выделить всё
Command1.Width = Command1.Width + 100

?
Хочешь коэффициент - ну не прибавляй, а умножай на коэффициент. Стало окно шире в 1.24 раза - умножь Width контрола на 1.24. Относительно линии центра - взяли Width формы и поделили на 2 - вот тебе и центр, пляши от него.

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 07.10.2005 (Пт) 21:48

dimix писал(а):Может я чего не понял, но почему нельзя использовать
Код: Выделить всё
Command1.Width = Command1.Width + 100

?
Хочешь коэффициент - ну не прибавляй, а умножай на коэффициент. Стало окно шире в 1.24 раза - умножь Width контрола на 1.24. Относительно линии центра - взяли Width формы и поделили на 2 - вот тебе и центр, пляши от него.
Ну так помимо .width изменять надо и .left и .top Вот человек и спрашивает, по какой формуле ему изменять эти параметры :) Хотя все-таки для каждой формы тут "вручную" считать надо. Например кнопку "Пуск" в правом нижнем углу вполне достаточно оставлять в правом нижнем углу, т.е. изменять только .left и .top А вот некоторые элементы нужно и по ширине менять...

To PLA Но если ты хочешь именно пропорционально изменять размер всей формы, то тебе нужно запомнить стартовые .left .top .width для всех контролов и для формы, а в форм_ресайзе
Код: Выделить всё
For Each cntrTemp in Form.Controls
    cntrTemp.NewSize=cntrTemp_StartSize*Form_NewSize/Form_StartSize
Next cntrTemp
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 09.10.2005 (Вс) 4:02

ИМХО:
Если такая форма, как в атачменте - то все контролы ресайзить - чушь. Ресайзиться должна только рабочая область (грид, листвью или текстбокс).
Толку от кнопки пропорционального изменения "ОК"??
Может еще и шрифт менб при увеличении формы - увеличивать?
Тут лучше использовать несколько пикчербоксов со свойствами "align"
А оставшуюся часть заполнить главным контролом.
.
Единственно, что кнопку "Выход", можно привязать к ширине формы и ограничить минимально-возможный размер окна.
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

CORBA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 179
Зарегистрирован: 22.11.2003 (Сб) 13:41
Откуда: Ukraine-Crimea-Feodosia

Сообщение CORBA » 09.10.2005 (Вс) 10:50

Для данного случая ИМХО лучше сделать две процедуры ресайза для состояния формы vbNormal и vbMaximized, а все остальные преобразования формы запретить.
У каждой сложной задачи есть множество простых для понимания, но неправильных решений.

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 09.10.2005 (Вс) 19:25

CORBA, не согласен. Очень раздражает, когда список нужно скролить, когда в тоже время окно занимает только четверть экрана.
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...


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

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

Сейчас этот форум просматривают: SemrushBot и гости: 125

    TopList