Главная страница
    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.048 c
2-1171466277
Genny
2007-02-14 18:17
2007.03.04
Рисование огромной картинки. Где, как и в чем?


15-1171270823
Riply
2007-02-12 12:00
2007.03.04
Новый винчестер.


15-1171025896
IMHO
2007-02-09 15:58
2007.03.04
Вспоминая прошлое


6-1159124688
Орион
2006-09-24 23:04
2007.03.04
Как прикрутить TIdConnectionIntercept к TIdTCPClient?


2-1171442801
DelphiLexx
2007-02-14 11:46
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский