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

Делегат - специальный тип, который используется для описания пользовательских событий. Делегаты определяют сигнатуру методов, которые могут выступать в качестве обработчиков пользовательских событий.

Пример

Для выполнения примера необходимо выполнить следующее:

  1. Создать сборку, в сборке создать две формы с наименованиями «StyleForm» и «MainForm».

  2. Формы могут иметь следующий код:
    //Форма StyleForm
    Delegate ChangeStyle(FontBold: Boolean; FontName: String; FontSize: Integer);
    Class StyleForm: Form
        Label1: Label;
        Friend Event OnChangeStyle: ChangeStyle;
        
        CheckBox1: CheckBox;
        ComboBox1: ComboBox;
        IntegerEdit1: IntegerEdit;
        Label2: Label;
        
        Sub ChangeStyle(Sender: Object; Args: IEventArgs);
        Begin
            If OnChangeStyle <> Null Then
                OnChangeStyle(CheckBox1.Checked, ComboBox1.Items.Item(ComboBox1.ItemIndex), IntegerEdit1.Value);
            End If;
        End Sub ChangeStyle;
    End Class StyleForm;


    //Форма MainForm
    Class MainForm: Form
        Label1: Label;
        Label2: Label;
        ControlBar1: ControlBar;
        GroupBox1: GroupBox;
        EditBox1: EditBox;
        DateTimePicker1: DateTimePicker;
        Button1: Button;
        UiTabSheet1: UiTabSheet;
        TabSheetBox1: TabSheetBox;
        
        //Процедура для обработки события OnChangeStyle
        Sub ChangeStyle1(FontBold: Boolean; FontName: String; FontSize: Integer);
        Var
            f: IControlFont;
            f1: ITabFont;
        Begin
            f := Self.Font;
            f.Bold := FontBold;
            f.Name := FontName;
            f.Size := FontSize;
            f1 := UiTabSheet1.TabSheet.Table.Style.Font;
            If FontBold Then
                f1.Bold := TriState.OnOption;
            Else
                f1.Bold := TriState.OffOption;
            End If;
            f1.Name := FontName;
            f1.Size := FontSize;
        End Sub ChangeStyle1;
        
        Sub MainFormOnCreate(Sender: Object; Args: IEventArgs);
        Begin
            (ControlBar1.Form As StyleForm).OnChangeStyle := ChangeStyle1;
        End Sub MainFormOnCreate;
    End Class MainForm;

Во время запуска формы «MainForm» при инициализации компонента ControlBar будет создана форма «StyleForm». Для данной формы будет создано пользовательское событие OnChangeStyle, используемое для изменения оформления компонентов. Данное событие будет доступно во всех формах сборки. Сигнатуру методов, используемых для обработки данного события, описывает делегат ChangeStyle.

В событии OnCreate формы «MainForm» осуществляется подписка данной формы на событие OnChangeStyle формы «StyleForm». Для обработки этого события в данной форме будет использоваться процедура ChangeStyle1.

См. также:

Классы и объекты