> -- Grabli писал(а):
> Типа как в Delphi: OnMouseDown() и т.д.
Не хватает процедурных переменных связанных с объектами? Так их можно самому сделать:
## Код:
```
TYPE
      Object* = POINTER TO ABSTRACT RECORD END;
      
      Message* = ABSTRACT RECORD END;
      
      Delegate* = RECORD
         object: Object;
         handler: PROCEDURE (object: Object; VAR msg: Message)
      END;

   PROCEDURE (VAR this: Delegate) Init* (object: Object; handler: PROCEDURE (object: Object; VAR msg: Message)), NEW;
   BEGIN ASSERT(object # NIL, 20); ASSERT(handler # NIL, 21);
      this.object := object; this.handler := handler
   END Init;
      
   PROCEDURE (IN this: Delegate) Invoke* (VAR msg: Message), NEW;
   BEGIN ASSERT(this.object # NIL, 20); ASSERT(this.handler # NIL, 21);
      this.handler(this.object, msg)
   END Invoke;

   PROCEDURE (IN this: Delegate) IsInitialized* (): BOOLEAN, NEW;
   BEGIN RETURN (this.object # NIL) & (this.handler # NIL)
   END IsInitialized;
```


VAR OnMouseDown: Delegate;