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

Вниз

помогите ламеру добавить в свой класс событие   Найти похожие ветки 

 
msgipss   (2004-04-16 13:47) [0]

например есть класс
test=class
  k1:word;             переменная
  procedure inck(k:word);       procedure увеличивает на 1 k1
  onchange        событие что произошло какое то увеличение
end;
как в delphi реализовать события, смотрел примеры из vcl не сильно понятно
Было бы здорово если бы на этом примере показали..

Заранее благодарен..


 
Владислав ©   (2004-04-16 13:51) [1]

...
private
 FOnChange: TNotifyEvent;
protected
 procedure DoChange; virtual;
public
 OnChange: TNotifyEvent read FOnChange write FOnChange;
...

...
procedure TTest.DoChange;
begin
 if Assigned(FOnChange) then
   FOnChange(Self)
end;
...

Что то еще не ясно?


 
Семен Сорокин ©   (2004-04-16 14:13) [2]

type
 TK1Event = procedure (Sender: TObject; var Value: integer) of object;  

 TTest = class
 private
   FK1 : integer;
   FOnChange: TK1Event;
   procedure SetK1(Value: integer);
 protected
   procedure DoChange(var Value: integer); virtual;  
 public
   property K1: integer read FK1 write SetK1;
   property OnChange: TK1Event read FOnChange write FOnChange;
 end;

...

procedure TTest.SetK1(Value: integer);
begin
 if FK1 <> Value then begin
  DoChange(Value);
  FK1 := Value
 end
end;

procedure TTest.DoChange(var Value: integer);
begin
 if Assigned(FOnChange) then
  FOnChange(Self, Value)
end;


 
Владислав ©   (2004-04-16 14:16) [3]

> Семен Сорокин ©   (16.04.04 14:13) [2]

А на кой вот это:
TK1Event = procedure (Sender: TObject; var Value: integer) of object;
?
Если именно для этого, то мож лучше назвать BeforeChange? ;)


 
msgipss   (2004-04-16 14:36) [4]

спасибо за ответы (вполне понятно)  8))
тема закрыта


 
Юрий Зотов ©   (2004-04-16 14:46) [5]

Только метод диспетчеризации (DoChange) лучше делать не virtual, а dynamic. Экономит память.


 
Владислав ©   (2004-04-16 14:52) [6]

> Юрий Зотов ©   (16.04.04 14:46) [5]

Ну да. Согласен. И, насколько понимаю, экономит, если наследников много. Так?



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

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

Наверх




Память: 0.48 MB
Время: 0.055 c
1-1081855903
Pavel
2004-04-13 15:31
2004.05.02
printing


7-1078940272
ChcngerMan
2004-03-10 20:37
2004.05.02
TwainSources


6-1078079621
teapot
2004-02-29 21:33
2004.05.02
pacet32.dll блокировать доступ


9-1069698959
DimaS-Page
2003-11-24 21:35
2004.05.02
Как сгладить края у полигоннов (GL_POLIGON).


1-1081945561
Андрей Сенченко
2004-04-14 16:26
2004.05.02
Спасите тормоза :)