Delphi編程技巧點滴

本貼收藏本人編程中遇到的點滴編程技巧,其中包括網友告知的,論壇收集的及個人總結的。大部分來自愛Delphi(http://www.aidelphi.com)與CSDN。整理於此,以備後用。

1、序數類型(或變量)的取值範圍
        Delphi Help中提到“Ordinal types include integer, character, Boolean, enumerated, and subrange types.”也就是說,序數類型包括整數,字符,布爾,枚舉和子域類型。要知道它的取值範圍,可以使用Low與High兩個函數。但Low與High函數的返回結果一般就是所傳參數類型的最大值,所以還要使用Ord函數將其轉換爲整形。如: ShowMessage(IntToStr(Ord(High(char)))); 結果是255。

2、覆蓋重寫控件屬性
        在編寫控件時,如果要用父類已經存在的屬性的名稱定義一個新的屬性,也就是重新定義父類已經存在的屬性,使其有不同的類型,產生不同的作用。如:
type
  TMyPanel = class(TCustomPanel)
  private
    FAlignment: Integer;    // 將父類的Alignment屬性由TAlignment類型改爲Integer類型。
    private SetAlignment(Value: Integer);
  public
    property Alignment: Integer read FAlignment write SetAlignment;
  end;

implementation

procedure TMyPanel.SetAlignment(Value: Integer);
begin
  if (Value >= ord(Low(FAlignment))) and (Value <= Ord(High(FAlignment)))
    and (Value <> FAlignment) then
  begin
    FAlignment:= Value;
    Inherited Alignment:= TAlignment(FAlignment);   // 調用父類的Alignment.
  end;
end;

{ 本技巧感謝艾真保的熱心解答 }

3、使用回車代替Tab鍵
        使用回車代替Tab鍵移動焦點的又一方法:
procedure TfrmEditBase.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = 13 then
  begin
    if Shift = [ssShift] then
      Perform(WM_NEXTDLGCTL, 1, 0)  // 往回移
    else
      Perform(WM_NEXTDLGCTL, 0, 0);  // 往後移
  end;
end;

4、在程序中運行別的程序
        在很多情況下,如在線更新,需要運行額外的程序來完成一些任務,且多數時候這些任務是直接或間接地操作程序自身的。這時要注意,運行了額外程序之後要及時正確地退出程序本身,這裏的“退出”就不能正常的使用MainForm.Close來完成了,因爲這樣的話,程序會等待額外程序運行並返回後纔會退出,如果是在線更新,則程序本身就因爲共享衝突而更新失敗。所以要用halt過程不正確的終止程序才行,必要時還要使用ChDir()函數改變當前目錄,以免該程序還在佔用該目錄,導致某些任務執行失敗。

5、Directory與Path
        按照中文直譯過來,Directory就是目錄,Path是路徑。從以下兩個例子可以看出來:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(ExtractFilePath(Application.ExeName));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  ShowMessage(ExtractFileDir(Application.ExeName));
end;
        在Delphi6中建立一個默認的Windows Application,運行上述代碼,則顯示依次如下:
C:/Program Files/Borland/Delphi6/Projects/
C:/Program Files/Borland/Delphi6/Projects
        很明顯,Path比Directory多了一個“/”。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章