2011年4月8日 星期五

網站

新手入門篇 :
Delphi Basics (全英文的, 哇哈哈~)
Delphi 5 寫碼標準

Based on the Coding Standard Document by Steve Teixeira, Xavier Pacheco



編譯:[url="mailto:huanlin_tsai@yahoo.com"]蔡煥麟[/url]

日期:Oct-27-2001





--------------------------------------------------------------------------------

目錄



1.0 簡介

2.0 一般程式碼格式

2.1 縮格

2.2 邊界

2.3 Begin...End

3.0 Object Pascal

3.1 括號

3.2 保留字與關鍵字

3.3 程序與函式

3.4 變數

3.4.1 變數命名與格式

3.4.2 區域變數

3.4.3 全域變數



3.5 型態



3.5.1 大小寫慣例

3.5.2 浮點數型態

3.5.3 列舉型態(Enumerated Types)

3.5.4 Variant 和 OleVariant 型態

3.5.5 結構型態



3.6 陳述句(statements)

3.6.1 if 陳述句

3.6.2 case 陳述句

3.6.3 while 陳述句

3.6.4 for 陳述句

3.6.5 repeat 陳述句

3.6.6 with 陳述句



3.7 結構化異常處理

3.7.1 try...finally

3.7.2 try...except



3.8 類別(classes)



3.8.1 命名/格式

3.8.2 欄位(Fields)

3.8.3 方法 (Methods)



命名/格式

靜態方法(Static Methods)

虛擬/動態方法(Virtual/Dynamic Methods)

抽象方法(Abstract Methods)

屬性存取方法(Property-Access Methods)

3.8.4 屬性(Properties)

4.0 檔案(File)

4.1 Project Files

4.2 Form Files

4.3 Data Module Files

4.4 Remote Data Module Files

4.5 Unit Files



4.5.1 一般單元結構

4.5.2 一般用途的單元

4.5.3 元件單元



4.6 檔案表頭(File Headers)



5.0 Forms and Data Modules

5.1 Forms



5.1.1 Form 型態命名標準

5.1.2 Form 實體命名標準

5.1.3 自動建立的 Forms

5.1.4 建立 Modal Form 的函式



5.2 Data Modules



5.2.1 Data Module 型態命名標準

5.2.2 Data Module 實體命名標準



5.3 Remote Data Modules



6.0 套件(Packages)

6.1 執行時期 v.s. 設計時期套件

6.2 檔案命名標準



7.0 元件(Components)

7.1 使用者自訂元件

7.2 元件實體命名慣例



7.2.1 元件型態字首(Component Type Prefixes)

7.2.2 元件修飾詞名稱(Component Qualifier Name)



8.0 補充說明



--------------------------------------------------------------------------------



1.0 簡介

這份文件修改自 Delphi 5 Developer's Guide 裡面的 coding standards,該文所建議的寫碼風格與 Borland 大致相同,我在編寫這份文件時也做了微幅的修改,刪除一些不斷重複的字句,例如,「某某名稱在命名時應該與它的目的相符」這類一般性的原則,只要是「命名」,不管是專案名稱,檔案名稱,元件,函式,變數....都應該取有意義的名稱。



這份文件不可能照顧到所有細節,但是比較重要的部分都提到了,另外一篇 "Delphi 5 元件型態字首" 則包含了元件命名的字首建議清單,應該也有參考價值。



依照文件中的規範來撰寫程式,不但可使程式碼比較清晰易讀,也能夠讓整個開發團隊的程式風格保持一致,這樣小組成員在看別人的程式碼時會輕鬆一些。如果這些風格和你原有的習慣相差很大,或者你正好接手維護別人的程式碼,以下工具可能對你有用處:



DelForExp - 可以幫你重新編排 Delphi 程式碼。



GExperts - 包含許多提高 Delphi 生產力的工具,其中 Code Proofreader 能夠自動幫你修正程式碼的大小寫失誤。



2.0 一般程式碼格式

2.1.縮格

每層的縮格為兩個空白字元,不要使用 Tab 字元(Tools | Editor options 裡面的 Use tab character 選項不要勾選),以免程式碼到了別台機器或用其他文字編輯器顯示、列印時走了樣。



2.2.邊界

邊界設定為 80 個字元(此為 Delphi 預設值),當程式碼太長而超過邊界時應予以折行,不過對於那些剛好有一個英文字跨在邊界上的情形則可以通容。折行時請盡量斷在逗號或者運算子後面,折下來的那行程式碼應該要往右縮格(兩個空白字元)。



2.3.Begin...End

begin 和 end 應該寫在新的一行,且兩者要對齊。下面的第一個例子是錯誤的示範,第二個是正確的:



for I := 0 to 10 do begin // 錯誤

for I := 0 to 10 do        // 正確

begin

但是當 begin 是接在 else 後面時則可以破例寫在 else 後面:



if (I > 9) then

begin
    ...

end

else begin
    SomeStatement;

end;



當然,else 之後的 begin 要寫在新的一行也可以。



〔回目錄〕





--------------------------------------------------------------------------------



3.0 Object Pascal

3.1.括號

左括號的右邊和右括號的左邊不應該有空白,參考下面的例子:



CallProc( AParameter ); // 錯誤

CallProc(AParameter);    // 正確

3.2 保留字與關鍵字

Object Pascal 的保留字與關鍵字應該全部都用英文小寫。



3.3 程序與函式

3.3.1 命名/格式

函式名稱第一個英文字母應該大寫,其後使用 Camel-capped 格式以便於閱讀。以下是錯誤示範:



procedure thisisapoorlyformattedroutinename;



適當的名稱應該像下面這個:



procedure ThisIsMuchMoreReadableRoutineName;



函式名稱應該要能代表它的功能,讓人能夠不看內部細節就知道該函式大概在做什麼。當函式執行了某項動作,我們通常會以一個動詞為首來命名,例如:



procedure FormatHardDrive;



設定某個變數值的函式應該以 Set 為字首:



procedure SetUserName;



取得某個變數值的函式應該以 Get 為字首:



procedure GetUserName: string;



3.3.2 形式參數

格式

相同型態的參數應該合併在一個語句中:



procedure Foo(Param1, Param2, Param3: Integer; Param4: string);



命名

參數名稱應該符合它們所代表的意義。參數名稱可以在前面加上大寫字母 'A':



procedure SomeProc(AUserName: string; AUserAge: integer);



以 'A' 開頭的參數命名方式是一項不成文的慣例,這麼做可以避免當參數名稱和屬性或欄位名稱相同時所造成的混淆。



參數順序

以下對於參數順序的建議在使用「暫存器呼叫慣例」時特別有幫助(在效能上)。



最常用的參數擺在第一位,較少用的參數依左至右的順序排列。

作為輸入的參數放左邊,作為輸出的參數放右邊。

將比較一般性的參數放在左邊,比較特殊的放右邊,例如:

procedure SomeProc(APlanet, AContinent, ACountry, AState, ACity);



以上關於參數排列的建議可能會有許多例外情形,例如事件處理函式,它總是會以 Sender 最為第一個參數。



常數參數

如果參數值不會被函式修改,應該在參數前面冠上 const,特別是以下這些型態:record, array, ShortString, interface。



名稱衝突

如果你使用的兩個單元中有相同的函式名稱,當你呼叫該函式時,被叫用的是在 uses 子句中排在後面的單元的函式。為了避免這種情況,你可以明白地指出要呼叫哪個單元的函式,例如:



SysUtils.FindClose(SR);







Windows.FindClose(Handle);



3.4 變數

3.4.1 變數命名與格式

變數名稱應和它們的目的相符。

迴圈控制變數通常以 i, j ,k 來命名,當然你也可以用像是 UserIndex 之類有意義的名稱。

布林變數的名稱應該要能充分表達 True 或 False 的意思。



3.4.2 區域變數

函式的區域變數恨其他變數的命名規則一樣。暫時性的變數也要有適當的名稱。



當有必要的時候,在一進入函式時就要初始化區域變數。AnsiString 型態的區域變數會被自動初始化為空字串,interface 和 dispinterface 型態的區域變數會自動被初始化為 nil,而 Variant 和 OleVariant 區域變數則會被自動初始化為 Unassigned。



3.4.3 全域變數

你應該盡量避免使用全域變數,當你真的需要時才使用全域變數,而且盡量在一個單元的範圍內使用,如果一個全域變數會被多個單元使用,你應該將它移到一個共用的單元內。



〔回目錄〕





--------------------------------------------------------------------------------



3.5 型態

3.5.1 大小寫慣例

如果型態的名稱屬於保留字,就全部小寫。Win32 API 的型態則全用大寫,一些比較特殊的型態,你應該遵循 Windows.pas 或其他 API 單元裡面的寫法。至於其他的型態,通常是名稱的第一個字母大寫,其餘採用 Camel-capped 方式,參考以下範例:



var
    MyString: string;    // string 是保留字.
    WindowHandle: HWND; // Win32 API 的型態.
    AForm: TMyForm; 
    i: Integer;        // 用小寫的 integer 也無妨.



3.5.2 浮點數型態

不要使用 Real 型態,它是為了相容於舊的 pascal 程式而保留的。一般使用浮點數時,請使用 double 型態,它是 IEEE 定義的標準資料格式。如果需要更大範圍的數值,可使用 Extended,但它是屬於 Intel 規格,而且 Java 不支援。只有當浮點數實踐佔用的位於組大小有意義時才使用 Single(例如使用另一種語言寫成的 DLL 時)。



3.5.3 列舉型態(Enumerated Types)

列舉型態的名稱必須以字母 'T' 開頭,藉此突顯它是一個型態。列舉型態中的識別字名稱應該以 2~3 個和其型態相關的小寫英文字母開頭,例如:



TSongType = (stRock, stClassical, stCountry, stAlternative, stHeavyforbiddenl, stRB);

列舉型態的變數名稱可以直接將型態的第一個字母 'T' 拿掉來命名,或是其他具有特殊意義的名稱,例如:FavoriteSongType1, FavoriteSongType2。



3.5.4 Variant 和 OleVariant 型態

通常不建議使用這兩種型態,它們通常被使用在只有執行時期才能確定其型態的時候,例如 COM 和資料庫程式設計。你應該只有在撰寫 COM 相關程式的時候才使用 OleVariant,因為 Variant 可以有效率地儲存 Delphi 字串,而 OleVariant 則必須將所有字串轉換成 OLE 字串(WideChar 字串),而且不會被參考計數--它們總是被複製成新的字串。



3.5.5 結構型態

陣列型態

陣列型態的名稱開頭冠上 'T',如果要宣告指標陣列的型態,名稱開頭應該冠上 'P',而且要宣告在陣列型態的前面,參考範例:



type
    PCycleArray = ^TCycleArray;
    TCycleArray = array [1..100] of integer;

陣列的變數在命名時可以直接將開頭的 'T' 拿掉作為變數名稱。



記錄型態

和陣列型態的規則一樣,參考下面的範例:



type
    PEmployee = ^TEmployee;
    TEmployee = record
    EmployeeName: string
    EmployeeRate: Double;
    end;

〔回目錄〕





--------------------------------------------------------------------------------



3.6 陳述句

3.6.1 if 陳述句

比較常發生的情形應該放在 if/then/else 裡面的 then 字句中,較少發生的情形則放在 else 字句裡面。

避免使用一長串的 if 敘述,如果可能的話,使用 case 來取代。

巢狀 if 不應該超過四層。當巢狀 if 超過四層時,你應該想辦法以更簡明的方式來撰寫這段程式碼(例如將部分判斷式寫成獨立函式)。

不要在 if 敘述中使用不必要的括號。

3.6.2 case 陳述句

case 裡面的各個條件應該以數字或英文字母的順序排列。

各個條件的處理動作應盡量簡短,通常以不超過五行程式碼為限,如果要處理的動作太複雜的話,應該寫成獨立的函式。

else 子句只有當需要預設行為或者偵測錯誤時才使用。

3.6.3 while 陳述句

不建議在 while 中使用 Exit 跳離迴圈,儘可能只使用條件式和 break 命令。

給 while 迴圈使用的變數的初始化動作應該要緊鄰在進入迴圈之前,其間不要有任何不相干的程式碼。

任何後續處理應在迴圈後立即進行。

3.6.4 for 陳述句

3.6.5 repeat 陳述句

3.6.6 with 陳述句

〔回目錄〕





--------------------------------------------------------------------------------



3.7 結構化異常處理(Structured Exception Handling)

異常處理常被用於捕捉錯誤和資源回收,例如,假設你你配置了一項資源,你可以在 finally 子句撰寫釋放資源的程式碼以確保資源會被釋放。



3.7.1 try...finally

在不需要理會錯誤的情形下,可以使用此敘述來確保資源被回收,但是每一個配置資源的動作都應該對應一個 try...finally 敘述,以下的程式碼可能會引發問題:



SomeClass1 := TSomeClass.Create;

SomeClass2 := TSomeClass.Create;

try
    {do some code }

finally
    SomeClass1.Free;
    SomeClass2.Free;

end;

比較安全的寫法應該是:



SomeClass1 := TSomeClass.Create;

try
    SomeClass2 := TSomeClass.Create;
    try
    {do some code }
    finally
    SomeClass2.Free;
    end;

finally
    SomeClass1.Free;

end;

3.7.2 try...except

你可以用此敘述來捕捉異常並進行額外的處理。一般來說,你不會只為了顯示錯誤訊息而使用 try...except,因為 Application 物件會自動幫你顯示錯誤訊息。如果你在 except 裡面處理完該做的事情之後想要再將錯誤傳出去,可以使用 raise 指令。



〔回目錄〕





--------------------------------------------------------------------------------



3.8 類別(classes)

3.8.1 命名/格式

類別的型態名稱以大寫 'T' 開頭,例如:



type
    TCustomer = class(TObject)

類別實體的名稱可以直接將前面的 'T' 去掉:



var
    Customer: TCustomer;

註:元件的命名規則請參考「元件」章節。



3.8.2 欄位(Fields)

類別中的欄位,指的就是私有成員(private members),他們的命名規則和一般的變數相同,但是必須在前面冠上大寫 'F' ,表示他們是 fields。

3.8.3 方法(Methods)

命名/格式

Methods 的命名規則和一般函式相同。



靜態方法(Static Methods)

當你不希望某個 method 被子類別改寫(override)的話,可以將它宣告為靜態方法。



虛擬/動態方法(Virtual/Dynamic Methods)

當你預期某個 method 會被子類別改寫的話,應將它宣告為 virtual。而 dynamic 的使用時機是當一個類別有很多子類別的時候,例如一個類別有 100 個子類別,而這些子類別都會用到某個 method,但是很少會去改寫它,那這個 method 就應該被宣告為 dynamic 以節省記憶體。



註:每一個類別的 virtual methods 需要以一個虛擬方法表(VMT, Virtual Method Table)來記錄。



抽象方法(Abstract Methods)

抽象方法應該只被用於抽象類別中,它們主要是用來定義基礎類別的介面。



屬性存取方法(Property-Access Methods)

存取屬性的方法就是你經常在元件的原始碼中看到的 Get/Set 方法,它們各自對應到屬性的讀取和寫入動作,寫入的方法名稱是以 Set 開頭,參數值的名稱通常以 Value 命名。參考以下範例:



TSomeClass =class(TObject)

private
    FSomeField: Integer;

protected
    function GetSomeField: Integer;
    procedure SetSomeField(Value: Integer);

public
    property SomeField: Integer read GetSomeField write SetSomeField;

end;



這些 Get/Set 方法應該放在 private 或 protected 區段中。



3.8.4 屬性(Properties)

屬性可以讓外界存取類別的私有成員,其命名方式是將私有成員名稱前面的 'F' 去掉。由於屬性代表的是資料,所以名稱應該是名詞而非動詞。



通常屬性是單數,如果是陣列型態的屬性,其名稱應該使用複數。



〔回目錄〕





--------------------------------------------------------------------------------



4.0 檔案

4.1 Project Files

專案名稱應該要能描述其功能,例如,The Delphi 5 Developer's Guide 的 Bug Manager 的專案名稱就取名為 DDGBugs.dpr。



4.2 Form Files

Form 的檔案名稱以 Frm 作結尾,例如,AboutFrm.pas。主視窗通常會以 MainFrm.pas 命名。



4.3 Data Module Files

Data Module 的檔案名稱以 DM 作結尾,例如,CustomerDM.pas 或 CustomerDm.pas。



4.4 Remote Data Module Files

Remote Data Module 的檔案名稱以 RDM 作結尾,例如,CustomerRDM.pas 或 CustomerRdm.pas。



註:MTSDataModule 也是 Remote Data Module 的一種,因此可以使用相同的命名方式。



4.5 Unit Files

4.5.1 一般單元結構

uses 子句

在 interface 區段的 uses 子句應該只包含 interface 會用到的單元,在 implementation 區段的 uses 子句應該只包含 implementation 會用到的單元,沒有用到的單元應該將其移除。



interface 區段

如其名稱所揭示的,這部分是提供外界存取的介面,在此區段中所宣告的型態,變數,函式都可能會被其他單元使用,因此不希望被外界存取者應置於 implementation 區段內。



implementation 區段

此區段所宣告的型態,變數,函式等都只能被此單元使用。



initialization 區段

不要把很花時間的工作放在此區段中,否則會拖慢應用程式載入的時間。



finalization 區段

在 initialization 區段中配置的資源必須在此處釋放。



4.5.2 一般用途的單元

例如,一個工具類的單元可能被命名為 BugUtilities.pas(或 BugUtils.pas),而一個專門存放全域變數的單元可能叫做 AppGlobals.pas。



記住這類共用單元可能被專案中所有的程式單元及套件使用,為了避免名稱衝突,在為檔案命名時不要用太普遍的名稱。



4.5.3 元件單元

元件單元應該要被集中存放在一個獨立的目錄,不應該放在專案目錄下跟其他檔案混在一起。



4.6 檔案表頭(File Headers)

檔案表頭通常提供了檔案的用途,版權宣告,作者,注意事項...等資訊。你可以採用類似下面的寫法:



(*---------------------------------------------------------------------------
    說明


    簡要說明此檔案的用途。


    注意事項


    版權宣告


    修改歷史

---------------------------------------------------------------------------*)

如果有輸入或輸出的參數,以及跟外部互動的介面也可以在檔頭中註明。



〔回目錄〕





--------------------------------------------------------------------------------



5.0 Forms and Data Modules

5.1 Forms

5.1.1 Form 型態命名標準

以 TXxxxForm 的方式命名,例如:



TAboutForm = class(TForm)

主視窗通常會這麼寫:



TMainForm = class(TForm)

輸入客戶基本資料的表單可能像這樣:



TCustomerEntryForm = class(TForm)

5.1.2 Form 實體命名標準

將型態名稱前面的 'T' 去掉作為 Form 的實體名稱,參考下面的範例:



型態名稱

實體名稱



TAboutForm AboutForm

TMainForm MainForm

TCustomerEntryForm CustomerEntryForm



5.1.3 自動建立的 Forms

只有主視窗才應該被自動建立,除非有特殊的原因,否則其他視窗都應該以動態的方式建立。



5.1.4 建立 Modal Form 的函式

當你要使用一個 Form 時,不要用 Delphi 幫你產生的 Form 變數,應該以一個函式來建立及顯示這個 Form,參考下面的範例:



unit UserDataFrm;



interface



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



type
    TUserDataForm = class(TForm)
    edtUserName: TEdit;
    edtUserID: TEdit;
    private
    {Private declarations }
    public
    {Public declarations }
    end;



function GetUserData(var aUserName: string; var aUserID: Integer): Word;



implementation



{$R *.DFM}



function GetUserData(var aUserName: string; var aUserID: Integer): Word;

var
    UserDataForm: TUserDataForm;

begin
    UserDataForm := TUserDataForm.Create(Application);
    try
    UserDataForm.Caption := 'Getting User Data';
    Result := UserDataForm.ShowModal;
    if Result = mrOK then
    begin
        aUserName := UserDataForm.edtUserName.Text;
        aUserID := StrToInt(UserDataForm.edtUserID.Text);
    end;
    finally
    UserDataForm.Free;
    end;

end;



end.



5.2 Data Modules

5.2.1 Data Module 型態命名標準

以 TXxxDataModule 或 TXxxDmod 的方式命名,例如:



TCustomerDmod = class(TDataModule)

5.2.2 Data Module 實體命名標準

將型態名稱前面的 'T' 去掉作為 Data Module 的實體名稱,例如:



var
    CustomerDmod: TCustomerDmod;

5.3 Remote Data Modules

命名方式可以和一般的 Data Modules 一樣使用 TXxxDmod,或者用 TXxxRdmod。例如:



var
    CustomerRmod: TCustomerRdmod;

〔回目錄〕





--------------------------------------------------------------------------------



6.0 套件(Packages)

6.1 執行時期 v.s. 設計時期套件

執行時期套件應該只包含其中各元件所需參考的單元或套件,其他只有在設計時期才會用到的程式碼或單元,例如屬性/元件編輯器等,就應該放在設計時期套件裡,此外,用來註冊元件的單元也應該放在設計時期套件裡。



6.2 檔案命名標準

套件的檔案名稱名應該仿照以下的例子:



iiilibvv.dpk(設計時期套件)

iiistdvv.dpk(執行時期套件)

其中 iii 表示用來作為識別的三個字元,可能是你的姓名,公司名稱,或是其他個體的縮寫。字元 vv 表示此套件所適用的 Delphi 版本號碼。而 lib 和 std 則用來區別設計時期和執行時期。



假設某個套件同時有設計時期和執行時期兩種套件,他們會有相似的檔案,例如 Delphi 5 Developer's Guide 的套件會命名為:



DdgLib50.dpk(設計時期套件)

DdgStd50.dpk(執行時期套件)

〔回目錄〕





--------------------------------------------------------------------------------



7.0 元件(Components)

7.1 使用者自訂元件

7.1.1 元件型態命名標準

元件的命名方式和之前「類別」一節當中提到的命名方式類似,差別僅在於元件名稱前面會冠上三個字元以作為識別,這三個前置字元可以是你個人、公司、或任何個體的名稱縮寫,例如,在 Delphi 5 Developer's Guide 裡面有一個時鐘元件,他的定義是:



TddgClock = class(TComponent)



注意這三個前置字元都是小寫英文字母。



7.1.2 元件單元

元件所屬的單元裡面應該就只包含一個主元件,所謂「主元件」就是指那些會放到 Delphi 元件盤上面的元件,其他輔助性質的元件則可以跟主元件放在同一個單元裡面。



7.1.3 使用註冊單元

用來註冊元件的程序應該被抽離出來,並集中到一個獨立的檔案當中,這個專門用來註冊元件的單元同時也可以用來註冊屬性編輯器,元件編輯器,專家(Delphi experts)....等等。



由於註冊元件的動作只有在設計時期套件中才會執行,因此註冊單元應該只被放在設計時期套件裡,而不會出現在執行時期套件裡。註冊單元的檔案名稱建議您以下列型式命名:



XxxReg.pas



其中 Xxx 表示用來作為識別的三個字元,可能是你的姓名,公司名稱,或是其他個體的縮寫。例如,在 Delphi 5 Developer's Guide 裡面用來註冊元件的單元其檔名就是 DdgReg.pas。



7.2 元件實體命名慣例

元件的命名採用類似「匈牙利表示法」的命名慣例,元件的名稱分為「元件型態字首」以及「元件修飾名稱」兩個部分。



7.2.1 元件型態字首(Component Type Prefixes)

所謂「元件型態字首」,就是一組代表元件型態的英文小寫字母,例如,TButton 的型態字首為 btn,TEdit 的型態字首為 edt。你可以依照下列的步驟挑選出合適的字首:



移除開頭的 'T' 字母,例如,"TButton" 就變成 "Button"。

移除所有的母音字母,並且全部改成小寫,例如,"Button" 就變成 "bttn","Edit" 變成 "edt"。

兩個連續的相同字母僅保留一個,例如,"bttn" 變成 "btn"。

若結果和其他的名稱衝突,可以開始加入母音字母,例如,"TBatton" 的字首和 "TButton" 一樣,因此可以將 "TBatton" 的字首改成 "batn"。

請參考另一篇 "Delphi 5 元件型態字首" 以取得更多元件型態字首的資訊。



7.2.2 元件修飾詞名稱(Component Qualifier Name)

元件修飾詞名稱應該要符合其作用,例如,一個用來關閉視窗的按鈕應該被命名為 "btnClose",輸入員工姓名的文字盒應被命名為 edtEmpName。



〔回目錄〕



8.0 補充說明

如果專案中的每個模組都已經賦予一個代號,例如 STK1100,STK1200...等,命名方式也可以採用變通的方法。參考下面的例子:

種類 元件名稱 檔案名稱

Form Stk1100Form Stk1100Frm.pas

Data Module Stk1100Dmod Stk1100Dm.pas

