Делегирование события

...я вижу что событие делегировано, но почему вы считаете, что это отход от ООП? Тем не менее, Delphi это использует при каждом определении обработчика события.

Вот как поступить в вашей ситуации:

 

  1. Определите тип процедуры, использующейся в качестве обработчика события. Допустим, ваш обработчик OnCalculate имеет один параметр типа Integer (присутствующий лишь для демонстрации идеи).

    type
    TCalculateEvent = procedure(I: Integer) of object;

  2. Теперь объявите ваш класс:

    type
    TSomeClass = class(TObject)
    private
    FOnCalculate: TCalculateEvent;
    procedure DoCalculate(I: Integer);
    public
    property OnCalculate: TCalculateEvent read FOnCalculate
    write FOnCalculate;
    end;

  3. Метод DoCalculate совсем простой:

    face="Courier New" size="2">

    procedure TSomeClass.DoCalculate(I: Integer);
    begin
    if Assigned(FOnCalculate) then FOnCalculate(I);
    end;
Теперь вы можете присваивать значение объекту TSomeClass, и назначать любую процедуру событию OnCalculate (естественно, при условии, что ее объявление соответствует объявлению TCalculateEvent).