Форум: "Начинающим";
Текущий архив: 2007.03.04;
Скачать: [xml.tar.bz2];
ВнизЕсли в компоненте есть ссылка на другой и это другой удалят... Найти похожие ветки
← →
Kolan © (2007-02-16 10:33) [0]Здравствуйте,
Сабж, что будет?
Например есть класс:
TLabeledEdit = class(TInsideHintEdit)
private
{ Private declarations }
FLabel: TLabel;
published
property NotifyLabel: TLabel read FLabel write FLabel;
end;
И процедура:procedure TLabeledEdit.ShowStringOnLabel(S: string; Color: TColor);
begin
if Assigned(FLabel) then
begin
if Assigned(FBeforeShowStringOnLabelEvent) then
FBeforeShowStringOnLabelEvent(Self, S, Color);
FLabel.Font.Color := Color;
FLabel.Caption := S;
end;
end;
Что будет если этот Лэйбл назначат, а потом удалят? - AV, так как Assigned(FLabel) скажет что все ок.
Вопрос как сделать чтобы AV небыло?
В TForm, например, если назначить меню и потом его удалить ничего же не будет. Или ImageList...
← →
Сергей М. © (2007-02-16 10:38) [1]У любого компонента есть метод FreeNotification
← →
Arm79 © (2007-02-16 10:39) [2]
> TLabeledEdit = class(TInsideHintEdit)
> private
> { Private declarations }
> FLabel: TLabel;
> published
> property NotifyLabel: TLabel read FLabel write FLabel;
>
> end;
property NotifyLabel: TLabel read FLabel write SetFLabel;
в процедуре SetFLabel указываешь корректное удаление старого значения Flabel и присваивание Flabel nil
← →
RASkov (2007-02-16 10:40) [3]> [0] Kolan © (16.02.07 10:33)
procedure TLabeledEdit.Notification(AComponent: TComponent; Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if (AComponent = FLabel) and (Operation = opRemove) then
FLabel := nil;
end;
← →
Kolan © (2007-02-16 10:42) [4]> SetFLabel
А она вызовется при удалении?У любого компонента есть метод FreeNotification
О, только как пользоваться я не понял :( Справкку читал :)
Пример можно?
← →
Kolan © (2007-02-16 10:43) [5]> RASkov (16.02.07 10:40)
Благодарю.
← →
Kolan © (2007-02-16 10:45) [6]> RASkov (16.02.07 10:40)
Подожди, а кто её будет вызывать? Что-то я недопонял как эта система работает
← →
Сергей М. © (2007-02-16 10:48) [7]
> Kolan
Твой TLabeledEdit должен быть владельцем того самого TLabel.
← →
Kolan © (2007-02-16 10:51) [8]> [7] Сергей М. © (16.02.07 10:48)
>
> > Kolan
>
>
> Твой TLabeledEdit должен быть владельцем того самого TLabel.
А если нет? Вот если я бросил на форму ТулБар и ИмэджЛист, у нех у обоих владелец форма. А теперь назначю ИмэджЛист ТулБару, владелец же не изменится. Как это сделать?
← →
RASkov (2007-02-16 10:54) [9]> [6] Kolan © (16.02.07 10:45)
Этот метод вызывается когда создаются или уничтожаются компомненты
← →
Kolan © (2007-02-16 10:54) [10]
procedure TExtLabeledEdit.Notification(AComponent: TComponent;
Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if (AComponent = FLabel) and (Operation = opRemove) then
FLabel := nil;
end;
Вроде работает. А в дизайн тайме ничего добавлять ненадо?
← →
umbra © (2007-02-16 10:55) [11]
> property NotifyLabel: TLabel read FLabel write FLabel;FLabelPresent: boolean;
{....................................}
property NotifyLabel: TLabel read FLabel write SetLabel;
{..................................}
procedure SetLabel(value: TLabel);
begin
If FLabelPresent then
begin
FreeAndNil(value);
FLabelPresent := false
else
begin
Flabel := Value;
FLabelPresent := true;
end;
end;
← →
RASkov (2007-02-16 10:56) [12]> [10] Kolan © (16.02.07 10:54)
Он и в дизайнтайме работает
← →
Kolan © (2007-02-16 10:57) [13]Угу, все работает, благодарю.
← →
Kolan © (2007-02-16 10:58) [14]> umbra © (16.02.07 10:55)
Благодарю, разобрался уже.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.03.04;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.044 c