Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
VB6: Как помочь убиться юзерконтролу.
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос > Автор: Konst_One У автора .ctl контролы. Они и так идут в самом проекте да, но он их юзает не как нормальные ocx. может ему они вообще не нужны и пусть делает классы и тд и тп. UserControl.Parent ему религия не позволяет юзать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2010, 14:33 |
|
||
|
VB6: Как помочь убиться юзерконтролу.
|
|||
|---|---|---|---|
|
#18+
Игорь ГорбоносУ автора .ctl контролы. Они и так идут в самом проекте В принципе, у меня и то и другое. Есть библиотека универсальных контролов, которая идет как ocx (при этом она подключена как проект в группу проектов, так что с отладкой в этом плане проблем нет), а есть и специфические контролы в самом проекте. С точки зрения их эксплуатации и возникновения проблемы они не отличаются. Konst_OneactiveX control (ocx) - это встраиваемый объект, отсюда и все проблемы. он для утилизации часто-используемых интрефейсов был придуман (коробочка с заранее подготовленным функционалом). а то, что вы делаете, это скорее динамическое управление в режиме рантайма. откажитесь от скомпилённых ocx хотя бы, вложите все контролы в один проект и включите отладку. т.е. отдельных проектов для ocx не делайте, добавьте их к как модули в основной проект. Честно говоря, я-таки не сделал выводов. Почему использование dll лучше, чем ocx? Собственно - я их и эксплуатирую в режиме утилизации интерфейсов. Konst_Oneда, но он их юзает не как нормальные ocx. может ему они вообще не нужны и пусть делает классы и тд и тп. UserControl.Parent ему религия не позволяет юзать? Контролы ВИЗУАЛЬНЫЕ. Как классы решают эту проблему? UserControl.Parent я юзаю, но как это связано с перехватом событий? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2010, 14:41 |
|
||
|
VB6: Как помочь убиться юзерконтролу.
|
|||
|---|---|---|---|
|
#18+
из контрола обращайтесь к объектам на родительской форме через UserControl.Parent. если передаёте ссылку на внешний контрол внутрь скоего юзерконтрола, то передавайте как ByRef, не делайте копии контрола внутри. у юзерконтрола есть не только события Initialize и Terminate, а InitProperties, ReadProperties. в них стоит проводить основную работу в рантайме/дизайнтайме при инициализации. а также событие Show не забываем. где-то на мсдн были картинки с порядком выполнения событий юзерконтрола в режимах дизайнтайм/рантайм , но можно и просто посмотреть на тестовом контроле через Debug.Print по всем событиям. зы просто общие рекомендации. может помогут в решении вашей проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2010, 14:51 |
|
||
|
VB6: Как помочь убиться юзерконтролу.
|
|||
|---|---|---|---|
|
#18+
> Автор: Konst_One > да, но он их юзает не как нормальные ocx. :) > может ему они вообще не нужны и пусть делает классы и тд и тп. UserControl.Parent ему религия не позволяет юзать? А чем здесь поможет Parent? у него произвольная глубина вложенности этих контролов может быть и контрол из любого уровня может "проталкиватся" на произвольный уровень вложенности, только ниже(это как я понял ) И собственно проблема в том, что нет события от кого нибудь, что форма, на которой сидит вся матрёшка хочет закрытся и всем нужно почистить ссылки и выгружатся. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2010, 14:53 |
|
||
|
VB6: Как помочь убиться юзерконтролу.
|
|||
|---|---|---|---|
|
#18+
Konst_Oneиз контрола обращайтесь к объектам на родительской форме через UserControl.Parent. если передаёте ссылку на внешний контрол внутрь скоего юзерконтрола, то передавайте как ByRef, не делайте копии контрола внутри. у юзерконтрола есть не только события Initialize и Terminate, а InitProperties, ReadProperties. в них стоит проводить основную работу в рантайме/дизайнтайме при инициализации. а также событие Show не забываем. где-то на мсдн были картинки с порядком выполнения событий юзерконтрола в режимах дизайнтайм/рантайм , но можно и просто посмотреть на тестовом контроле через Debug.Print по всем событиям. Последовательность событий я знаю, использую их все. Но не создавая копию ссылки внутри контрола не перехватишь события WithEvents. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2010, 14:59 |
|
||
|
VB6: Как помочь убиться юзерконтролу.
|
|||
|---|---|---|---|
|
#18+
> Автор: Shocker.Pro Кстати, решение от автора языка. Видимо другого ничего придумать не смогли. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2010, 15:01 |
|
||
|
VB6: Как помочь убиться юзерконтролу.
|
|||
|---|---|---|---|
|
#18+
Игорь ГорбоносКстати, решение от автора языка. Видимо другого ничего придумать не смогли. автор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. Ну, собственно, все то же самое предлагается, от чего я уйти хотел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2010, 15:05 |
|
||
|
VB6: Как помочь убиться юзерконтролу.
|
|||
|---|---|---|---|
|
#18+
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 отделаться? о чём я и говорил, что не выйдет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2010, 15:07 |
|
||
|
VB6: Как помочь убиться юзерконтролу.
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro В общем, похоже, проблема в поставленном мной варианте нерешаема, так как контролы начинают умирать не изнутри (не с самого вложенного), а снаружи. И внутренний контрол самостоятельно просто никаким образом не может узнать о деструкции, потому что ему никто об этом не сообщает.Нихрена во всем этом не разбираюсь, но может поможет такая идея. Ввести какую-то глобальную переменную (или ключ в реестре). А все эти контролы при своей работе, чтобы каждый раз проверяли её значение. И при определенном значении самоликвидировались. Хотя конечно и тут есть грабли, всегда ли есть возможность в нужный момент указать нужное значение этой глобальной переменой (ключу в реестре), чтобы дать команду на самоликвидацию. Может я конечно и глупость сморозил, но вдруг поможет моя идея. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2010, 15:24 |
|
||
|
VB6: Как помочь убиться юзерконтролу.
|
|||
|---|---|---|---|
|
#18+
Речь идет о том, какое событие заставило бы контрол проверить эту переменную. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2010, 15:29 |
|
||
|
VB6: Как помочь убиться юзерконтролу.
|
|||
|---|---|---|---|
|
#18+
> Автор: Djon Player Эту идею можно использовать, но! должен быть механизм периодической проверки значения. А в случае "подвешивания" контролов может спасти только таймер с которым могут быть такие-же проблемы "подвешивания" форм и к тому-же количество таймеров было ограниченно в системе, т.е. можно нарватся на исчерпание свободных. Поэтому на мой взгляд для данной проблемы это не вариант решения в большом проекте Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2010, 15:31 |
|
||
|
VB6: Как помочь убиться юзерконтролу.
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос, По поводу таймера. А разве нельзя обойтись одним единственным таймером. Т.е. один раз при запуске программы запрограммировать, что к примеру через 1 секунду запуститься таймер. Далее в коде, который сработает при запуске этого таймера сделать нужные дела, затем запрограммировать, что через 1 секунду запуститься другой таймер. А текущий таймер отключить. В итоге вроде как всегда будет работать лишь один таймер, ну не считая других таймеров не связанных с данной программой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2010, 15:51 |
|
||
|
VB6: Как помочь убиться юзерконтролу.
|
|||
|---|---|---|---|
|
#18+
Такая тема для размышления. Может быть можно решить через API (тут рассчитываю на знания Игоря или Antonary) Может ли контрол узнать, что он стал невидимым? (для внешнего срабатывает событие Hide, а для внутреннего - нет, то есть возможно есть какое-то оконное сообщение?) Далее надо проверить, не повис ли контрол в воздухе , то бишь то, что он стал невидимым не было ли вызвано тем, что он оказался на скрытой закладке SSTab или просто кто-то сделал ему Visible=False. Ну и соответственно, попытаться самоликвидироваться..., хотя тут тоже вопрос - как.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2010, 16:01 |
|
||
|
VB6: Как помочь убиться юзерконтролу.
|
|||
|---|---|---|---|
|
#18+
> Автор: Djon Player > Игорь Горбонос, > > По поводу таймера. > А разве нельзя обойтись одним единственным таймером. Ты не понял :) Таймер это ресурс системы, который ограничен. Так как мы не знаем когда он может понадобится(и понадобится ли вообще) то инициализировать его нужно при старте контрола(т.е. отбирать ресурсы у системы, при этом не важно тикает он или просто висит, а он должен тикать с момента инициализации, потому что неизвесно, когда ему начинать тикать, в смысле нет четкого события, по которому можно сказать что сейчас можно начинать тикать). При таком подходе в большом проекте(я видел форму на которой было около 700 контролов) есть риск попасть на нехватку ресурса. И это если не рассматривать кошмар отладки такого количества таймеров :) Поэтому для меня это вообще не вариант, даже как временный, потому что Джонатан СвифтВ мире нет ничего более постоянного, чем временное Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2010, 16:48 |
|
||
|
VB6: Как помочь убиться юзерконтролу.
|
|||
|---|---|---|---|
|
#18+
Shocker.ProДалее надо проверить, не повис ли контрол в воздухе Точнее даже не он сам, а его самый старший родитель ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2010, 17:23 |
|
||
|
VB6: Как помочь убиться юзерконтролу.
|
|||
|---|---|---|---|
|
#18+
> Автор: Shocker.Pro > Shocker.Pro > Далее надо проверить, не повис ли контрол в воздухе > > > Точнее даже не он сам, а его самый старший родитель Нет! именно сам контрол. Потому что самый старший родитель(форма) нормально терминируется, в то время как контролы остаются в памяти. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2010, 17:31 |
|
||
|
VB6: Как помочь убиться юзерконтролу.
|
|||
|---|---|---|---|
|
#18+
Игорь ГорбоносНет! именно сам контрол. Потому что самый старший родитель(форма) нормально терминируется, в то время как контролы Нифига. см. мой самый первый пример оба контрола не терминируются до выгрузки всего приложения. При этом внутренний контрол вообще чувствует себя хорошо и думает, что все в порядке. Только у самого внешнего контрола пропадает родитель. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2010, 17:35 |
|
||
|
VB6: Как помочь убиться юзерконтролу.
|
|||
|---|---|---|---|
|
#18+
> Автор: Shocker.Pro > Игорь Горбонос > Нет! именно сам контрол. Потому что самый старший родитель(форма) нормально терминируется, в то время как > контролы > > > Нифига. > см. мой самый первый пример > оба контрола не терминируются до выгрузки всего приложения. Ну а я что сказал? :) что у контролов может "потерятся" контейнер-форма при этом они останутся в памяти пока не завершится само приложение Но дело в другом Вот пример как флагман разруливает похожую ситуацию :) Даже здесь ситуация ещё хуже, тут датарепеатер, который размножается пока есть данные в рекордсете, а ты прекрасно понимаешь, что данных может быть ну оооочень много и показан пример обмена сообщениями между разными контролами находящимися на датарепеатере Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2010, 18:12 |
|
||
|
VB6: Как помочь убиться юзерконтролу.
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос Вот пример как флагман разруливает похожую ситуацию :) Я называю этот прием "коллектор событий" и также использую его в проектах. В принципе, он тоже решает мою задачу, но требует еще более серьезной переделки уже существующего кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2010, 18:59 |
|
||
|
VB6: Как помочь убиться юзерконтролу.
|
|||
|---|---|---|---|
|
#18+
Shocker.ProЯ называю этот прием "коллектор событий" и также использую его в проектах. у каждого своя терминология Shocker.ProВ принципе, он тоже решает мою задачу, но требует еще более серьезной переделки уже существующего кода. От переделки все равно не уйти, и из поставленной тобой задачи, я склоняюсь к доделке каждого контрола универсальным интерфейсом инициализации\деинициализации. Этот процесс можно автоматизировать(добавление объявления метода) а потом руками пройдись и прописать нужный код освобождения объектных ссылок и цикла по всем своим контролам с вызовом известного метода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2010, 01:06 |
|
||
|
|

start [/forum/moderation_log.php?user_name=silart]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
25ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 488ms |
| total: | 635ms |

| 0 / 0 |
