Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.15.211.107] |
|
Сообщ.
#1
,
|
|
|
Например:
private FListBox:TListBox; // "ссылаемся" на ListBox ... published property ListBox:TListBox read FListBox; .... Теперь ставим компонент, тестим. кладем на форму парочку ListBox`ов, затем начинаем их выбирать в property ListBox компонента - все прекрасно . Но вот, оставив, "заполненое" свойство, щелкаем по ListBoх`у, нажимаем Del. ListBox удаляется, как ему и положено, но если компонент имел ссылку на только что удаленный ListBox, то среда подвисает, если обратиться к компоненту, например, просто выделить его. Пишет как всегда Цитата .Access Violation at address .... in rtlВерсияDelphi0.bpl т к объект не создаются в компоненте, а выбирается из существующих, поэтому я явно его не удаляю нигде.... И как с этом чудом бороться? |
Сообщ.
#2
,
|
|
|
Стандартный метод - переопределяем Notification:
private FListBox:TListBox; // "ссылаемся" на ListBox ... protected procedure Notification(AComponent: TComponent; Operation: TOperation); override; ... published property ListBox:TListBox read FListBox; .... implementation ... procedure TMyControl.Notification(AComponent: TComponent; Operation: TOperation); begin inherited Notification(AComponent, Operation); if (Operation = opRemove) then begin if (AComponent = FListBox) then FListBox := nil; end; end; |
Сообщ.
#3
,
|
|
|
Цитата s-mike @ if (AComponent = FListBox) then FListBox := nil; Может, заменить на AComponent:=nil ? |
Сообщ.
#4
,
|
|
|
Цитата Miscђka @ Может, заменить на AComponent:=nil ? А что это даст? |
Сообщ.
#5
,
|
|
|
Погоди, я немного не догоняю после вчерашнего. Надо разобраться.
AComponent:=nil в данном случае это не то же самое, что FListBox:=nil. Т.е. если я обнуляю AComponent, обнуляется ли при этом FListBox? |
Сообщ.
#6
,
|
|
|
Цитата Miscђka @ Т.е. если я обнуляю AComponent, обнуляется ли при этом FListBox? Miscђka, удивляешь. AComponent, FListBox - ссылки на компоненты. Обниление одной ссылки не означает обниление другой. Тем более, что они могут быть не равны. Notification вызывается Owner'ом при добавлении/освобождении компонента. |
Сообщ.
#7
,
|
|
|
Цитата s-mike @ Стандартный метод - переопределяем Notification: Спасибо, не знал.... |
Сообщ.
#8
,
|
|
|
Цитата s-mike @ Miscђka, удивляешь перепил вчера, - у друга сын родился. Не сообразил сразу, как передается переменная AComponent. |
Сообщ.
#9
,
|
|
|
SPrograMMer
Кстати, та толстая книжка, что лежит в коробке вместе с дисками дельфи как раз и объясняет многие вещи, в том числе для чего нужно переопределять Notification. Но у этой книжки два недостатка: 1. Она во многом повторяет хелп. 2. Она на англ. языке. |