delphi 基礎

 

 

Class:java

type
//class 聲明或者定義繼承一個類class(TObject). 
TDate = class
private
fDate: TdateTime;
Month, Day, Year: Integer;
public 

//構造函數,若是定義了constructor,默認構造函數無效
constructor Create (y, m, d: Integer);
constructor Create; overload;

//Destructor用於標識析構函數, 析構函數在類被釋放時自動調用.析構函數只容許覆蓋, 再不容許重載
//Free時,會調用Destory,調用前會判斷是否爲nil,可是調用後不會將self置爲nil,由於不知道自己是否被引用。
destructor Destroy;override;

//procedure 無返回值
procedure SetValue (y, m, d: Integer); overload;

//overload 重載
procedure SetValue (NewDate: TDateTime); overload;
function LeapYear: Boolean;
function GetText: String;
procedure Increase;
proceure Y;

//虛擬函數,通C++相同,經過virtual table(VMT)來找到virtual函數入口,包含父類的VMT
function Voice:String; virtual;
//動態方法,結果和virtual相同,差異在於編譯時候使用動態方發表(DMT),
//子類使用惟一的數字+動態方法地址構成DMT,可是不包含祖先的DMT。因此運行時內存小,可是速度慢
//function Voice:String; dynamic;

//抽象函數,同C++,抽象函數,不能定義實例
function Jump:String; virtual; abstract;

//message方法可用於處理windows消息,可調用postMessage(TDateObj.hANDLE,wm_User, 0, 0); var是引用
procedure WMUser(var Msg: TMessage); message wm_User;

//屬性名 : 屬性值類型 read 屬性讀函數/屬性值變量 write 屬性寫函數/屬性值變量,write屬性能夠省略,變成只讀
property Year: Integer read GetYear write SetYear;
end;

constructor TDate.Create;
begin
Day:= 0;
end;


type
TClassB = clas(TDate)
public
//父類能夠訪問子類方法
class procedure X;

//和C++同樣叫虛擬函數,和java同樣有override關鍵字...... 必須父類函數是virtual,若是不是,是覆蓋而不是刻意動態綁定
function Voice:String; override;
end

procedure TDate.GetYear;
begin
Result := YearOf(fDate);
end;

procedure TDate.Y;
begin 
//Self訪問當前對象,無參數方法能夠省略()
Self.X;
end;

 

類型轉換和異常處理:windows

//is 判斷類型
if obj is ClassB then
xxxxx

//as 類型轉換
(obj as ClassB).do

//異常處理
tryexceptend; 
tryfinallyend;
//和try…except…end不一樣,該結構的finally部分總被執行
//不存在try…except…finally…end結構來既處理異常,又保護資源分配的結構
//容許以下結構,從而實現既處理異常,又保護資源的分配
try
 tryexceptend  
finally
end;

//觸發異常,相似C++ throw
raise xxxException;

 

流程處理:數組

 

//If語句的一般結構是If...Then...else, else語句也能夠不要.
//在If語句內若是有多個子語句, 則必須用begin...End結構進行區分.
if a > b then
begin
 WriteLn('a>b');
End
else
 WriteLn('b>a');

//For關鍵字引出For循環結構, 用於作指定次數的循環.
for i := 1 to 100 do sum := sum + i;
//若是循環變量是遞減的, 則能夠用DownTo關鍵字
for i := 100 downto 1 do Inc(sum);


//Case語句用於完成條件選擇, Case語句的的被選擇對象必須是有序類型, 包括整型, 枚舉類型, 字符型等.
//Case語句必須由end結束,若是沒有相符合的選擇項, 能夠加入else來做出通用選擇.
function GetDays(AYear,AMonth: Integer): Integer;
begin
 case AMonth of
  1,3,5,7,8,10,12: Result := 31;
  4,6,9,11: Result := 30;
  2: begin
  if IsLeapYear(AYear) then
   Result:=29
  else
   Result:=28;
  end;
 else
  Result:=0;
end;

//While關鍵字用於引出While循環語句, 循環前先進行循環條件的判斷, 若是條件爲真則執行循環.
i := 0;
while i < 100 do
begin
 sum := sum + i;
 Inc(i);
end;

//Until關鍵字用於判斷repeat循環結構的循環條件, 
//若是循環條件爲真, 則退出循環.Until必須與repeat關鍵字聯合使用.
i := 0;
repeat
 sum := sum + i;
 Inc(i);
until(i >= 100);

//Goto語句用在跳轉行號, 能夠跳轉到當前結構層內任意位置.
//必須在聲明處用label關鍵字聲明行號.
//因爲Goto語句會破壞程序的結構, 不推薦使用.
var
 a,b: Integer;
label
 X,Y;
begin
 if a > b then
  goto X
 else
  goto Y;
X:
 WriteLn('a > b');
Y:
 WriteLn('b > a');
end;

 

與或非ide

//Xor用於取異或, 當兩個操做數相等時, 返回False, 不等時返回True.
var
 a,b: Integer;
begin
 a := 2; b := 3;
 if a xor b then
  WriteLn('a xor b')
 else
  WriteLn('a not xor b');
end;

//1、表示邏輯與 必須用括號括起
if (a>0) and (b>0) then
//2、表示位運算  必須用括號括起
var
a,b,c: Integer;
begin
c := (a and b);
end;

//1、表示邏輯或  必須用括號括起
if (a>0) or (b>0) then
//2、表示位運算  必須用括號括起
var
a,b,c: Integer;
begin
c := (a or b);
end;

 

數據類型函數

基本數據類型
類型             類型說明            使用說明
整形             Integer             標準數據類型,使用前沒必要定義
實型             Reall               標準數據類型,使用前沒必要定義
字符型           Character           標準數據類型,使用前沒必要定義
字符串型         String              標準數據類型,使用前沒必要定義
布爾型           Boolean             標準數據類型,使用前沒必要定義
枚舉型           Enumerated          高級數據類型,先定義後使用
子界型           Subrange            高級數據類型,先定義後使用
集合型           Set                 高級數據類型,先定義後使用
數據類型         Aray                高級數據類型,先定義後使用
文件類型         File                高級數據類型,先定義後使用
記錄類型         Record              高級數據類型,先定義後使用
類類型           Class               高級數據類型,先定義後使用
類引用類型       Class Reference     高級數據類型,先定義後使用
接口類型         Interface           高級數據類型,先定義後使用
指針類型         Pointer             高級數據類型,先定義後使用
過程類型         Procedural          高級數據類型,先定義後使用
可變類型         Variant             高級數據類型,先定義後使用 

整形數據      
類型          類型說名符    字節數     取值範圍 
整型          Integer       4          -2 147 483 648——2 147 483 647 
序數型        Cardinal      4          0——4 294 967 295       
短整型        ShortInt      1          -128——127
長整型        LongInt       4          -2 147 483 648——2 147 483 647
小整型        SmallInt      2          -32 768——32 767
64位整數      Int64         8          -2 63次方——2 63次方-1
字型          Word          2          0——65 535
長字型        LongWord      4          0——4 294 967 295
字節型        Byte          1          0——255     

實型數據
類型          類型說明符    字節數     取值範圍
單精度實型    Single        4          -3.4X10 38方——  -1.5X10-39方 ,1.5X10-39方——3.4X10 38方
雙精度實型    Double        8          -1.7X10 308方——  -5.0X10-324方,5.0X10-324方——1.7X10 308方 
擴展型        Extended      10         -1.1X10 4932方——  -3.6X10 -4951方,3.6X10 -4951方——1.1X10 4932方
貨幣型        Currency      8          -922 337 203 685 477.580 8——922 337 203 685 477.5870
實型          Real          8          -1.7X10 308方—— -5.0X10 -324方,5.0X10-324方——1.7X10 308方

