Delphi 中的事件本質上是方法指標型別的屬性。事件型別定義參數清單,事件屬性儲存指向具體方法的指標,觸發時呼叫該方法。
TMyEvent = procedure of object; // 無參數的物件方法型別
TMyClass = class
strict private
FAge: Integer;
FOnHundred: TMyEvent; // 事件欄位
procedure SetAge(const Value: Integer);
public
constructor Create;
procedure SetOnHundred1; // 事件處理方法 1
procedure SetOnHundred2; // 事件處理方法 2
property Age: Integer read FAge write SetAge;
property OnHundred: TMyEvent read FOnHundred write FOnHundred; // 事件屬性
end;
constructor TMyClass.Create;
begin
FOnHundred := SetOnHundred1; // 預設綁定方法 1
end;
procedure TMyClass.SetAge(const Value: Integer);
begin
if (Value > 0) and (Value < 200) then
FAge := Value;
if Value = 100 then
OnHundred; // 條件觸發事件
end;
procedure TMyClass.SetOnHundred1;
begin
ShowMessage('祝賀您 100 歲大壽!');
end;
procedure TMyClass.SetOnHundred2;
begin
ShowMessage('但願我們都能活到 100 歲!');
end;
// 測試 3:執行期切換事件處理方法
var MyClass: TMyClass;
begin
MyClass := TMyClass.Create;
MyClass.OnHundred := MyClass.SetOnHundred2; // 重新指派
MyClass.Age := 100; // 觸發 SetOnHundred2
MyClass.Free;
end;
On 前綴(如 OnClick、OnChange)。TNotifyEvent = procedure(Sender: TObject) of object)。掌握「定義型別 → 宣告欄位 → 包裝屬性 → 條件觸發 → 外部指派」完整流程,即可靈活實作自訂事件,實現元件間鬆耦合通訊。