程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 理解Delphi的類(十一) - 深入類中的方法(7)

理解Delphi的類(十一) - 深入類中的方法(7)

編輯:Delphi

{從道理上來講, 這會隱藏或替換了父類的 Create ; 但實際上沒有, 編譯器 肯定要做一個幕後工作!}

//再如:TMyClass = class(TObject)
public
 constructor Create(x,y: Integer);
end;
var
 Form1: TForm1;
implementation
{$R *.dfm}
{ TMyClass }
constructor TMyClass.Create(x, y: Integer);
begin
 //inherited Create;
 //...
end;
{
 編譯器竟也允許沒有 overload 的重載; 竟也允許去掉這句: inherited Create;
 如果沒有 TObject.Create 方法, 類如何初始化、分配內存?
 所以這都是表面現象, 我想編譯器會自動 overload、自動 inherited Create 的.
 其他方法不會有這些特殊待遇的, 看來哪都有走後門的.
}

[11] - 事件方法

在方法的類別中, 應該還有一種事件方法;

事件是一種特殊的屬性, 使用事件, 就是使用屬性; 然後屬性再調用事件方法.

到屬性裡面再深入學習吧.

[12] - 消息方法

//一個前導示例:{創建一 Win32 工程, 給窗體添加 OnKeyDown 事件}
procedure Tbu.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
 Self.Text := Char(Key);
end;
{功能: 在鍵盤上按一個鍵, 窗體的標題欄會顯示鍵名}

//現在我們用消息方法重新實現這個功能unit Unit1;
interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs;
type
 TForm1 = class(TForm)
  procedure KeyDown(var msg: TWMKeyDown); message WM_KEYDOWN;
 end;
var
 Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.KeyDown(var msg: TWMKeyDown);
begin
 Self.Text := Char(msg.CharCode);
end;
//解釋一下這個消息方法的定義:
procedure KeyDown(var msg: TWMKeyDown); message WM_KEYDOWN;
{
 1、和其他方法的最大不同: 多了一個 message 指示字;
 2、指示字後面是要攔截的消息名稱: WM_KEYDOWN;
 3、它是一個過程, 過程名 KeyDown 是自定義的;
 4、參數類型是消息對應的參數結構, 因為 TWMKeyDown 是 TWMKey 的重命名, 也可以 用 TWMKey;
 5、參數名 msg 是自定義的;
 6、參數的前綴必須是 var;
 7、方法實現時不能攜帶指示字.
}
//如果把以上兩個功能放在一起, 當我們按下一個鍵? 會執行哪一個呢?
{ 測試一下}
unit Unit1;
interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs;
type
 TForm1 = class(TForm)
  {窗體 OnKeyDown 事件的定義}
  procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  {WM_KEYDOWN 消息方法的定義}
  procedure KeyDown(var msg: TWMKeyDown); message WM_KEYDOWN;
 end;
var
 Form1: TForm1;
implementation
{$R *.dfm}
{窗體 OnKeyDown 事件的實現}
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
 ShowMessage('事件: ' + Char(Key));
end;
{WM_KEYDOWN 消息方法的實現}
procedure TForm1.KeyDown(var msg: TWMKeyDown);
begin
 ShowMessage('消息: ' + Char(msg.CharCode));
end;
end.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved