Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.11.11;
Скачать: [xml.tar.bz2];

Вниз

Как повесить 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.008 c
14-34171
Карлсон
2002-10-12 14:38
2002.11.11
где план достать и хватит ли одной тонны пластида.


1-34032
tytus
2002-11-03 00:48
2002.11.11
Обновление OLEAUT32.DLL


1-34067
Vile_denis
2002-10-30 17:25
2002.11.11
Полупрозрачная форма


7-34282
Ded Moroz
2002-09-06 23:36
2002.11.11
Voice modem


14-34204
Malder
2002-10-22 01:22
2002.11.11
Достаточно прикольно, хотя и, действительно, просто





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский