Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.03.04;
Скачать: CL | DM;

Вниз

Если в компоненте есть ссылка на другой и это другой удалят...   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.039 c
15-1170761747
data
2007-02-06 14:35
2007.03.04
посоветуйте хороший хостинг с php и sql (платный)


2-1171433995
Шматко О.Н
2007-02-14 09:19
2007.03.04
Нужен совет


2-1171016071
RASkov
2007-02-09 13:14
2007.03.04
Печать и предпредпросмотр :)


9-1144704275
wik
2006-04-11 01:24
2007.03.04
Давайте создадим свою Game Company


15-1170833004
Alkid
2007-02-07 10:23
2007.03.04
Сёстры Магдалины