powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VB6: Как помочь убиться юзерконтролу.
21 сообщений из 46, страница 2 из 2
VB6: Как помочь убиться юзерконтролу.
    #36539713
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос
> Автор: Konst_One

У автора .ctl контролы. Они и так идут в самом проекте




да, но он их юзает не как нормальные ocx. может ему они вообще не нужны и пусть делает классы и тд и тп. UserControl.Parent ему религия не позволяет юзать?
...
Рейтинг: 0 / 0
VB6: Как помочь убиться юзерконтролу.
    #36539752
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь ГорбоносУ автора .ctl контролы. Они и так идут в самом проекте

В принципе, у меня и то и другое. Есть библиотека универсальных контролов, которая идет как ocx (при этом она подключена как проект в группу проектов, так что с отладкой в этом плане проблем нет), а есть и специфические контролы в самом проекте. С точки зрения их эксплуатации и возникновения проблемы они не отличаются.

Konst_OneactiveX control (ocx) - это встраиваемый объект, отсюда и все проблемы. он для утилизации часто-используемых интрефейсов был придуман (коробочка с заранее подготовленным функционалом). а то, что вы делаете, это скорее динамическое управление в режиме рантайма. откажитесь от скомпилённых ocx хотя бы, вложите все контролы в один проект и включите отладку. т.е. отдельных проектов для ocx не делайте, добавьте их к как модули в основной проект.

Честно говоря, я-таки не сделал выводов. Почему использование dll лучше, чем ocx? Собственно - я их и эксплуатирую в режиме утилизации интерфейсов.


Konst_Oneда, но он их юзает не как нормальные ocx. может ему они вообще не нужны и пусть делает классы и тд и тп. UserControl.Parent ему религия не позволяет юзать?

Контролы ВИЗУАЛЬНЫЕ. Как классы решают эту проблему? UserControl.Parent я юзаю, но как это связано с перехватом событий?
...
Рейтинг: 0 / 0
VB6: Как помочь убиться юзерконтролу.
    #36539805
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
из контрола обращайтесь к объектам на родительской форме через UserControl.Parent. если передаёте ссылку на внешний контрол внутрь скоего юзерконтрола, то передавайте как ByRef, не делайте копии контрола внутри. у юзерконтрола есть не только события Initialize и Terminate, а InitProperties, ReadProperties. в них стоит проводить основную работу в рантайме/дизайнтайме при инициализации. а также событие Show не забываем. где-то на мсдн были картинки с порядком выполнения событий юзерконтрола в режимах дизайнтайм/рантайм , но можно и просто посмотреть на тестовом контроле через Debug.Print по всем событиям.

зы
просто общие рекомендации. может помогут в решении вашей проблемы.
...
Рейтинг: 0 / 0
VB6: Как помочь убиться юзерконтролу.
    #36539817
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Konst_One
> да, но он их юзает не как нормальные ocx.

:)

> может ему они вообще не нужны и пусть делает классы и тд и тп. UserControl.Parent ему религия не позволяет юзать?

А чем здесь поможет Parent? у него произвольная глубина вложенности этих контролов может быть и контрол из любого уровня
может "проталкиватся" на произвольный уровень вложенности, только ниже(это как я понял ) И собственно проблема в
том, что нет события от кого нибудь, что форма, на которой сидит вся матрёшка хочет закрытся и всем нужно почистить
ссылки и выгружатся.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
VB6: Как помочь убиться юзерконтролу.
    #36539851
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneиз контрола обращайтесь к объектам на родительской форме через UserControl.Parent. если передаёте ссылку на внешний контрол внутрь скоего юзерконтрола, то передавайте как ByRef, не делайте копии контрола внутри. у юзерконтрола есть не только события Initialize и Terminate, а InitProperties, ReadProperties. в них стоит проводить основную работу в рантайме/дизайнтайме при инициализации. а также событие Show не забываем. где-то на мсдн были картинки с порядком выполнения событий юзерконтрола в режимах дизайнтайм/рантайм , но можно и просто посмотреть на тестовом контроле через Debug.Print по всем событиям.

Последовательность событий я знаю, использую их все. Но не создавая копию ссылки внутри контрола не перехватишь события WithEvents.
...
Рейтинг: 0 / 0
VB6: Как помочь убиться юзерконтролу.
    #36539858
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Shocker.Pro

Кстати, решение от автора языка. Видимо другого ничего придумать не
смогли.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
VB6: Как помочь убиться юзерконтролу.
    #36539875
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь ГорбоносКстати, решение от автора языка. Видимо другого ничего придумать не смогли.


авторCreate a Public method in the user control that releases allocated memory and then call the method from the Form that hosts the control array during the Form Unload event.

Ну, собственно, все то же самое предлагается, от чего я уйти хотел.
...
Рейтинг: 0 / 0
VB6: Как помочь убиться юзерконтролу.
    #36539886
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProИгорь ГорбоносКстати, решение от автора языка. Видимо другого ничего придумать не смогли.


авторCreate a Public method in the user control that releases allocated memory and then call the method from the Form that hosts the control array during the Form Unload event.

Ну, собственно, все то же самое предлагается, от чего я уйти хотел.

а хотел terminate отделаться? о чём я и говорил, что не выйдет
...
Рейтинг: 0 / 0
VB6: Как помочь убиться юзерконтролу.
    #36539945
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
В общем, похоже, проблема в поставленном мной варианте нерешаема, так как контролы начинают умирать не изнутри (не с самого вложенного), а снаружи. И внутренний контрол самостоятельно просто никаким образом не может узнать о деструкции, потому что ему никто об этом не сообщает.Нихрена во всем этом не разбираюсь, но может поможет такая идея.
Ввести какую-то глобальную переменную (или ключ в реестре).
А все эти контролы при своей работе, чтобы каждый раз проверяли её значение.
И при определенном значении самоликвидировались.
Хотя конечно и тут есть грабли, всегда ли есть возможность в нужный момент указать нужное значение этой глобальной переменой (ключу в реестре), чтобы дать команду на самоликвидацию.
Может я конечно и глупость сморозил, но вдруг поможет моя идея.
...
Рейтинг: 0 / 0
VB6: Как помочь убиться юзерконтролу.
    #36539960
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Речь идет о том, какое событие заставило бы контрол проверить эту переменную.
...
Рейтинг: 0 / 0
VB6: Как помочь убиться юзерконтролу.
    #36539965
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Djon Player

Эту идею можно использовать, но! должен быть механизм периодической проверки значения. А в случае "подвешивания"
контролов может спасти только таймер с которым могут быть такие-же проблемы "подвешивания" форм и к тому-же количество
таймеров было ограниченно в системе, т.е. можно нарватся на исчерпание свободных. Поэтому на мой взгляд для данной
проблемы это не вариант решения в большом проекте

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
VB6: Как помочь убиться юзерконтролу.
    #36540063
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос,

По поводу таймера.
А разве нельзя обойтись одним единственным таймером.
Т.е. один раз при запуске программы запрограммировать, что к примеру через 1 секунду запуститься таймер.
Далее в коде, который сработает при запуске этого таймера сделать нужные дела, затем запрограммировать, что через 1 секунду запуститься другой таймер.
А текущий таймер отключить.
В итоге вроде как всегда будет работать лишь один таймер, ну не считая других таймеров не связанных с данной программой.
...
Рейтинг: 0 / 0
VB6: Как помочь убиться юзерконтролу.
    #36540123
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такая тема для размышления.
Может быть можно решить через API (тут рассчитываю на знания Игоря или Antonary)

Может ли контрол узнать, что он стал невидимым?
(для внешнего срабатывает событие Hide, а для внутреннего - нет, то есть возможно есть какое-то оконное сообщение?)
Далее надо проверить, не повис ли контрол в воздухе , то бишь то, что он стал невидимым не было ли вызвано тем, что он оказался на скрытой закладке SSTab или просто кто-то сделал ему Visible=False.

Ну и соответственно, попытаться самоликвидироваться..., хотя тут тоже вопрос - как....
...
Рейтинг: 0 / 0
VB6: Как помочь убиться юзерконтролу.
    #36540312
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Djon Player
> Игорь Горбонос,
>
> По поводу таймера.
> А разве нельзя обойтись одним единственным таймером.

