Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1170684108
WondeRu
2007-02-05 17:01
2007.03.04
Как выяснить нужно dpi у принтера?


11-1150277462
Don
2006-06-14 13:31
2007.03.04
Ошибка в OpenSaveDialog


2-1171372423
sat
2007-02-13 16:13
2007.03.04
системное время


15-1170763052
vasIZmax
2007-02-06 14:57
2007.03.04
Ну, N-ая ветка о лицензии..


6-1158652641
pirate
2006-09-19 11:57
2007.03.04
Элементарная передача строк





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский