日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一个简单的DELPHI自定义事件的例子(转)

發(fā)布時間:2025/7/14 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一个简单的DELPHI自定义事件的例子(转) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
?? //定義一個事件格式,要傳參數(shù)的格式 后面必須要加上of object
?? TeacherArgnyEvent = procedure(ErrorCount: Integer) of object;

type
TTeacher = class(TObject)
private
??? FStudentErrorCount: Integer;
??? FOnTeacherArngy: TeacherArgnyEvent; //定義一個內部事件,private里的只能在TTeacher類內部調用
??? procedure SetStudentErrorCount(Value: Integer);
public
??? constructor Create;
??? destructor Destroy; override;
??? property StudentErrorCount: Integer read FStudentErrorCount write SetStudentErrorCount ;
??? property OnTeacherArngy: TeacherArgnyEvent read FOnTeacherArngy write FOnTeacherArngy ; //定義一個外部的事件,在其它的對象里面可以通過FTeacher.ONTeacherArngy這樣調用。讀寫是通過內部的FOnTeacherArngy
end;

type
TForm1 = class(TForm)
??? Button1: TButton;
??? procedure FormCreate(Sender: TObject);
??? procedure FormClose(Sender: TObject; var Action: TCloseAction);
??? procedure Button1Click(Sender: TObject);
??? procedure IfTeacherArngy(EC: Integer); //自己定義事件觸發(fā)時要執(zhí)行的函數(shù),和Button控件在事件列表中雙擊時出來的那段代碼一樣,只是這里是你自己定義的,而不是DELPHI給你生成的
private
??? FTeacher: TTeacher ;
public
??? { Public declarations }
end;

?


var
Form1: TForm1;

implementation

{$R *.dfm}

{ TTeacher }

constructor TTeacher.Create;
begin
FStudentErrorCount := 0;
end;

destructor TTeacher.Destroy;
begin

inherited;
end;

procedure TTeacher.SetStudentErrorCount(Value: Integer);
begin
FStudentErrorCount := Value;
if FStudentErrorCount > 3 then??? //給StudentErrorCount賦值的時候,判斷是否觸發(fā)FOnTeacherArngy事件
??? if Assigned(FOnTeacherArngy) then?? //看FOnTeacherArngy是否為空,不為空則執(zhí)行該事件,如果不判斷是否為空,則執(zhí)行下面一句的時候可能會有錯誤
????? FOnTeacherArngy(FStudentErrorCount);
end;

{ TForm }

procedure TForm1.FormCreate(Sender: TObject);
begin
FTeacher := TTeacher.Create ;???? //創(chuàng)建一個TTeacher的實例
FTeacher.OnTeacherArngy := IfTeacherArngy; //把FOrm1里的IfTeacherArngy過程賦值給FTeacher的OnTeacherArngy,這樣它就不為空了
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FTeacher.Free ;?? //窗體關閉時釋放
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
FTeacher.StudentErrorCount := FTeacher.StudentErrorCount + 1; //給StudentErrorCount賦值 ,我只是給他賦值,就會觸發(fā)那個事件
// 有了這個類,就不用下面這一段了,給 StudentErrorCount屬性賦值就能達到下面這段代碼的效果。
// if FTeacher.StudentErrorCount > 3 then
//??? ShowMessage('Student 錯誤了' + IntToStr(ec) + '次,老師生氣了。');
end;

procedure TForm1.IfTeacherArngy(EC: Integer);
begin
ShowMessage('Student 錯誤了' + IntToStr(ec) + '次,老師生氣了。'); //事件觸發(fā)時的情況,和Button控件在事件列表中雙擊時出來的那段代碼一樣,只是這里是你自己定義的,而不是DELPHI給你生成的
end;

end.

轉載于:https://www.cnblogs.com/gaowen1210/archive/2011/05/24/2055125.html

《新程序員》:云原生和全面數(shù)字化實踐50位技術專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的一个简单的DELPHI自定义事件的例子(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。