равномерное смещение объектов

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

равномерное смещение объектов

Сообщение KAPRIZ » 14.02.2006 (Вт) 16:17

Приветики, помогите мне пожалуйста

подскажите или покажите как сделать так чтобы элементы на форме при изменении размеров формы равномерно смещались: при уменьшении размеров к левому краю формы т.е к нулю, и в обратную сторону к первоначальному виду

формочка в файлике


спасибки
Вложения
qwert.rar
(1.43 Кб) Скачиваний: 33

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

Сообщение alibek » 14.02.2006 (Вт) 16:21

Обрабатываешь событие Form_Resize (исключая случаи с WindowState = vbMinimized), сдвигаешь (Move) в соответствии с шириной (ScaleWidth) и высотой (ScaleHeight) рабочей области.
Lasciate ogni speranza, voi ch'entrate.

KAPRIZ
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 14.02.2006 (Вт) 15:51

Сообщение KAPRIZ » 15.02.2006 (Ср) 3:24

а маааленький примерчик можно?

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

Сообщение alibek » 15.02.2006 (Ср) 8:29

Код: Выделить всё
Private Sub Form_Resize()
If WindowState = vbMinimized Then Exit Sub
cmdClose.Move ScaleWidth - cmdClose.Width - 120, ScaleHeight - cmdClose.Height - 120
End Sub

Кнопка Close всегда будет в нижнем правом углу формы.
Lasciate ogni speranza, voi ch'entrate.

KAPRIZ
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 14.02.2006 (Вт) 15:51

Сообщение KAPRIZ » 15.02.2006 (Ср) 11:57

надо чтобы они сдвигались как закладки в фотошопе в кучку
а у меня с математикой проблемы посчитать никак ен могу

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

Сообщение alibek » 15.02.2006 (Ср) 11:59

Ничего не понял.
Какая кучка?
Lasciate ogni speranza, voi ch'entrate.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 15.02.2006 (Ср) 12:30

Ты имеешь ввиду, чтоб расстояние между контролами сокращалось в зависимости от ширины формы? Если да, то руководствуйся принципом, который тебе дал Alibek, там на самом деле все очень просто, нужно лишь немного подумать... :wink:
А я все практикую лечение травами...

KAPRIZ
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 14.02.2006 (Вт) 15:51

Сообщение KAPRIZ » 15.02.2006 (Ср) 14:46

Twister
ты прав это и имею ввиду
но в голову никакие мысли не лезут

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 15.02.2006 (Ср) 15:00

Смотри:
Код Алибека выравнивает кнопку относительно левого края (те сдвигает так, чтобы кнопка была как можно правее, но при этом вся помещалась на форме). Сдвигай ее относительно другой точки и все. При этом точка должна зависить от ширины формы. Вот этот код будет центрировать кнопку:
Код: Выделить всё
cmd.Left=Form.Width/2-cmd.width/2

Как он работает? Form.Width/2 это середина формы. От носительно нее и будем двигать. Нам нужно чтоб середина формы совпадала с серединой кнопки. Для этого ширину кнопки разделим на 2 (правильно? :lol: ). И остается лишь сдвинуть кнопку на половину ее ширины относительно центра формы.
ВотЬ...
А я все практикую лечение травами...

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

Сообщение alibek » 15.02.2006 (Ср) 15:15

Twister писал(а):Form.Width

Неправильно это.
Использовать нужно клиентскую область (ScaleWidth).
Lasciate ogni speranza, voi ch'entrate.

KAPRIZ
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 14.02.2006 (Вт) 15:51

Сообщение KAPRIZ » 16.02.2006 (Чт) 12:21

что то получилось но как всегда не то что хочется
все получается нормально когда размеры имэджов одинаковы
кака только у одного или более имэджов размер оличается от остальных получается ерунда

что надо сделать еще чтобы работало нормально, как мне этого хочется?
Вложения
Новая папка.rar
(1.86 Кб) Скачиваний: 28

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 16.02.2006 (Чт) 14:24

2 alibek
Я знаю. Просто хотел быстрее написать...

2 KAPRIZ
Что это за строчки, типа
Image1(4).Left = (X1 / 1.38219895287958)
???
Смотри, в твоем случае алгоритм таков:
Получаешь ширину всех имаджей, вычитаешь это из ширины формы и делишь на количество имаджей.
Что это получилось? А получилось это расстояние между имаджами, при котором они все поместятся на форме и будут на одинаковом расстоянии друг от друга.
А я все практикую лечение травами...

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 16.02.2006 (Чт) 14:33

Создай новую форму. Назови ее frm. На нее положи три кнопки разной ширины. Назови их cmd1, cmd2 и cmd3. Ну а вот текст модуля формы:
Код: Выделить всё
Option Explicit

Private Sub Form_Load()
Form_Resize
End Sub

Private Sub Form_Resize()
Dim r As Integer
r = (frm.ScaleWidth - (cmd1.Width + cmd2.Width + cmd3.Width)) / 3
cmd1.Left = 30
cmd2.Left = cmd1.Left + cmd1.Width + r
cmd3.Left = cmd2.Left + cmd2.Width + r
End Sub

Я специально не сделал массив контролов, думая что так будет легче понять принцип...
А я все практикую лечение травами...


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 109

    TopList