字符型數據
類型          名稱          字節數     取值範圍
字符型        Char          1(2)       擴展ANSI字符集
寬字符型      WideChar      2          UniCode字符集
Ansi字符型    AnsiChar      1          擴展ANSI字符集


字符串型數據
類型           類型說明符        最大長度
字符串型       String            2 31方個字符
短字符型       ShortString       255個字符
長字符串型     Ansisting         2 31方個字符
寬字符串型     WideSring         2 30方個字符

布爾形數據
類型           類型說明符    字節數    取值
布爾型         Boolean       1         只能爲0(False)或1(True) 
長布爾型       LongBOOl      4         0(False)或非0(True)
寬布爾型       WideBool      2         0(False)或非0(True)
字節布爾型     ByteBool      1         0(False)或非0(True)

 

集合類型post

//Array用於表示數組, 任何的對象都能被聲明成數組.數組分爲靜態和動態的2種.
//靜態數組
var
Arr1: array [1..10] of Integer;
 
//動態數組, 因爲聲明時不知其元素個數, 因此必須在後期用SetLength方法設置數組的大小
var
Arr2: array of Integer;
 
//數組做爲參數時, 不能傳入數組的大小, 只能傳入數組名, 而後用Length方法獲取數組的元素個數
function X(A: array of Integer): Integer;
var
i: Integer;
begin
Result := 0;
for i := 0 to Length(A)-1 do
Result := Result + A[i];
end;

//Set關鍵字用於聲明集合類, 集合類容許用集合運算符, 如in等進行操做.
//集合的元素個數不超過256個
type
 TCol = (cA,cB,cC);
 TCols = set of TCol;
//操做時容許使用加減符號來添加或刪除某個集合元素
var
 Cols: Tcols;
begin
 Cols := Cols + [cA,cB];
end;

 

 

其餘關鍵字spa

//On關鍵字用於異常處理, 指出發生的異常, 並獲取異常信息.
try
 i := StrToInt(s);
except
 on E: exception do
  ShowMessage(E.Message);
end;

//With關鍵字用於將相同的對象集合起來處理, 它能夠省去輸入大量重複的代碼, 使代碼看上去比較精簡.
with Form1.Memo1.Lines do
begin
 Clear;
 Append('abc');
 Append('def');
 SaveToFile('C:\demo.txt');
end;
//上面這段代碼若是不使用With語句, 則顯得很是冗餘複製內容到剪貼板代碼:
Form1.Memo1.Lines.Clear;
Form1.Memo1.Lines.Append('abc');
Form1.Memo1.Lines.Append('def');
Form1.Memo1.Lines.SaveToFile('C:\demo.txt');

//In用於判斷一個集合中是否包含某個元素.被判斷的內容必須是單個集合元素和一個集合的實例.
type
 TCol = (cA,cB,cC);
 TCols = set of TCol;
var
 Cols: TCols;
begin
 Cols := [cA,cB];
 if cA in Cols then
  ShowMessage('cA in Cols')
 else
  ShowMessage('cA not in Cols');
end;
//In也用於工程文件中, 用於標識某個文件是否被工程所引用.
Uses
 Unit1 in 'Unit1.pas';
 
//In能夠被用在For語句中, 用於循環取出一個集合中的元素.
var
 s: string;
 sl: TStringList;
begin
 ...
 for s In sl do
 begin
  ShowMessage(s);
 end;
end;

//Of關鍵用於和其餘關鍵字構成指定的結構.Of能夠與Case, Class, Array, File, Set, Object連用.
//Case語句:
case Tag Of
 0: Result := 'a';
 1: Result := 'b';
end;
 
//Class語句:
type
 TDemo = class of TComponent;
 
//Array結構:
var
 MyInt: array of Integer;
 
//File結構:
var
 MyFile: file of Byte;
 
//Set語句:
type
 TCol = (cA,cB,cC);
 TCols = set of TCol;
 
//Object結構:
type
 MyFun = function(I: Integer): Integer of Object;
相關文章
相關標籤/搜索