Продумать алгоритм ресайзинга Frame в форме

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

Продумать алгоритм ресайзинга Frame в форме

Сообщение kibernetics » 10.01.2007 (Ср) 14:27

у меня возникла проблема на стадии решения вопроса об изменении размера фрейма на форме. я не могу понять когда нужно контролировать событие?
в общем, я нашёл точки когда мне нужно ресайзить фрейм, код:
Код: Выделить всё
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Dim lvwX As Single
        lvwX = Frame2.Left
If X < lvwX - 15 And X > lvwX - 45 Then 'And Y > 825 And Y < 6930 Then
        Me.MousePointer = ccSizeEW
        If Button = 1 Then Frame2.Left = X
        Else
        Me.MousePointer = ccArrow
        End If
End Sub


но как сделать так, чтоб при нажатии левой мыши, фрейм "позиционировался" по Х согласно курсору мыши? в моём коде почемуто фрейм при нажатии кнопки двигается только влево.

schalexey
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 18.02.2005 (Пт) 17:41
Откуда: Сургут

Re: Продумать алгоритм ресайзинга Frame в форме

Сообщение schalexey » 10.01.2007 (Ср) 14:57

Код: Выделить всё

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Dim lvwX As Single
        lvwX = Frame2.Left
       
If X < lvwX - 15 Or X > lvwX - 45 Then 'And Y > 825 And Y < 6930 Then
        Me.MousePointer = ccSizeEW
        If Button = 1 Then Frame2.Left = X
        Else
        Me.MousePointer = ccArrow
        End If
End Sub


Бегает и вправо и в лево... ошибка в условии была, надо ставить было ИЛИ (OR)

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 10.01.2007 (Ср) 14:58

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


З.Ы. Привиденный код мягко говоря плохо читаем, стоит пользоваться отступами

З.З.Ы. и это... тебе что таки надо: изменить размер или сместить фрейм?

З.З.Ы. And на Or замени
Весь мир матрица, а мы в нем потоки байтов!

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Сообщение kibernetics » 10.01.2007 (Ср) 16:02

schalexey
классно! спасибо
!Viper!
да, было бы неплохо одолеть сам ресайзинг, т.е. .Left можно было двигать, и ширина фрейма изменялась бы.
что могли бы посоветовать? это и есть моя задача.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 10.01.2007 (Ср) 18:07

При ресайзинге, одновременно со смещением левой кромки надо увеличивать/уменьшать ширину, аналогично и для правой кромки. Для верхней и нижней кромок, соответсвенно будешь увеличивать/уменьшать высоту.
Весь мир матрица, а мы в нем потоки байтов!

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Сообщение kibernetics » 10.01.2007 (Ср) 18:54

а за счет чего её уменьшать? мне нужно изменять левую кромку. правая в принципе всегда от края формы - 100
если написать так:
Код: Выделить всё
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Dim lvwX As Single
    Dim lvwW
    lvwX = Frame2.Left
    lvwW = Frame2.Width   
If X < lvwX - 15 Or X > lvwX - 45 Then 'And Y > 825 And Y < 6930 Then
        Me.MousePointer = ccSizeEW
        If Button = 1 Then
              Frame2.Left = X
              Frame2.Widht = lvwW - lvwX
        Else
        Me.MousePointer = ccArrow
        End If
End Sub

то чтото не то вроде

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 10.01.2007 (Ср) 19:34

типа такого должно быть:

Код: Выделить всё
dim dx As Single

dx = X - Frame2.Left
Frame2.Left = X
Frame2.Width = Frame2.Width - dx


Этот код должен быть вместг твоего

Код: Выделить всё
Frame2.Left = X
Frame2.Widht = lvwW - lvwX



Естественно можно (и нужно) дополнительно проверить новую ширину на минимальный/максимальный размер
Весь мир матрица, а мы в нем потоки байтов!


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

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

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

    TopList