我經常發現自己在德爾福宣佈一個簡單的程序類型Delphi中的消息傳遞過程的現有過程類型?
TMessageProc = procedure(const AMsg: String);
。其目的是允許將回調過程傳遞給處理函數,以便他們可以更新用戶界面而不必知道用戶界面。
這肯定是Delphi編程中的一個常見範例。在我可以使用的常用單位之一中是否存在標準的過程類型聲明?不幸的是,通過我自己的方法,我在名稱或聲明類型的方式之間的項目之間並不完全一致。
我經常發現自己在德爾福宣佈一個簡單的程序類型Delphi中的消息傳遞過程的現有過程類型?
TMessageProc = procedure(const AMsg: String);
。其目的是允許將回調過程傳遞給處理函數,以便他們可以更新用戶界面而不必知道用戶界面。
這肯定是Delphi編程中的一個常見範例。在我可以使用的常用單位之一中是否存在標準的過程類型聲明?不幸的是,通過我自己的方法,我在名稱或聲明類型的方式之間的項目之間並不完全一致。
「常見的Delphi範例」是事件(事件處理程序)。比如,你可以寫
type
TMessageProc = procedure(const AMsg: String);
procedure DoSomething(OnProgress: TMessageProc);
begin
// ...
if Assigned(OnProgress) then OnProgress('123');
// ...
end;
通常在Delphi中的事件被實現爲方法,所以上面例子中的標準Delphi代碼是:
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure ShowProgress(const AMsg: String);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
type
TMessageProc = procedure(const AMsg: String) of object; // declare event type
procedure DoSomething(OnProgress: TMessageProc);
begin
// ...
if Assigned(OnProgress) then OnProgress('123'); // trigger event
// ...
end;
procedure TForm1.ShowProgress(const AMsg: String); // event handler
begin
Label1.Caption:= AMsg;
Application.ProcessMessages;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
DoSomething(ShowProgress);
end;
沒有什麼錯在宣稱自己的事件類型,但確定你可以在VCL中找到標準事件。例如,classes.pas單元containes聲明
TGetStrProc = procedure(const S: string) of object;
可以使用非標準的事件類型從classes.pas
{ Standard events }
TNotifyEvent = procedure(Sender: TObject) of object;
TGetStrProc = procedure(const S: string) of object;
或定義自己。
您可以使用SysUtils的TProc。
事件不是方法;他們是方法指針。 – vcldeveloper 2010-02-22 08:35:25