程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi的程序制作要點

Delphi的程序制作要點

編輯:Delphi

一、為什麼選擇Delphi

在開始任何一個項目之前,總會碰到選擇開發工具的問題。各式各樣的工具有其各自的特點,各有利弊。選擇Delphi,各人有各人的理由,有的人是聽說好,跑來看看;有的人是被迫的。什麼時候人們會被迫使用Delphi呢? 對於我來說,

1)我不想在一個小Project中使用ODBC,我發現BDE效率很不錯,於是很高興。

2)我很討厭OCX, VBX,一大堆別人的東西拷入用戶的機器,讓我很沒有成就感。

3)我很少有機會作CView/CDocument形式的程序,而MFC對其它的支持差得驚人。

4)我很喜歡Pascal,我敲begin....end不見得比敲{ ...}慢多少。

5)C和C++網上資源太少,只能偶爾找到一些snippet

二、一些基本概念

A.面向對象的概念簡單地說,Pascal原有的record類型,加上procedure和function就成了class 因此,一個class類的東東本質上是一個變量,Implementation裡定義了這個變量的Details, Interface是變量的定義,告訴編譯器在別人引用我時到哪裡找具體的代碼。一個Form引用另一個Form中的變量,實際上是兩個Form型變量的元素的引用。B. Delphi的Class三大元素這三大元素是Property, Method, Event 這是你要使用一個控件最重要的信息。Property可讀可寫,Method引發一個procedure或function, Event允許用戶定義回調函數。Property在Design Time時在Object Inspector中設,Method在程序中調用了解了這個概念,有助於你在看Help時不會暈頭轉向。C.關於Property的說明切記,Property的修改並不一定只是讀寫了一個變量,它有可能引發一大堆代碼。在Property的定義中,一般是這樣寫的property Lookup: Boolean read GetLookup write SetLookup; 在這裡,GetLookup和SetLookup是function,因此,有可能屬性一改,事實上作了很多工作。D.代碼的位置有時很重要在什麼時候調用特定的代碼是很重要的,Window整個都是由消息驅動的,永遠不會被觸發的代碼根本不被編譯到程序中去。你在Delphi 3中會看到它根本不被打上藍點。而且代碼是可以重入的!!!!以後會詳細討論這個問題。

三、從一個通訊錄程序開始

不使用Delphi的數據庫功能,對於初學者來說,實在有點可惜,Borland花了大量精力使數據庫編程變得簡單。數據庫編程最好的教程是Delphi 1.x中帶的Interactive Tutor(Delphi 3中好象沒有),它講述得非常生動,每一位初學者都應該看一看。

看過這個教? 可以自己試著作一個通訊錄程序。這樣一個程序大家都有感性的認識,容易上手。

第一步,用Database Desktop建一個數據庫,開一些Name, Tel, Addr, Memo 等字段,記住,千萬不要用中文作字段名哦。

第二步,用Database/Form Wizard作一個坯子看看再說。你會生成一個Form, 上面有一個DBNavigator,一堆Data-aware的控件和相應的Label(這個例子中,不建議用DBGrid) 第三步,右鍵單擊Table1控件,打開Field Editor,選擇Name字段,在Object Inspector中將它Display Name屬性改為姓名, Transliterate屬性改為False. 這是為了使StringField顯示中文。依此類推,把你要改的字段都改過來。Label 的Caption也都改成中文。

第四步,把DBNavigator的VisibleButton中的除$#@60;-, -$#@62;, $#@60;$#@60;, $#@62;$#@62;, +, -,之外的Button都去掉。

第五步,再運行這樣你就作成了你的第一個中文通訊錄。這個通訊錄沒有什麼查找功能,顯然很沒市場,下面你給它加一個簡單的查詢功能。

第一步,加一個Button,Caption設為查找姓名 第二步,New一個Form,如Form2,上面加一個Edit,兩個BitBtn,一個Kind設為bkOK,另一個Kind設為bkCancel,按你的需要修改顯示的文字。

第三步,雙擊第一步中的Button,跳出代碼段。寫下以下代碼:

if Form2.ShowModal = mrOK then begin
Table1.DisableControls;
Table1.First;
while not Table1.EOF and
(Pos(Form2.Edit1.Text, Table1Name.Value)$#@62;0) do begin
Table1.Next;
end;
Table1.EnableControls;
end;
第四步,在Unit1中的Uses中加入unit2;運行

四、寫代碼的一些要素

A.盡可能不要在(對新手來說,是絕不要) TMyForm=class(TForm)

.....

.....

..... end; 之外定義變量,盡量在Private段定義自己的變量和Procedure等。

B.任何情況下,不論多麼艱難的調試情況,在begin回車之後,先打兩個空格再寫程序代碼。end一定要和相應的begin呼應在同一列上。

C. Delphi是大小寫不敏感的,但是多處引用時盡量保持相同的拼寫。

D.不要自己去刪Delphi自動生成的代碼,解鈴還需系鈴人,如果不小心在哪裡Double Click了一下,Delphi生成的程序會在Save Project和Build時自動刪掉。(只要begin...end中間沒寫你自己的代碼) E. FormCreat之前,它所包含的控件都還沒有建立,是不能引用的。在Form1OnCreat 時,你不能用Form1.ListBox1....... 但是你可以寫:

ListBox1......... 這是Delphi的約定,所以不要問我為什麼。

F. Form1如果是MainForm,在OnCreat時是不能去引用Form2的變量的,因為這時Form2還不存在。

G. Form2.ShowModal後,程序會在Form2返回後才執行後面的代碼,而用Show 可不是這樣。

H.任何一段消息回調函數的代碼都不要執行過長時間,如果迫不得已,在大循環的間隙,一定要調用Application.ProcessMessages 要不,程序會象死機一樣。

五、Windows編程的重入問題

TTimer是用於定時反復執行一些代碼,可是千萬記住如果一段代碼執行時間過長時,下一次Timer觸發會重入這段代碼,就是說如果Timer1Timer中沒有Timer1.Enabled := False; 的話,可能會有兩個進程在執行這段代碼,如果共同訪問一個變量,一個有可能在改,一個有可能在讀,那麼就會出現意想不到的問題。

類似的重入問題其它時候也會碰到,比如你在Show(而不是ShowModal)一個Form時,兩個Visible的Form在共同訪問同一變量,就會出現一些奇怪的現象。

新手最好先避開這類問題,省得麻煩。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved