Вверх ↑
Этот топик читают: Гость
Ответов: 9906
Рейтинг: 351
#31: 2006-09-30 13:53:53 ЛС | профиль | цитата
Я вам одын умный вещь скажу...

По барабану, в каких версиях и как закрывается схема Nic-а, до тех пор, пока везде (предположительно) отваливается code_355
Как только перестанет - станет интересно
карма: 9

0
Администрация
Ответов: 15295
Рейтинг: 1519
#32: 2006-09-30 13:54:28 ЛС | профиль | цитата
Если приведенные выше схемы закрывались раньше без ошибки - существовала утечка памяти. В коде компонента(автор - Пивко Василий) вкралась бага, связанная с позним вызовом деструктора ресурсов. Исправлено.
карма: 27
0
Ответов: 9906
Рейтинг: 351
#33: 2006-09-30 13:56:46 ЛС | профиль | цитата
Где
карма: 9

0
Администрация
Ответов: 15295
Рейтинг: 1519
#34: 2006-09-30 14:03:21 ЛС | профиль | цитата
function NewKOLLed(AParent:PControl; Visible:Boolean) : PLed;
....
AParent.Add2AutoFreeEx(Proc);
...
end;
это не верно ибо Proc будет вызываться из деструктора родителя, когда все детишки уже давно померли. Правильно надо было писать так:
Result.Add2AutoFreeEx(Proc);[/code]
карма: 27
0
Ответов: 9906
Рейтинг: 351
#35: 2006-09-30 14:12:15 ЛС | профиль | цитата
Я имел ввиду, что нет на SVN...
А кто будет чистить L_D (Бог с ним с Пивко, как говорится )
карма: 9

0
Администрация
Ответов: 15295
Рейтинг: 1519
#36: 2006-09-30 14:14:33 ЛС | профиль | цитата
это по идее чистит KOL. Выложил
карма: 27
0
Ответов: 9906
Рейтинг: 351
#37: 2006-09-30 16:04:26 ЛС | профиль | цитата
1) И правда чистит - проверил...

2) Понимаю так:
  • Метод Free не виртуальный =>
  • Когда в win.pas мы говорим Control.Free, мы вызываем TObj.Free =>
  • А уже он через AutoFree вызывает TLed.Free =>
  • Который чистит те самые злосчастные ресурсы, НО
3) За каким лядом в нем тогда вызывается TObj.Free (inherited) Я убрал от греха подальше, с динамическим тестом - все в порядке
4) И чего он вообще тогда Free называется. А не какой-нибудь Kill, скажем

5) btw: share в uses - раритет, надо полагать

карма: 9

0
файлы: 1code_357.txt [1.1KB] [567]
Администрация
Ответов: 15295
Рейтинг: 1519
#38: 2006-09-30 19:26:24 ЛС | профиль | цитата
Я темиже вопросами задавался, но трогать ничего не стал. Однако в коментах к AddAutoFreeEx написано, что все обработчики добавленные этим методом вызыватся из Destroy секции компонента, т.к. теперь должно быть все правильно
карма: 27
0
Ответов: 9906
Рейтинг: 351
#39: 2006-09-30 21:34:34 ЛС | профиль | цитата
Да что работает - вопросов нет.
Но убрать "лишнее" я попробовал. Успешно.

[size=-2]------ Добавлено в 21:34
Если трезво поразмыслить, то:
1) в KOL-овском контролле KOLLed была явная бага
2) фиксинг на SVN для нас совершенно пригоден
3) но полученный в результате файл KOLLed при этом не является отделимым от нашей среды.

Нормальные колья (в данном случае TLed) должны бы уничтожаться методом free.
А вот если еще и переименовать тамошний Free в Kill, то все становится на место (inherited Free - выкинуть, естественно)
TLed.Free начинает правильно работать, и файл KOLLed становится автономным

Ерунда вроде, а правильнее...
карма: 9

0
Главный модератор
Ответов: 2999
Рейтинг: 396
#40: 2006-10-01 10:21:53 ЛС | профиль | цитата
Revision 79 решает проблему правильного завершения "сложной" схемы, но не решает проблему правильного запуска в зависимости от наличия или отсутствия каких-либо компонент в схеме в не поключенном виде.
Придумать схему с таким эффектом и так чтобы она была небольшая пока не удаётся.:?

[size=-2]------ Добавлено в 10:21
Ещё интересный эффект наблюдаю:
есть рабочая схема, на поле которой одиноко стоит контрол Message. Если удаляю это контрол, то схема не запускается, если отменяю удаление схема снова работает. Но если вместо отмены удаления контрола удаляю какой-нибудь компонент и убеждаюсь что схема снова работает и затем отменяю удаление этого компонента, то схема не возвращается в нерабочее состояние, а продолжает запускаться
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Гость
Ответов: 17029
Рейтинг: 0
#41: 2006-10-01 10:29:41 правка | ЛС | профиль | цитата


Редактировалось 2 раз(а), последний 2017-06-15 02:40:42
карма: 0

0
Администрация
Ответов: 15295
Рейтинг: 1519
#42: 2006-10-01 19:46:28 ЛС | профиль | цитата
Nic, будем иметь ввиду
карма: 27
0
Ответов: 9906
Рейтинг: 351
#43: 2006-10-13 19:36:06 ЛС | профиль | цитата
Снова про Align

Как насчет сравнения редактора формы с результатом code_420

[size=-2]------ Добавлено в 19:36
Да, вот еще... Dilma, вижу в KOLmdvPanel.pas следующее:
.....
function NewmdvPanel(AParent: PControl;
ABevelOuter: TBevelCut;
ABevelInner: TBevelCut;
ABevelWidth: Word;
ABorderStyle: TBorderStyle;
ABorderWidth: Word): TKOLmdvPanel;
.....
{$ifdef F_P}
{$else}
Result.BorderStyle := ABorderStyle;
{$endif}
Result.AttachProc(WndProcmdvPanel);
end;
.....
А в чем собственно проблема У меня работает без проблем.
Вроде.
карма: 9

0
файлы: 1code_420.txt [861B] [405]
43
Сообщение
...
Прикрепленные файлы
(файлы не залиты)