本文參考自《delphi2010語法手冊》
1. 工程文件結構
源文件聯系着unit單元,delphi主模塊源文件格式為.dpr,其他模塊為.pas,一個完整程序由一個.dpr和若干.pas組成。
2..dpr 程序結構
一個.dpr由程序頭、[use從句]、主程序塊組成。一個典型工程文件如下:
1 program Project; 2 {$APPTYPE CONSOLE} 3 uses 4 SysUnits; 5 begin 6 7 end.
程序頭指示所編寫程序名稱,良好的程序,.dpr代碼盡量少,盡量將代碼分布在.pas中然后再在.dpr里調用。
在程序主文件使用到的所有.pas文件必須列在uses從句里。
用begin和end包圍的一段代碼稱為一個代碼塊。工程文件含有一個主程序塊用於存放主程序代碼,工程文件中的全局標識符必須聲明於begin之前。
3. 單元文件結構
程序的每個子模塊稱為一個單元,每個單元存儲在一個.pas文件中,一個文件對應一個單元。單元文件后綴名.pas,每個.pas文件依次包括:單元名稱、Interface關鍵字、implementation、[initialization]、[finalization]、關鍵字end。一個完整的.pas文件如下:
1 unit Unit1; //單元名稱 2 3 interface //interfae起始部分 4 uses ... 5 6 implementation //implementation起始處 7 uses..... 8 9 initialization //initialization部分起始處 10 ..... 11 12 finalization //finalization部分起始處 13 ..... 14 15 end. //單元文件結尾(end后必須以句號結尾)
unit名稱與.pas文件名稱一致,一個.dpr中不能應用兩個名稱相同的.pas.
interface至implementation之間的部分稱為interface部分。該部分可定義變量、常量、例程等。並非只有此處才可以定義標識符,但只有此處定義的標識符才能被其他文件訪問(全局標識符)。此部分定義的例程只是一個原型,具體的實現部分則放在implementation中。uses關鍵字緊接着interface之后,兩者間不允許有任何其他代碼。
implementation至initialization之間的部分可書寫例程的體代碼,此處定義的比變量、常量、例程等,只能在本implementation單元使用,interface部分和其他單元無法使用。
initialization至finalization之間的部分可選,此部分的代碼在程序啟動時運行,若多個單元中都包含該部分,則按照工程文件uses順序執行。
finalization部分可有可無,僅當initialization存在時才可使用此部分。程序退出時使用此部分代碼,除非程序由Halt強行退出。當多個單元都存在此部分,運行順序與initialization相反。
4. 單元語法與uses從句
5. delphi的數據類型
簡單類型包括:整形、字符型、布爾型、枚舉、子界類型、實型。除實型以外,都是有序類型,即每個值在值域中都有一個序數。
6. 整形:
7. 實型:
8. 字符類型:包括ansiChar和WideChar,ansiChar使用一個字節表示一個字符,WideChar則用兩個字節表示一個字符。二者之間不能相互賦值。
9. 布爾型:用於判斷真假,只有true和false兩種值。delphi內置4中布爾類型:Boolean/ByteBool/WordBoolLongBool,內存中分別占1、1、2、4個字節。
10. 枚舉類型:
type 名 = (標識符1,標識符2,標識符3.。。。);
11. 子界類型:
type 子界類型名 = 下界..上界
結構類型包括:集合、數組、記錄
12. 集合:
type set1 = set of 有序值得集合 例子: type set1 = set of 0..10; type set2 = set of (red,green,blue); type set3 = set of byte;
13. 數組:
靜態: 一維: type myarr = Array[3..5] of integer //序號是3、4、5值為integer類型 多維: type myarr = Array[1..3] of Array[3..5] of integer; 或 type myarr = Array[1..3,3..5] of integer; 動態: type dmyarr = array of char; var dal:dmyarr;
14. 記錄類型:
type trec = record mem1:char; mem2:integer; ... end;
15. 字符串類型:
16. 指針類型:
指針的聲明: var ansiStr :^AnsiString; 或先聲明類型在聲明變量: type pansiStr = ^AnsiString; var ansiStr:pansiStr; 指針的賦值: 方式有二,即將另一指針變量值賦給該指針變量,此兩個變量指向同一個地址;或者將某個變量的地址賦給該變量。 @取址符 如@ansiStr ^取值符 如ansiStr^
17. 變體類型:
variant
18.運算符
有序類型運算符:
ord:返回有序值在值域中的序數 如:ord('A') = 65 pred:返回指定值的前一個值 pred('B') = A succ:返回指定值的下一個值 succ('A') = B high:返回變量能夠表示的最大值或某類型的上界 high(byte) = 255 low:與high相反
數學運算符:
+ - * / div 整除 mod 求余
邏輯運算符:
not 反 and 且 or 或 xor 異或
位運算符:
not 按位取反 and 按位取且 or 按位取或 xor 按位取異或 shl 左移 shr 右移
字符串運算符:
+ 將字符串連接
集合運算符:
指針運算符:
關系運算符:
19. 條件語句
if語句
1 if <條件表達式> then 2 <語句1> 3 else 4 <語句2>;
20. 選擇語句
1 Case 選擇表達式 of 2 常量1:語句1; 3 ... 4 常量n:語句n; 5 Else 6 ... 7 End;
21. 循環語句
1》while
1 While 條件表達式 do 2 循環語句;
例:
while i < n do
begin
sum := sum+i;
i := i+1;
end;
2》Repeat
repeat 循環體 until 條件表達式 例: repeat i := i+1; sum := sum+i; until i = n;
3》for
for 計數器 := 初值 to/downto 終值 do 循環體 例: for i := 1 to/downto n do writeln('hello delphi');
4》for...in
for v in set do 循環體 例: var myset :set of AnsiChar; ch : AnsiChar; begin myset := ['1','2']; for ch in myset do writeln(ch); end.
for in還可以遍歷數組、字符串、類、接口、記錄。
22. continue和break語句
23. 程序終止
exit:退出當前正在執行的程序塊,不會退出整個程序,除非將其用在了主程序塊(.dpr文件中)中。
procedure Mi; begin exit; end; 或返回一個參數,該參數類型和函數返回類型一致 function Mi:string begin exit('str'); end;
Halt:引發異常中斷並通過中斷直接退出整個程序。
procedure Mi; begin Halt; end;
terminate:delphi窗體程序中含有一個全局程序對象(一般是application),其中的terminate方法可在窗體程序的任何地方使程序正常中斷並退出。
procedure TForm1.Button1Click(sender:TObject); begin Application.terminate; end;