Delphi之快速設計(程式設計篇) (轉)
Delphi之快速設計(程式設計篇) (轉)[@more@]*本文涉及的所有程式碼均在WinNt 4、4 C/S下正確執行透過。
由於Delphi採用了真正的完全面向方法、當今世界最快的以及領先的技術,特別是她對 的完全相容,出色的程式碼自動生成能力……人們已經看到,在短短的幾年當中,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: T);
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;
四、充分利用Delphi的CodeInsight技術:
(以下言論均假設在Delphi的預設條件之下)
1、利用Self關鍵字:
也許有人以為我搞錯了!其實,這裡要向大家介紹的是筆者(因記性太差)“慣犯”的又一“伎倆”。在有的時候,我們可能記不準元件的確切名字(Name)了,這時你要是再返回窗體表格去確認一遍的話(大多數的朋友應該是這樣的)未免有點太對不起時間了,此時你要是利用Self就特別省力,因為Self在Delphi中是顯式地引用該元件所在的窗體,因此,我們可以輸入Self後加一逗點以此啟用Delphi的Code Completion,此時系統會立即為你顯示一包含該窗體所有元件及窗體本身屬性的下拉選單,你從中選擇所需元件即可。這樣,就避免了來回切換窗體表格的這一工作量。
2、利用程式碼補缺(Code Completion):
我們現在再也沒有必要讓自己去記憶太多的引數細節了,因為有了Delphi的程式碼補缺功能。在具體解釋之前,還要羅嗦一點,Delphi的Code Completion預設的會與我們已用的某些快捷鍵衝突(如Ctrl+Space就與我們開啟、關閉漢字輸入法的快捷鍵衝突),因此請先解決這個問題。
當然,Code Completion一般會自動啟用,但是不要以為就萬事大吉了,本人認為Delphi的此項技術應向VB學習,此言怎講?舉例來說吧:當你輸入StrToint(edit1.後,Delphi不會自動顯示edit1的屬性,此時你就將用Ctrl+Space來啟用Code Completion,特別是巢狀很深的時候,Delphi似乎也糊塗了。
3、利用程式碼引數(Code Parameters):
啟用快捷鍵是Ctrl+Shift+Space。這項功能也是Delphi自動實現的,正如上述所言,當我們來回切或是游標移走時,這項功能也就隨之消失了,當我們需要確認該的具體引數時即可以此快捷鍵開啟。
4、利用程式碼模板(Code Templates):
這項技術再次體現了Inprise公司Delphi開發組的工程師們高超的技術及處處為使用者著想的高尚品德!(只是不希望再聽到又有人被挖走的訊息)
啟用快捷鍵是Ctrl+J。此項功能實現機制與程式碼補缺的差不多,只是她不是自動的,當然最另令人激動的一面是使用者可以定義自己的模板。比如筆者定義的一個模板:快捷-〉“msg”;程式碼-〉“MessageboxMessageBox(
handle,'|','',MB_Icon...+MB_...);”,只要一輸入msg然後按Ctrl+J整個程式碼“脫穎而出”,並把游標幫我移到我該補充輸入的地方,簡直爽呆了!
注意:如果你為自己定義了很多可愛的模板捨不得丟掉的話,不妨把...Delphi4Bin目錄下的Delphi32.dci,重新Delphi後以此檔案覆蓋即可。
五、能偷懶時就偷懶:
這個話題本不應該寫在這裡,但還是忍不住……
1、能利用物件觀察器直接設定且不會影響程式正常執行的就沒有必要去寫程式碼:
由於這個話題涉及面太廣,此處僅舉一例說明:比如要在Delphi4中實現在狀態列上的自動提示,又沒有太“苛
刻”的條件時,我們沒有必要再像以前一樣,先定義一個過程(ShowMyHint(...)),然後在程式初始化的地方
把她賦值給TApplication的OnHin事件。因為只需將狀態條的AutoHint屬性設為True即可!當然,她似乎只能在
第一個Panel上顯示(這就是沒有太“苛刻”的條件時)。當然,怪我羅嗦,有的朋友居然不知道Delphi的Hint
屬性由兩部分組成,此處不是說話之地,感興趣請到筆者的個人主頁上去遛遛~delphiok(剛開
張,東西還不多)。
2、節省程式碼:
能夠少寫程式碼就沒有必要多寫程式碼,能夠精煉就不要冗餘:
比如,以下的兩段程式碼實現的功能完全相同,你喜歡用哪段?
程式碼段一:
if ToolButton1.Down=true then
begin
grid1.show;
DelBtn.Enabled:=true;
end
else
begin
Dbgrid1.H;
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;
當然,本文的這些小例子僅僅從側面表述了筆者的一些個人觀點,要充分體現Delphi的高效性,這些還遠遠不夠!限於篇幅,關於資料庫以及其他高階話題在這裡均未涉及,特別是資料庫方面,Delphi提供了相當的靈活性!當然,萬變不離其宗,只要隨時注意Delphi是完全物件導向的,有物件就考慮其屬性、事件、方法、繼承、引用等等。
由於Delphi採用了真正的完全面向方法、當今世界最快的以及領先的技術,特別是她對 的完全相容,出色的程式碼自動生成能力……人們已經看到,在短短的幾年當中,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……)中完全共享這段程式碼。好運不會天天有,在有的時候就不這麼直接、簡單了……
“As”這個單詞不僅僅在英語中用處極大,在Delphi中亦然!當我們想為數個“同類”共享程式碼時,即可發揮她的巨大作用:我們只需為其中一個元件編寫程式碼即可。
比如:想讓一組文字編輯框在得到輸入焦點時背景顏色變為茶色,失去焦點是恢復顏色,我們可以如此共享程式碼(讓每個文字編輯框的事件公用以下程式碼):
procedure TForm1.Edit1Enter(Sender: T);
begin
(Sender as TEdit).color:=ClTeal; //得到輸入焦點
end;
procedure TForm1.Edit1Exit(Sender: TObject);
begin
(Sender as TEdit).color:=ClWindow; //失去輸入焦點
end;
上面的例子似乎有點太特殊了,萬一我只對其中某些元件特別關照怎麼辦?仍以上面的為例,比如其中有兩個文字輸入框需要輸入數字,為引使用者注意,得到焦點時顏色變為蘭色,但我仍然然不想為每個元件分別寫程式碼。
要解決這個問題可利用元件的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;
(以下言論均假設在Delphi的預設條件之下)
1、利用Self關鍵字:
也許有人以為我搞錯了!其實,這裡要向大家介紹的是筆者(因記性太差)“慣犯”的又一“伎倆”。在有的時候,我們可能記不準元件的確切名字(Name)了,這時你要是再返回窗體表格去確認一遍的話(大多數的朋友應該是這樣的)未免有點太對不起時間了,此時你要是利用Self就特別省力,因為Self在Delphi中是顯式地引用該元件所在的窗體,因此,我們可以輸入Self後加一逗點以此啟用Delphi的Code Completion,此時系統會立即為你顯示一包含該窗體所有元件及窗體本身屬性的下拉選單,你從中選擇所需元件即可。這樣,就避免了來回切換窗體表格的這一工作量。
2、利用程式碼補缺(Code Completion):
我們現在再也沒有必要讓自己去記憶太多的引數細節了,因為有了Delphi的程式碼補缺功能。在具體解釋之前,還要羅嗦一點,Delphi的Code Completion預設的會與我們已用的某些快捷鍵衝突(如Ctrl+Space就與我們開啟、關閉漢字輸入法的快捷鍵衝突),因此請先解決這個問題。
當然,Code Completion一般會自動啟用,但是不要以為就萬事大吉了,本人認為Delphi的此項技術應向VB學習,此言怎講?舉例來說吧:當你輸入StrToint(edit1.後,Delphi不會自動顯示edit1的屬性,此時你就將用Ctrl+Space來啟用Code Completion,特別是巢狀很深的時候,Delphi似乎也糊塗了。
3、利用程式碼引數(Code Parameters):
啟用快捷鍵是Ctrl+Shift+Space。這項功能也是Delphi自動實現的,正如上述所言,當我們來回切或是游標移走時,這項功能也就隨之消失了,當我們需要確認該的具體引數時即可以此快捷鍵開啟。
4、利用程式碼模板(Code Templates):
這項技術再次體現了Inprise公司Delphi開發組的工程師們高超的技術及處處為使用者著想的高尚品德!(只是不希望再聽到又有人被挖走的訊息)
啟用快捷鍵是Ctrl+J。此項功能實現機制與程式碼補缺的差不多,只是她不是自動的,當然最另令人激動的一面是使用者可以定義自己的模板。比如筆者定義的一個模板:快捷-〉“msg”;程式碼-〉“MessageboxMessageBox(
handle,'|','',MB_Icon...+MB_...);”,只要一輸入msg然後按Ctrl+J整個程式碼“脫穎而出”,並把游標幫我移到我該補充輸入的地方,簡直爽呆了!
注意:如果你為自己定義了很多可愛的模板捨不得丟掉的話,不妨把...Delphi4Bin目錄下的Delphi32.dci,重新Delphi後以此檔案覆蓋即可。
這個話題本不應該寫在這裡,但還是忍不住……
1、能利用物件觀察器直接設定且不會影響程式正常執行的就沒有必要去寫程式碼:
由於這個話題涉及面太廣,此處僅舉一例說明:比如要在Delphi4中實現在狀態列上的自動提示,又沒有太“苛
刻”的條件時,我們沒有必要再像以前一樣,先定義一個過程(ShowMyHint(...)),然後在程式初始化的地方
把她賦值給TApplication的OnHin事件。因為只需將狀態條的AutoHint屬性設為True即可!當然,她似乎只能在
第一個Panel上顯示(這就是沒有太“苛刻”的條件時)。當然,怪我羅嗦,有的朋友居然不知道Delphi的Hint
屬性由兩部分組成,此處不是說話之地,感興趣請到筆者的個人主頁上去遛遛~delphiok(剛開
張,東西還不多)。
2、節省程式碼:
能夠少寫程式碼就沒有必要多寫程式碼,能夠精煉就不要冗餘:
比如,以下的兩段程式碼實現的功能完全相同,你喜歡用哪段?
程式碼段一:
if ToolButton1.Down=true then
begin
grid1.show;
DelBtn.Enabled:=true;
end
else
begin
Dbgrid1.H;
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;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-998709/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Delphi程式設計之--慣用法 (轉)程式設計
- WDM驅動程式設計之設計開發篇 (轉)程式設計
- Delphi 中物件導向程式設計之我見 (轉)物件程式設計
- Delphi實用程式設計經驗二 (轉)程式設計
- Delphi資料庫程式設計教程(九) (轉)資料庫程式設計
- Linux 程式設計之Shell程式設計(轉)Linux程式設計
- Delphi設計模式-Abstract Factory (轉)設計模式
- Delphi COM程式設計介紹程式設計
- Delphi程式設計:完全控制桌面的實現 (轉)程式設計
- Delphi實用程式設計經驗二則 (轉)程式設計
- Delphi托盤程式設計實戰演練 (轉)程式設計
- 玩轉 PHP 網路程式設計之原理篇PHP程式設計
- 談Delphi程式設計中資原始檔的應用 (轉)程式設計
- 用Delphi進行OpenGL程式設計學習心得 (轉)程式設計
- DELPHI下的多執行緒程式設計(1) (轉)執行緒程式設計
- DELPHI下的多執行緒程式設計(2) (轉)執行緒程式設計
- 中文程式設計之思考 (轉)程式設計
- 設計模式、用Delphi描述-->Lock pattern (轉)設計模式
- WDM驅動程式設計之編譯安裝篇 (轉)程式設計編譯
- 玩轉 PHP 網路程式設計全套之 socket stream 程式設計PHP程式設計
- 程式設計技術點滴一(Delphi)程式設計
- Delphi趣味程式設計例項三則程式設計
- 設計模式討論之abstract factory篇 (轉)設計模式
- Linux程式設計之四(轉)Linux程式設計
- 設計模式、用Delphi描述-->Reference Count pattern (轉)設計模式
- 設計模式、用Delphi描述-->Visitor模式 (轉)設計模式
- 設計模式、用Delphi描述-->Factory Method模式 (轉)設計模式
- 設計模式、用Delphi描述-->Abstract Factory模式 (轉)設計模式
- 設計模式、用Delphi實現---->Builder模式 (轉)設計模式UI
- 設計模式之概述篇設計模式
- 在Delphi程式設計中獲取作業系統資訊 (轉)程式設計作業系統
- 程式設計師健身之馬拉松篇程式設計師
- 從Delphi到Lazarus——我的程式設計之路程式設計
- 玩轉設計模式——設計模式之禪設計模式
- 程式設計師快速睡眠攻略 失眠程式設計師的福音程式設計師
- Winsock程式設計初步之<一> Winsock程式設計原理 (轉)程式設計
- 玩轉 PHP 網路程式設計全套之 libevent 框架首篇PHP程式設計框架
- 普通人轉行程式設計師之自學java入門篇行程程式設計師Java