Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.022 c
11-1066723048
Ал
2003-10-21 11:57
2004.05.02
Еще раз про "приклеивание" окна к рабочему столу


4-1078897603
Islander
2004-03-10 08:46
2004.05.02
Получение экранных координат по хендлу


3-1080896476
kat
2004-04-02 13:01
2004.05.02
создание TADOConnection


1-1081881050
ЧупаЧупс
2004-04-13 22:30
2004.05.02
Окружности


8-1075538455
Reals
2004-01-31 11:40
2004.05.02
Как нарисовать на Рабочем столе (Desktop`е)




   Наверх