Ты не понял :) Таймер это ресурс системы, который ограничен. Так как мы не знаем когда он может понадобится(и
понадобится ли вообще) то инициализировать его нужно при старте контрола(т.е. отбирать ресурсы у системы, при этом не
важно тикает он или просто висит, а он должен тикать с момента инициализации, потому что неизвесно, когда ему начинать
тикать, в смысле нет четкого события, по которому можно сказать что сейчас можно начинать тикать). При таком подходе в
большом проекте(я видел форму на которой было около 700 контролов) есть риск попасть на нехватку ресурса. И это если не
рассматривать кошмар отладки такого количества таймеров :)
Поэтому для меня это вообще не вариант, даже как временный, потому что
Джонатан СвифтВ мире нет ничего более постоянного, чем временное

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
VB6: Как помочь убиться юзерконтролу.
    #36540417
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProДалее надо проверить, не повис ли контрол в воздухе

Точнее даже не он сам, а его самый старший родитель
...
Рейтинг: 0 / 0
VB6: Как помочь убиться юзерконтролу.
    #36540445
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Shocker.Pro
> Shocker.Pro
> Далее надо проверить, не повис ли контрол в воздухе
>
>
> Точнее даже не он сам, а его самый старший родитель

Нет! именно сам контрол. Потому что самый старший родитель(форма) нормально терминируется, в то время как контролы
остаются в памяти.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
VB6: Как помочь убиться юзерконтролу.
    #36540455
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь ГорбоносНет! именно сам контрол. Потому что самый старший родитель(форма) нормально терминируется, в то время как контролы

Нифига.
см. мой самый первый пример
оба контрола не терминируются до выгрузки всего приложения.

При этом внутренний контрол вообще чувствует себя хорошо и думает, что все в порядке. Только у самого внешнего контрола пропадает родитель.
...
Рейтинг: 0 / 0
VB6: Как помочь убиться юзерконтролу.
    #36540564
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Shocker.Pro
> Игорь Горбонос
> Нет! именно сам контрол. Потому что самый старший родитель(форма) нормально терминируется, в то время как
> контролы
>
>
> Нифига.
> см. мой самый первый пример
> оба контрола не терминируются до выгрузки всего приложения.

Ну а я что сказал? :) что у контролов может "потерятся" контейнер-форма при этом они останутся в памяти пока не
завершится само приложение

Но дело в другом
Вот пример как флагман разруливает похожую
ситуацию :)
Даже здесь ситуация ещё хуже, тут датарепеатер, который размножается пока есть данные в рекордсете, а ты прекрасно
понимаешь, что данных может быть ну оооочень много и показан пример обмена сообщениями между разными контролами
находящимися на датарепеатере


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
VB6: Как помочь убиться юзерконтролу.
    #36540664
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос
Вот пример как флагман разруливает похожую
ситуацию :)

Я называю этот прием "коллектор событий" и также использую его в проектах.
В принципе, он тоже решает мою задачу, но требует еще более серьезной переделки уже существующего кода.
...
Рейтинг: 0 / 0
VB6: Как помочь убиться юзерконтролу.
    #36541147
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProЯ называю этот прием "коллектор событий" и также использую его в проектах.
у каждого своя терминология
Shocker.ProВ принципе, он тоже решает мою задачу, но требует еще более серьезной переделки уже существующего кода.
От переделки все равно не уйти, и из поставленной тобой задачи, я склоняюсь к доделке каждого контрола универсальным интерфейсом инициализации\деинициализации. Этот процесс можно автоматизировать(добавление объявления метода) а потом руками пройдись и прописать нужный код освобождения объектных ссылок и цикла по всем своим контролам с вызовом известного метода.
...
Рейтинг: 0 / 0
VB6: Как помочь убиться юзерконтролу.
    #36541372
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос у каждого своя терминология

Сам придумал, сам назвал. Кто ж виноват, что они у меня идею сперли
...
Рейтинг: 0 / 0
21 сообщений из 46, страница 2 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VB6: Как помочь убиться юзерконтролу.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]