| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > И снова события в Delphi |
| Автор: croakernet 8.10.2008, 17:26 |
| Уважаемые форумчане! Ткните носом, или подскажите, как: Создаю приложение, в приложении существуют три объекта. Один из них, в результате вызова некой процедуры, выполняет некое действие. В результате этой процедуры он создает нечто (событие). Два других должны отреагировать на эти события. Как реализовать такую конструкцию? Поясню на примере: Один объект - форма, второй объект просто некий программный модуль (назовем его MainOBJ). После некоторых действий пользователя на форме происходит событие, на которое MainOBJ должен отреагировать. При этом модуль Формы включен в описание в MainOBJ, но ведь форма ничего не знает о процедурах MainOBJ. Как из нее вызвать обработчик этого события, код которого, находится в MainOBJ? Знаю как подобное провернуть на VB: { Class 1 Public event testEvent(a as long) } procedure test RaiseEvent testEvent(a) end { Class 2 public class1Obj withevents as class 1 sub class1Obj_testEvent(a as long) {код обработки} end } возможно ли что то подобное??? |
| Автор: croakernet 9.10.2008, 09:18 |
| Нет Это не изменение свойства формы! Это просто три неких класса. Во время выполнения процедуры класса происходит "событие" (т.е. выполнение процедуры доходит до определенной точки, и вызывается процедура события) и все остальные классы реагируют на это событие. Я понимаю, что можно поочереди вызвать кучу процедур из других классов, и в них по очереди передать все значения, и они поочереди выполняться. Но что делать если таких классов 10 (или 100). Я все это к чему: на VB можно реализовать это таким образом, что при вызове ОДНОЙ процедуры внутри одного класса, происходит обращение к различным реализациям это процедуры внутри других классов, в которых первый класс описан как объект с событиями. |
| Автор: Bose 9.10.2008, 13:51 | ||||||||||
| Как-то так: В Делфи событие, - это процедурный тип. Т.е. чтобы обработать сотыбие, нужно присвоить объекту процедуру-обработчик. А объект будет вызывать эту процедура всякий раз, когда должно сработать событие. Чтобы добавить событие к своему классу, надо: 1) Определить тип данных обработчика события, или воспользоваться стандартным(предпочтительнее). свой:
Это означает что обработчиком события у нас будет процедура какого-либо объекта с двумя параметрами aParam1,aParam2:TObject Но для начала лучше использовать стандартный тип события, например:
Тип TNotifyEvent объявлен в модуле classes. 2) В класс, который должен вызывать событие добавляем proprty к которой будем присваивать:
3) Теперь, надо сделать так чтобы, это событие заработало. Для этого в нужном тебе месте добавить вызов события как процедуры.
4) Теперь в нужном месте необходимо присвоить обработчик события. Например, у нас есть форма:
|