本貼收藏本人編程中遇到的點滴編程技巧,其中包括網友告知的,論壇收集的及個人總結的。大部分來自愛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多了一個“/”。