理解 Delphi 的類(十一) – 深入類中的方法[13] – 方法的呼叫慣例

因為使用方法參數的不同, 所以有了呼叫慣例.譬如 Delphi 預設的是從左至右讀取參數; Window API 是從右至左讀取參數.如果沒有呼叫慣例, Delphi 就無法使用由 C 語言編寫的 Window API;如果沒有呼叫慣例, 別的語言也無法使用由 Delphi 編寫的 DLL 檔案中的方法.指示字參數讀取順序參數刪除參數傳遞備忘register 左→右方法返回時自動刪除參數前三個參數使用CPU的三個寄存器傳遞; 其他使用棧傳遞速度最快, 是 Delphi

理解 Delphi 的類(十二) – 深入屬性[1] – 先複習

關於屬性的話題還有很多, 譬如: 數組屬性、預設屬性、class 屬性等等.先總結一下前面提到過的屬性吧.TMyClass = class(TObject) private FName: string; procedure SetName(const Value: string); published property Name: string read FName write SetName; end;1、屬性用 property 定義;2、read、write

什麼是堆、棧?

Delphi 的屬性太複雜了, 先換換思路, 再繼續學習.程式需要的記憶體空間分為 heap(堆) 和 stack(棧);heap 是自由儲存區, stack 是自動儲存區;使用 heap 需要手動申請、手動釋放, stack 是自動申請、自動釋放;使用 heap 時, 如果只申請不釋放, 就會發生"記憶體泄露";不需要申請和釋放空間的元素, 譬如變數、結構(record)等, 是存與 stack(棧);反之如需要 Create 和 Free 的對象、需要 GetMem 和 FreeMem

TScreen 類 – 關於 Screen 對象

Screen 對象是 TScreen 類的一個變數, 它聲明在 Forms 單元的第 1323 行(Delphi 2007); 並且 TScreen 類也來自 Forms 單元.也就是說, 只要 uses 了 Forms 單元, Screen 對象就可以使用了.我們自己建立一個 TScreen 類的對象可以嗎? 當然可以!var MyScreen: TScreen;begin MyScreen := TScreen.Create(nil); {建立}

TScreen 類 – 程式中表單的個數

//一個包含兩個表單的例子, 這是工程中的內容:program Project1;uses Forms, Unit1 in 'Unit1.pas' {Form1}, Unit2 in 'Unit2.pas' {Form2};{$R *.res}begin Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(TForm1, Form1);

TScreen 類 – 通過 Screen 更換游標

//更換表單或某個控制項的游標可以不通過 Screen 對象, 譬如:begin Self.Cursor := crAppStart; Panel1.Cursor := crHandPoint;{游標可選值: crDefault = TCursor(0); crNone = TCursor(-1); crArrow = TCursor(-2); crCross = TCursor(-3); crIBeam =

TScreen 類 – 使用 Screen.Cursors

unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;type TForm1 = class(TForm) Timer1: TTimer; {需要個定時器} procedure FormCreate(Sender: TObject); procedure

理解 Delphi 的類(十一) – 深入類中的方法[1] – 虛方法與動態方法

方法來到類中, 以前的特點基本都在;因為類一般是存在於一個繼承鏈中, 所以就有了一些新的概念, 譬如: 繼承、覆蓋;也有了很多新名稱, 譬如: 靜態方法、虛方法、動態方法、抽象方法、類方法、訊息方法.先從虛方法與動態方法開始吧//下面的類中就定義了兩個虛方法(virtual)、兩個動態方法(dynamic)TMyClass = class procedure Proc1(x,y: Real); virtual; function Fun1(x,y: Real): Real; virtual;

理解 Delphi 的類(十一) – 深入類中的方法[2] – 關於覆蓋與重定義

//標準的覆蓋是這樣的TBass = class procedure Proc; virtual; {或用 dynamic}end;TChild = class(TBass) procedure Proc; override;end;//以下幾種情況屬於重定義, 其中例 3-5 還會有編譯提示{例1}TBass = class procedure Proc;end;TChild = class(TBass) procedure Proc;end;{例2}TBass = class

