Страница: 1 | 2 |
Вопрос: Контейнеры и БОООЛЬШОЙ глюк
Добавлено: 03.02.06 17:23
Автор вопроса: Fever
У меня на форме находится picCheat с индексом 0. Внутри него есть всякие элементы управления. Из кода с помощью инструкции Load я создаю еще несколько экземпляров picCheat. Однако содержимое picCheat не копируется. Тогда с помощью того же Load'a я создаю все эти элементы. Но так как они создаются на форме, необходимого эффекта достичь не удается. Когда я попробовал решить эту проблему с помощью API SetParent, перемещение наконец произошло и программа пришла к человеческому виду. Однако при ее завершении(в том числе с помощью End) я наблюдал следующий эффект: "Visual Basic 6 выполнил..."
В чем причина этого наглого глюка и как с ентим боротся? Если кто знает другие рациональные методы решения, просьба откликнуться.
P.S. Ассемблерные методы отладки ничего не дали.
Ответы
Всего ответов: 16
Номер ответа: 1
Автор ответа:
Victor
ICQ: 345743490
Вопросов: 42
Ответов: 385
Web-сайт:
Профиль | | #1
Добавлено: 03.02.06 18:09
Создай UserControl, помести эти элементы управления на него. А там и Load прекрасно их клонировать будет.
Номер ответа: 2
Автор ответа:
Fever
Вопросов: 60
Ответов: 808
Профиль | | #2
Добавлено: 03.02.06 18:23
THanks, но этот вариант я хотел бы избежать. Придется юзать Form и SetParent. Вопрос остается открытым до завтра.
Номер ответа: 3
Автор ответа:
Victor
ICQ: 345743490
Вопросов: 42
Ответов: 385
Web-сайт:
Профиль | | #3
Добавлено: 03.02.06 18:30
А зачем SetParent? Может проще пересчитать координаты и поместить его поверх нужного пикчера?
Номер ответа: 4
Автор ответа:
Fever
Вопросов: 60
Ответов: 808
Профиль | | #4
Добавлено: 03.02.06 18:51
Кхм... Так в том то и вся трабла что там ТАКИЕ координаты, что глаза на лоб лезут. Там в picContainer создается список из picCheats. А в начале есть еще и picHeader. Я уже молчу про всевозможные отступы, ресайз формы и изменение размера picCheats. Короче, если хочешь дам проект посмотришь.
Номер ответа: 5
Автор ответа:
Tamplier
ICQ: 298742928
Вопросов: 58
Ответов: 340
Профиль | | #5
Добавлено: 03.02.06 18:51
ага и
а у псевдородителя - наоборот на всяк случай...
Номер ответа: 6
Автор ответа:
Tamplier
ICQ: 298742928
Вопросов: 58
Ответов: 340
Профиль | | #6
Добавлено: 03.02.06 18:53
а на каждую процедуру - все внимательно отслеживать и перемещать / -рисовывать / -другойвариант.
Номер ответа: 7
Автор ответа:
Fever
Вопросов: 60
Ответов: 808
Профиль | | #7
Добавлено: 03.02.06 18:55
Проблема упирается еще и в быстродействие
Номер ответа: 8
Автор ответа:
Victor
ICQ: 345743490
Вопросов: 42
Ответов: 385
Web-сайт:
Профиль | | #8
Добавлено: 03.02.06 19:00
Никаких проблем.
Делаешь команду Move для контролов, которая сразу все пересчитает.
С ресайзами, конечно, посложнее. Но ведь на ресайзах так и так надо их двигать.
Быстродействие, конечно, не выиграет.
Номер ответа: 9
Автор ответа:
Victor
ICQ: 345743490
Вопросов: 42
Ответов: 385
Web-сайт:
Профиль | | #9
Добавлено: 03.02.06 19:01
Проект можешь дать, но у меня сейчас VB нет под рукой...
Номер ответа: 10
Автор ответа:
Fever
Вопросов: 60
Ответов: 808
Профиль | | #10
Добавлено: 03.02.06 19:02
Tamplier, а как ты смотришь на "дать проект"?
Номер ответа: 11
Автор ответа:
Victor
ICQ: 345743490
Вопросов: 42
Ответов: 385
Web-сайт:
Профиль | | #11
Добавлено: 03.02.06 22:44
dim i as long
i = ctl.index
top=top+picture1(i)
left=left+picture1(i)
ctl.move left,top,width,height
end sub
Вот. Вместо того, чтобы двигать контрол напрямую, вызывай этот саб.
Чтобы двигать пикчербокс, тоже можно сабчик написать.
Dim i as long
Dim dx as long, dy as long
dx = Top - Ctl.Top
dy = Left - Ctl.Left
i = Ctl.index
И тут к сожалению не вижу другого хорошего способа, кроме перечисления всего содержимого, и перемещения его на dx,dy
Label1(i).Move Label1(i).Left+dx, Label1(i).top+dy
...
Ctl.Move Left, Top, Width, Height
End Sub
Ну и все. А на всяких ресайзах просто вызывать эти сабчики вместо того, чтобы двигать их напрямую.
Номер ответа: 12
Автор ответа:
Fever
Вопросов: 60
Ответов: 808
Профиль | | #12
Добавлено: 04.02.06 14:45
Victor, давай я те прогу брошу?! Посмотришь и на мув, и на ресайз...
Номер ответа: 13
Автор ответа:
Victor
ICQ: 345743490
Вопросов: 42
Ответов: 385
Web-сайт:
Профиль | | #13
Добавлено: 05.02.06 13:29
Бросай, я не против. Вот только начать ее обработку смогу только когда обратно в питер приеду, здесь в москве vb не оказалось. Это случится 8-го фев.
Номер ответа: 14
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #14
Добавлено: 06.02.06 03:10
Попробуй перестать завершать работу через End и в процедуре закрытия формы делай Unload элементов и приравнивание к nothing.
Номер ответа: 15
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #15
Добавлено: 06.02.06 03:13
Ещё попробуй использовать SetParent до Visible=True