Remote Data Module Stk1100Rdmod Stk1100Rdm.pas

MTS Object/Remote DataModule Stk1100Object Stk1100Obj.pas

函數列表

名稱類型說明
Abort函數引起放棄的意外處理
Abs函數絕對值函數
AddExitProc函數將一過程添加到運行時庫的結束過程表中
Addr函數返回指定對象的地址
AdjustLineBreaks函數將給定字符串的行分隔符調整為CR/LF序列
Align屬性使控件位於窗口某部分
Alignment屬性控件標籤的文字位置
AllocMem函數在堆棧上分配給定大小的塊
AllowGrayed屬性允許一個灰度選擇
AnsiCompareStr函數比較字符串(區分大小寫)
AnsiCompareText函數比較字符串(不區分大小寫)
AnsiLowerCase函數將字符轉換為小寫
AnsiUpperCase函數將字符轉換為大寫
Append函數以附加的方式打開已有的文件
ArcTan函數余切函數
AssignFile函數給文件變量賦一外部文件名
Assigned函數測試函數或過程變量是否為空
AutoSize屬性自動控制標籤的大小
BackgroundColor屬性背景色
BeginThread函數以適當的方式建立用於內存管理的線程
BevelInner屬性控件方框的內框方式
BevelOuter屬性控件方框的外框方式
BevelWidth屬性控件方框的外框寬度
BlockRead函數讀一個或多個記錄到變量中
BlockWrite函數從變量中寫一個或多個記錄
BorderStyle屬性邊界類型
BorderWidth屬性邊界寬度
Break命令終止forwhilerepeat循環語句
Brush屬性畫刷
Caption屬性標籤文字的內容
ChangeFileExt函數改變文件的後綴
ChDir函數改變當前目錄
Checked屬性確定復選框選中狀態
Chr函數返回指定序數的字符
CloseFile命令關閉打開的文件
Color屬性標籤的顏色
Columns屬性顯示的列數
CompareStr函數比較字符串(區分大小寫)
Concat函數合併字符串
Continue命令繼續forwhilerepeat的下一個循環
Copy函數返回一字符串的子串
Cos函數余弦函數
Ctl3D屬性是否具有3D效果
Cursor屬性鼠標指針移入後的形狀
Date函數返回當前的日期
DateTimeToFileDate函數DELPHI的日期格式轉換為DOS的日期格式
DateTimeToStr函數將日期時間格式轉換為字符串
DateTimeToString函數將日期時間格式轉換為字符串
DateToStr函數將日期格式轉換為字符串
DayOfWeek函數返回星期的數值
Dec函數遞減變量值
DecodeDate函數將日期格式分解為年月日
DecodeTime函數將時間格式分解為時、分、秒、毫秒
Delete函數從字符串中刪除子串
DeleteFile命令刪除文件
DiskFree函數返回剩餘磁盤空間的大小
DiskSize函數返回指定磁盤的容量
Dispose函數釋放動態變量所佔的空間
DisposeStr函數釋放字符串在堆棧中的內存空間
DitherBackground屬性使背景色的色彩加重或減少50%
DragCursor屬性當鼠標按下時光標的形狀
DragMode屬性按動的作用方式
DropDownCount屬性容許的顯示數據項的數目
EditMask屬性編輯模式
Enabled屬性是否使標籤呈現打開狀態
EncodeDate函數將年月日合成為日期格式
EncodeTime函數將時、分、秒、毫秒合成為時間格式
EndMargin屬性末尾邊緣
Eof函數對有類型或無類型文件測試是否到文件尾
Eoln函數返回文本文件的行結束狀態
Erase命令刪除外部文件
ExceptAddr函數返回引起當前意外的地址
Exclude函數從集合中刪除一些元素
ExceptObject函數返回當前意外的索引
Exit命令立即從當前的語句塊中退出
Exp函數指數函數
ExpandFileName函數返回包含絕對路徑的字符串
ExtendedSelect屬性是否允許存在選擇模式,True時,MultiSelect才有意義
ExtractFileDir函數返回驅動器和路徑
ExtractFileExt函數返回文件的後綴
ExtractFileName函數返回文件名
ExtractFilePath函數返回指定文件的路徑
FileAge函數返回文件已存在的時間
FileClose命令關閉指定的文件
FileCreate命令用指定的文件名建立新文件
FileDateToDateTime函數DOS的日期格式轉換為DELPHI的日期格式
FileExists函數檢查文件是否存在
FileGatAttr函數返回文件的屬性
FileGetDate函數返回文件的DOS日期時間標記
FileOpen命令用指定的存取模式打開指定的文件
FilePos函數返回文件的當前指針位置
FileRead命令從指定的文件讀取
FileSearch命令在目錄中搜索指定的文件
FileSeek函數改變文件的指針
FileSetAttr函數設置文件屬性
FileSetDate函數設置文件的DOS日期時間標記
FileSize函數返回當前文件的大小
FileWrite函數對指定的文件做寫操作
FillChar函數用指定的值填充連續字節的數
FindClose命令終止FindFirst/FindNext序列
FindFirst命令對指定的文件名及屬性搜索目錄
FindNext命令返回與文件名及屬性匹配的下一入口
FloatToDecimal函數將浮點數轉換為十進制數
FloatToStrF函數將浮點數轉換為字符串
FloatToStr函數將浮點數轉換為字符串
FloatToText函數將給定的浮點數轉換為十進制數
FloatToTextFmt函數將給定的浮點數轉換為十進制數
Flush函數將緩衝區的內容刷新到輸出的文本文件中
FmtLoadStr函數從程序的資源字符串表中裝載字符串
FmtStr函數格式化一系列的參數,其結果以參數Result返回
Font屬性設置字體
Format函數格式化一系列的參數並返回Pascal字符串
FormatBuf函數格式化一系列的參數
FormatDateTime函數用指定的格式來格式化日期和時間
FormatFloat函數指定浮點數格式
Frac函數返回參數的小數部分
FreeMem函數按給定大小釋放動態變量所佔的空間
GetDir返回指定驅動器的當前目錄
GetHeapStatus返回內存管理器的當前狀態
GetMem建立一指定大小的動態變量,並將指針指向該處
GetMemoryManager返回內存管理器的入口點
Glyph函數按鈕上的圖像
Halt停止程序的執行並返回到操作系統
Hi返回參數的高地址位
High返回參數的上限值
Hint屬性提示信息
Int返回參數的整數部分
Include添加元素到集合中
Insert在字符串中插入子串
IntToHex將整型數轉換為十六進制數
IntToStr將整型數轉換為字符串
IOResult返回最新的I/O操作完成狀態
IsValidIdent測試字符串是否為有效的標識符
Items屬性默認顯示的節點
Kind屬性擺放樣式
LargeChange屬性最大改變值
Layout屬性圖像佈局
Length函數返回字符串的動態長度
Lines屬性缺省顯示內容
Ln函數自然對數函數
Lo函數返回參數的低地址位
LoadStr函數從應用程序的可執行文件中裝載字符資源
LowerCase函數將給定的字符串變為小寫
Low函數返回參數的下限值
Max屬性最大值
MaxLength屬性最大長度
Min屬性最小值
MkDir命令建立一子目錄
Move函數從源到目標複製字節
MultiSelect屬性允許同時選擇幾個數據項
Name屬性控件的名字
New函數建立新的動態變量並設置一指針變量指向他
NewStr函數在堆棧上分配新的字符串
Now函數返回當前的日期和時間
Odd測試參數是否為奇數
OnActivate事件焦點移到窗體上時觸發
forbidden事件單擊窗體空白區域觸發
forbidden事件雙擊窗體空白區域觸發
OnCloseQuery事件使用者試圖關閉窗體觸發
OnClose事件窗體關閉後才觸發
OnCreate事件窗體第一次創建時觸發
OnDeactivate事件用戶切換到另一應用程序觸發
OnDragDrop事件鼠標拖放操作結束時觸發
OnDragOver事件有其他控件從他上面移過觸發
forbidden事件按下鼠標鍵時觸發
forbidden事件釋放鼠標鍵時觸發
forbidden事件移動鼠標時觸發
OnHide事件隱藏窗體時觸發
forbidden事件按下鍵盤某鍵時觸發
forbidden事件按下鍵盤上的單個字符鍵時觸發
forbidden事件釋放鍵盤上的某鍵時觸發
OnPaint事件窗體上有新部分暴露出來觸發
OnResize事件重新調整窗體大小觸發
OnShow事件在窗體實際顯示之前瞬間觸發
Ord返回序數類的序數
OutlineStyle屬性類型
OutOfMemoryError引起OutOfMemory意外
PageIndex屬性頁索引
Pages屬性
ParamCount函數返回在命令行上傳遞給程序的參數數量 
ParamStr函數返回指定的命令行參數
Pen屬性畫刷設置
Pi函數返回圓周率Pi
Picture屬性顯示圖像
PictureClosed屬性設置Closed位圖
PictureLeaf屬性設置Leaf位圖
PictureMinus屬性設置Minus位圖
PictureOpen屬性設置Open位圖
PicturePlus屬性設置Plus位圖
Pos函數在字符串中搜索子串
Pred函數返回先前的參數
Random函數返回一隨機函數
Randomize函數用一隨機數初始化內置的隨機數生成器
Read函數對有格式的文件,讀一文件組件到變量中;對文本文件,讀一個或多個值到一個或多個變量中
Readln函數執行Read過程,然後跳到文件下一行
ReadOnly屬性只讀屬性
ReAllocMem函數分配一動態變量
Rename函數重命名外部文件
RenameFile函數對文件重命名
Reset函數打開已有的文件
Rewrite函數建立並打開一新的文件
RmDir函數刪除空的子目錄
Round函數將實數值捨入為整型值
RunError函數停止程序的執行
ScrollBars屬性滾動條狀態
Seek函數將文件的當前指針移動到指定的組件上
SeekEof函數返回文件的文件結束狀態
SeekEoln函數返回文件的行結束狀態
SelectedColor屬性選中顏色
SetMemoryManager函數設置內存管理器的入口點
SetTextBuf函數給文本文件指定I/O緩衝區
Shape屬性顯示的形狀
ShowException函數顯示意外消息與地址
Sin函數正弦函數
SizeOf函數返回參數所佔的字節數
SmallChange屬性最小改變值
Sorted屬性是否允許排序
Sqr函數平方函數
Sqrt函數平方根函數
StartMargin屬性開始邊緣
State屬性控件當前狀態
Str函數將數值轉換為字符串
StrAlloc函數給以NULL結束的字符串分配最大長度-1的緩衝區
StrBufSize函數返回存儲在由StrAlloc分配的字符緩衝區的最大字符數
StrCat函數將一字符串附加到另一字符串尾並返回合併的字符串
StrComp函數比較兩個字符串
StrCopy函數將一個字符串複製到另一個字符串中
StrDispose函數釋放堆棧上的字符串
StrECopy函數將一字符串複製到另一個字符串並返回結果字符串尾部的指針
StrEnd函數返回指向字符串尾部的指針
Stretch屬性自動適應控件的大小
StrFmt函數格式化一系列的參數
StrIComp函數比較兩個字符串(不區分大小寫)
StringToWideChar函數ANSI字符串轉換為UNICODE字符串
StrLCat函數將一字符串中的字符附加到另一字符串尾並返回合併的字符串
StrLComp函數以最大長度比較兩個字符串
StrLCopy函數將一個字符串中的字符複製到另一個字符串中
StrLen函數返回字符串中的字符數
StrLFmt函數格式化一系列的參數,其結果中包含有指向目標緩衝區的指針
StrLIComp函數以最大長度比較兩個字符串(不區分大小寫)
StrLower函數將字符串中的字符轉換為小寫
StrMove函數將一個字符串中的字符複製到另一個字符串中
StrNew函數在堆棧上分配一個字符串
StrPas函數將以NULL結束的字符串轉換為PASCAL類的字符串
StrPCopy函數PASCAL類的字符串複製為以NULL結束的字符串
StrPLCopy函數PASCAL類的最大長度字符串複製為以NULL結束的字符串
StrPos函數返回一個字符串在另一個字符串中首次出現指針
StrRScan函數返回字符串中最後出現字符的指針
StrScan函數返回字符串中出現首字符的指針
StrToDate函數將字符串轉換為日期格式
StrToDateTime函數將字符串轉換為日期/時間格式
StrToFloat函數將給定的字符串轉換為浮點數
StrToInt函數將字符串轉換為整型
StrToIntDef函數將字符串轉換為整型或默認值
StrToTime函數將字符串轉換為時間格式
StrUpper函數將字符串中的字符轉換為大寫
Style屬性類型選擇
Suce函數返回後繼的參數
Swap函數交換參數的高低地址位
Tabs屬性標記每一項的內容
TabIndex屬性標記索引
Text屬性顯示的文本
TextToFloat函數將字符串(以NULL結束的格式)轉換為浮點數
Time函數返回當前的時間
TimeToStr函數將時間格式轉換為字符串
Trim函數從給定的字符串中刪除前導和尾部的空格及控制字符
TrimLeft函數從給定的字符串中刪除首部的空格及控制字符
TrimRight函數從給定的字符串中刪除尾部的空格及控制字符
Trunc函數將實型值截取為整型值
Truncate函數截去當前文件位置後的內容
UnSelectedColor屬性未選中顏色
UpCase將字符轉換為大寫
UpperCase將給定的字符串變為大寫
Val函數將字符串轉換為整型值
VarArrayCreate函數以給定的界限和維數建立變體數組
VarArrayDimCount函數返回給定變體的維數
VarArrayHighBound函數返回給定變體數組維數的上界
VarArrayLock函數鎖定給定的變體數組
VarArrayLowBound函數返回給定變體數組維數的下界
VarArrayOf函數返回指定變體的數組元素
VarArrayRedim函數通過改變上限來調整變體的大小
VarArrayUnlock函數解鎖指定的變體數組
VarAsType函數將變體轉換為指定的類型
VarCase函數將變體轉換為指定的類型並保存他
VarClear函數清除指定的變體
VarCopy函數將指定的變體複製為指定的變體
VarFormDateTime函數返回包含日期時間的變體
VarIsArray函數測試變體是否為數組
VarIsEmpty函數測試變體是否為UNASSIGNED
VarIsNull函數測試變體是否為NULL
VarToDateTime函數將給定的變體轉換為日期時間
VarType函數將變體轉換為指定的類型並保存他
Visible屬性控件的可見性
WantReturns屬性True時,按回車鍵產生一個回車符;為False時,按下Ctrl+Enter才產生回車符
Write命令對有格式的文件,寫一變量到文件組件中;對文本文件,寫一個或多個值到文件中
Writeln命令執行WRITE過程,然後輸出一行結束標誌
WideCharLenToString函數ANSI字符串轉換為UNICODE字符串
WideCharLenToStrWar函數UNICODE字符串轉換為ANSI字符串變量
WideCharToString函數UNICODE字符串轉換為ANSI字符串
WideCharToStrVar函數UNICODE字符串轉換為ANSI字符串變量