*本文涉及的所有代碼均在WinNt 4、Delphi4 C/S下正確運行通過。 由於Delphi采用了真正的完全面向對象方法、當今世界最快的編譯器以及領先的數據庫技術,特別是她對Windows API的完全兼容,出色的代碼自動生成能力……人們已經看到,在短短的幾年當中,Delphi已在眾多的開發工具中脫穎而出!正是Delphi的諸多優秀品質,使程序員能在很短的時間內開發出極具專業水准的運用軟件,而所做的工作卻是相當的少! 正所謂Let's us make better!我們應怎樣充分利用Delphi的優勢來更加快速地進行程序設計程序呢? 一、充分利用代碼完全共享(句槟): 我們這樣做的目的不僅僅是為了“偷懶”,這也是優化程序代碼的一種方法。當然,首先要考慮的是能不能共享(這很簡單,看看是否包含在該事件的下拉集合中),其次是要注意的是共享後有沒有“麻煩”,因為正確是第一步,在保證正確的情況下才有必要去追求優化! 比如:我們在用戶刪除數據前給出一確認消息: procedure TForm1.Table1BeforeDelete(DataSet: TDataSet); begin //確認刪除記錄 if MessageBox(handle,'確實要刪除當前記錄嗎?','確認',MB_IconQuestion+MB_YesNo)=IDNO then Abort; end; 那麼,你只要願意讓用戶在刪除數據記錄前進行確認均可在TDataSet.BeforeDelete事件(Table2的BeforeDelete,Table3的BeforeDelete……)中完全共享這段代碼。好運不會天天有,在有的時候就不這麼直接、簡單了……
二、充分利用Delphi的強制轉換: “As”這個單詞不僅僅在英語中用處極大,在Delphi中亦然!當我們想為數個“同類”組件共享代碼時,即可發揮她的巨大作用:我們只需為其中一個組件編寫代碼即可。 比如:想讓一組文本編輯框在得到輸入焦點時背景顏色變為茶色,失去焦點是恢復系統顏色,我們可以如此共享代碼(讓每個文本編輯框的事件公用以下代碼): procedure TForm1.Edit1Enter(Sender: TObject); begin (Sender as TEdit).color:=ClTeal; //得到輸入焦點 end;
procedure TForm1.Edit1Exit(Sender: TObject); begin (Sender as TEdit).color:=ClWindow; //失去輸入焦點 end;
三、不起眼的Tag屬性: 上面的例子似乎有點太特殊了,萬一我只對其中某些組件特別關照怎麼辦?仍以上面的為例,比如其中有兩個文本輸入框需要輸入數字,為引用戶注意,得到焦點時顏色變為蘭色,但我仍然然不想為每個組件分別寫代碼。 要解決這個問題可利用組件的Tag屬性,先為要特別處理的組件分配非零、不等的Tag(必須說明的Delphi不會檢查Tag值是否相等,設計時自己掌握);然後如下編寫代碼,就可依然實現共享: procedure TForm1.Edit1Enter(Sender: TObject); begin case (Sender as TEdit).Tag of 10,20:(Sender as TEdit).Color:=clBlue //輸入數字的文本框 else (Sender as TEdit).Color:=clTeal; //其余文本框 end; end;
五、能偷懶時就偷懶: 這個話題本不應該寫在這裡,但還是忍不住…… 1、能利用對象觀察器直接設置且不會影響程序正常運行的就沒有必要去寫代碼: 由於這個話題涉及面太廣,此處僅舉一例說明:比如要在Delphi4中實現在狀態欄上的自動提示,又沒有太“苛 刻”的條件時,我們沒有必要再像以前一樣,先定義一個過程(ShowMyHint(...)),然後在程序初始化的地方 把她賦值給TApplication的OnHin事件。因為只需將狀態條的AutoHint屬性設為True即可!當然,她似乎只能在 第一個Panel上顯示(這就是沒有太“苛刻”的條件時)。當然,怪我羅嗦,有的朋友居然不知道Delphi的Hint 屬性由兩部分組成,此處不是說話之地,感興趣請到筆者的個人主頁上去遛遛www.zg169.Net/~Delphiok(剛開 張,東西還不多)。 2、節省代碼: 能夠少寫代碼就沒有必要多寫代碼,能夠精煉就不要冗余: 比如,以下的兩段代碼實現的功能完全相同,你喜歡用哪段? 代碼段一: if ToolButton1.Down=true then begin Dbgrid1.show; DelBtn.Enabled:=true; end else begin Dbgrid1.Hide; DelBtn.Enabled:=false; end; 代碼段二: Dbgrid1.Visible:=ToolButton1.Down; DelBtn.Enabled:=ToolButton1.Down; 因此,我們寫完程序後,不要僅僅追求程序調通,不妨也給程序代碼炸炸油。 3、節省變量: 有的程序員在不需要變量的地方定義了變量,在需要變量的地方定義了多余的變量,我個人認為這都不是好的 習慣,特別是動不動就定義全局變量更是值得商榷。有的讀者可能認為我是一個守財奴,現在的處理器速度都 什麼年代了……但我只簡單的給你展示一段代碼你就明白了: procedure TForm1.Button1Click(Sender: TObject); Var s1,s2:String; begin s1:=Inputbox('數據','請輸入用戶姓名','); if s1<>' then begin Btn_Name.Enabled:=True; s2:=Inputbox('數據','請輸入用戶住址','); if s2<>' then Btn_Adress.Enabled:=True; end; end;