• Исходники

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

...я вижу что событие делегировано, но почему вы считаете, что это отход от ООП? Тем не менее, 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).