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

Вниз

Как повесить Event на обновление собственной структуры?   Найти похожие ветки 

 
AndrewK ©   (2002-11-01 09:46) [0]

Уважаемые мастера!
Подскажите можно ли повесить свой обработчик событий на обновление своей структуры?
К примеру, есть класс наследник от TList.

type
tMyClass = class (TList)
destructor Destroy; override;
procedure Add (Value : Integer);
procedure Delete (Index : Integer);
end;

destructor tMyClass.Destroy; override;
begin
while Count <> 0 do
Delete(0);
inherited Destroy;
end;

procedure tMyClass.Add (Value : Integer);
begin
inherited Add(TObject(Value));
end;

procedure tMyClass.Delete (Index : Integer);
begin
inherited Delete(Index);
end;


Пользователь может добавлять или удалять элементы из списка. Есть MDIСhild окно, в котором происходит отображение данного списка. Список может меняться из других чилдовых окон.

Вопрос. Можно ли описать событие на изменение списка, например на добавление или удаление, и на него повесить процедуру обновления тех окон, где этот список используется? По моему не красиво будет вызывать эту процедуру явным образом при изменении, ИМХО.


 
MBo ©   (2002-11-01 09:49) [1]

Да, можно, введи событие, например, OnChange


 
Alex4444444444   (2002-11-01 09:52) [2]

Ya ne ponyal, pochemu ne sdelat", kak vse v VCL? Typa,

type
TMyClass = class(TList)
private
FOnAdd: TNotifyEvent;
FOnDelete: TNotifyEvent;
...
public
property OnAdd: TNotifyEvent read FOnAdd write FOnAdd;
...
end;

procedure TMyClass.Add ...
begin
inherited ...
if Assigned(FOnAdd) then FOnAdd(Self);
end;


Mozhno poizvrashat"sya i vstavit" v FOnAdd info o tom, chto proishodit.


 
MBo ©   (2002-11-01 09:54) [3]

вводишь поле
FOnChange: TNotifyEvent;

procedure DoChange;dynamic;//обычно dynamic, но не обязательно, если не будет наследников

property OnChange: TNotifyEvent read FOnChange write FOnChange;

procedure TSuperList.DoChange;
begin
..здесь и в конце можно какие-то обязательные действия выполнять
if Assigned(FOnChange) then FOnChange(Self);
end;


 
AndrewK ©   (2002-11-01 10:19) [4]

СПАСИБО !!!




Страницы: 1 вся ветка

Текущий архив: 2002.11.11;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.026 c
1-34072
Davy
2002-10-30 09:34
2002.11.11
Сообщение о владельце прог-м. продуктом


1-34091
Zergling
2002-10-30 06:15
2002.11.11
Как корректно завершить работу потоков в программе!?


3-33864
PAVELsinicinV
2002-10-11 13:46
2002.11.11
FastReport 2.4 Sum(Band) ....


1-34095
Alex
2002-10-31 13:22
2002.11.11
Внутренний код клавиши пробел


14-34165
Dron_Fox
2002-10-19 11:19
2002.11.11
Порты