
14.03.2010, 11:16
|
|
Участник форума
Регистрация: 20.12.2008
Сообщений: 277
Провел на форуме: 828081
Репутация:
84
|
|
Вот этот модуль поможет тебе разобраться с событиями, все комментировано и разжевано. Создай гуи-проект и замени код на этот
Код:
unit Unit1; interface uses Classes, Forms, StdCtrls, Controls; type {Вот смотри, это класс у которого будет событие Допустим что наш класс должен будет складывать числа а событие допусим будет возникать когда сумма меньше нуля} TMain = class private {Это поле-событие, тут мы указываем тип TNotifyEvent но можно использовать и свои} FOnDenjf: TNotifyEvent; public {Объявляем свойство-событие в разделе паблик, чтобы событие можно было использовать извне} property OnDenjf: TNotifyEvent read FOnDenjf write FOnDenjf; {Собственно метод класса в котором будет генериться событие } function Sum(a, b : Integer): Integer; // end; {Теперь пример использования нашего класса извне Допустим у нас есть клас формы TForm1 с компонентом Label1 Мы знаем что событие генериться когда сумма меньше нуля и используем это знание чтобы оповестить пользователя об этом Тогда ввведем в класс формы процедуру с такими же аргументами как и у типа TNotifyEvent} TForm1 = class(TForm) Button1: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); procedure Test(sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} { TMain } {Реализация метода и генрация события} function TMain.Sum(a, b : Integer): Integer; begin result := a + b; {проверяем результат и если он меньше нуля то генерим событие} if (result < 0) and (assigned(FOnDEnjf)) then FOnDenjf(self); end; {Применение} procedure TForm1.Button1Click(sender: TObject); var Main: TMain; begin Main := TMain.Create; Main.OnDenjf := Test; {Вот тут пробуй подставлять разные значения чтобы убедитьься что все работает} Main.Sum(3, -4); Main.Free; end; procedure TForm1.Test(sender: TObject); begin Label1.Caption := 'Сумма меньше нуля!!!'; end; end.
|
|
|