理解 Delphi 的類(十一) – 深入類中的方法[3] – 方法在實現時的參數省略

unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) end;TBass = class function Fun1(x,y: Integer): Integer; virtual; {Fun1 有 virtual 指示字} function Fun2

TScreen 類 – 判斷當前焦點在哪個表單上

unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls;type TForm1 = class(TForm) Timer1: TTimer; Button1: TButton; procedure Timer1Timer(Sender: TObject);

理解 Delphi 的類(十一) – 深入類中的方法[4] – 訪問限制(或者叫可見度)

//下面說的資料成員不僅僅指方法TMyClass = class(TObject) function Fun1: string; {公用地區的資料成員在預設狀態下會歸於 published 區} //所謂預設狀態就是編譯指令為{$M+}, 如果是{$M-}這些資料成員會歸於 public 區 private function Fun2: string; {private 區的資料成員只能在類內訪問}protected function Fun3: string; {protected

理解 Delphi 的類(十一) – 深入類中的方法[5] – 靜態方法、類方法、靜態類方法

//靜態方法是預設的, 如果不是虛方法或純虛方法, 那它就是一個靜態方法.//類方法就是通過類名就可以訪問的方法unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; Button2: TButton;

Api 函數: GetCursorPos 與轉換

//擷取滑鼠在表單中的當前位置procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);var str: string;begin str := Format('%d,%d',[X,Y]); ShowMessage(str);end;//用 GetCursorPos 擷取的是滑鼠相對與螢幕的位置var ps: TPoint; str:

理解 Delphi 的類(十一) – 深入類中的方法[6] – 類中的方法重載

//類中的方法重載首先具備前面說過的重載相關的所有特點, 如:TMyClass = class(TObject) function Fun(s: string): string; overload; function Fun(i: Integer): Integer; overload; function Fun(x,y: Integer): string; overload;end;//但如果是重載父類中的方法, 如果父類中被重載的方法在本類中沒有重載的話, 可以省略

理解 Delphi 的類(十一) – 深入類中的方法[7] – 關於 inherited

// inherited 就是調用父類方法的一個特殊命令; 舉例:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject);

for 迴圈的例子

unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; procedure

理解 Delphi 的類(十一) – 深入類中的方法[8] – 抽象方法與抽象類別

//抽象方法類似與介面; 在沒有介面的年代 Delphi 是用抽象方法來類比介面的; 我想它最終會被介面替代.{下面就定義了兩個抽象方法}TMyClass = class(TObject) procedure Proc1; virtual; abstract; {抽象方法首先應該是一個虛方法或動態方法} function Fun: string; dynamic; abstract; {抽象方法也叫純虛方法}end;{ 抽象方法在本類中只有定義、沒有實現;

理解 Delphi 的類(十一) – 深入類中的方法[9] – 不能被覆蓋的方法與不能被繼承的類

{ 抽象類別是一定要被繼承才可以使用的; 抽象方法是一定要被覆蓋才可以使用的. 現在說的是不能被覆蓋的方法, 與不能被繼承的類.}//譬如:TA = class procedure Proc; virtual; {TA 中的虛方法, 將要被覆蓋}end;TB = class(TA) procedure Proc; override; {覆蓋}end;TC = class(TB) procedure Proc; override; {再次覆蓋}end;//假如要設定 TB.Proc

理解 Delphi 的類(十一) – 深入類中的方法[10] – 構造方法與析構方法

//構造方法就是對象建立時調用的方法; 析構方法就是對象銷毀時調用的方法. 如:TMyClass = class(TObject)public constructor Create; {構造方法} destructor Destroy; override; {析構方法}end;{幾個要點: 這兩個方法都可以追溯到所有類的祖先類 TObject; 它們都屬於類方法, 儘管沒有 class 標識符; 但和類方法也有區別: 一般的類方法不能使用類中非待用資料;

總頁數: 61357 1 .... 4797 4798 4799 4800 4801 .... 61357 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.