1.點擊Project->ViewSource可以看到工程的代碼
programProject1;
uses
Forms,
Unit1in‘Unit1.pas’{Form1};
{$R*.res}
begin
Application.Initialize;
Application.CreateForm(TForm1,Form1);
Application.Run;
end.
其中的application就是最基本的對象
它代表一個工程,可以全局的操作整個程序,application是定義在forms單元里的,你在用之前先引用forms.
雖然delphi是面向對象的,但是application是面向過程的,這是因為在程序剛建立的時候,是按順序從上到下執行,此時還沒有創建任何的對象,application是一個全局的過程變量.
它的重要方法有以下幾個:
Initialize:對全局程序進行初始化.就比如說你有2個窗體,form1和form2,里面分別有1個全局變量,一般在人們的理解上,這些全局變量在form創建時才擁有實例,但是實際上在application.initializel的時候就有了
第二個重要的方法是run:
它表明程序可以啟動,注意不是“啟動”,而是“可以啟動”.這個地方是delphi命名不規范的地方.
如果按規范寫,應當是Application.CanRun:=True;但是delphi是簡寫成了run.
接下來重要的方法是CreateForm:創建窗體.這個方法在使用dll內的窗體時更重要,因為只有它才能主動的修復dll入口,不然的話程序容易內存泄漏.
還有一個是ProcessMessages:這個方法可以讓程序進入一個單獨的線程,從而使占用的cpu減少,并且可以跟據需要建立其他的線程.對于一些像瀏覽器之類的程序,需要同時打開多個頁面,或是其他的事情同時進行,這時就需要用ProcessMessages,不然程序將變得非常消息慢(換言之,消息就是線程的組成部分)
在使用數據模塊時,如果連接的數據庫是access,則必須加入forms,activex單元,不然access接口會報錯,不然access接口會報錯,oracle也沒有.在數據模塊上一般放四種東西(…,加密算法控件,這個控件在webservice面板上(SOPDOM),用于將xml文件進行dom加密).
第二個要講的是unit:如果你的程序中有許多全局的函數,那么應當將它們放入一個新的unit中,并使用///進行注釋.對于button.click等控件的事件可以不寫注釋,但是自定義的函數必須照///注釋書寫。你在函數名的上方輸入///f,它就會自動生成這個注釋框架,你只要把內容填進去就行了。
第三個要講的是threadobject,幾乎所有的程序都不可能只有一個線程。對于一些需要在后臺進行,并且不能打斷前臺工作的程序,必須進入線程。
unitUnit2;
interface
uses
Classes;
type
abc=class(TThread)
private
protected
procedureExecute;override;
end;
implementation
procedureabc.Execute;
begin
end;
end.
必須要注意,Execute方法是抽象的,必須覆蓋。但是如果你想給它加上參數,比如說Execute(i:Integer),就不能使用override,而是必須寫在public下:procedureExecute(i:integer);reintroduce;方法后綴使用重發布。
在一個程序里,可以擁有多個線程,但是在線程沖突的情況下,必須使用synchronize方法來防止沖突,這個方法是定義在classes單元內的公共方法,你在任何情況下都能使用它。
(技巧:有些時候你可能會在窗體上放滿控件,這樣就選不中窗體了,這個時候可以點任何一個控件,然后不斷的按ESC,這樣它就會按父類的順序一級一級向上跳轉,最后會跳到窗體上。)
第四個要講的是dll
這個技術基本上所有程序都會用到,因為你永遠都不可能把所有的功能都寫在一個exe里,如果功能太多,寫在一起就無法維護,所以必須分開寫。
結構:
libraryProject2;
uses
SysUtils,
Classes;
{$R*.res}
begin
end.
這個只是系統生成的,一般來說,還必須加入windows,messages,forms單元。如果你開發的dll給其他語言調用,還必須加上sharemem單元。編寫dll的方法和編寫exe的方法完全一樣。
控件類:
第一個重要的是actionlist。一般的編程語言,它的控件只有三個關鍵,屬性,方法和事件,但是delphi還有一個動作,這就意味著它能更方便的處理復雜的事情?;旧纤械目丶加袆幼?,它們被列在actionlist里面,根據你的需要可以調用它們。
第二個講的是HTTPRIO,這個東西是用來操作webService的。webService是當前世界上最先進和有效的網絡服務方式。delphi通過httprio控件,可以調用一切存在的webService。
第三個講的是TCPServer和UDPServer。TCP用于點對點的傳輸,可以傳文件,但是速度慢;UDP用于點對面的傳輸,不能傳文件,但是速度快。一般的網絡通信程序中,將這2種協議放在一起用。單純的發送信息用UDP,發送文件用TCP。它們的發送和接收方法都一樣:通過SendBuffer進行發送,Adata.ReadBuffer進行接收。
再下一個,AntiFreeze。這個控件在開發網絡應用時是必需的,在很多情況下,比如說QQ,可能會有多個用戶同時向你發消息的情況,但是這些消息如果同時到達,就會引起阻塞。用antiFreeze控件可以將同時到達的消息放入一個線程,再按順序讀取,這樣就避免了因消息的同時到達而引起的程序故障。
下面我給你講解一整個單元
unitUnit1;
interface
implementation
end.
這是一個最簡單的單元,它擁有單元名,接口部分,實現部分,最后用end.來結束。
接口部分用于進行定義,比如說類的定義,常量,變量定義,單元的引用,都能放在接口部分。
實現部分用于實現接口部分的類,也可以聲明常量,變量或是引用單元,接口處引用和實現處引用的區別,就是接口引用沒有類實例,而實現引用有類實例,并且接口處聲明的常量,變量可被其他單元使用。對于一個單元,有時候需要initialization和finalization標識符,它們用于在單元載入前進行一定的操作,最常用的是
initialization
ActiveX.CoInitialize(nil);
finalization
ActiveX.CoUninitialize;
finalization在單元被釋放后執行,一般進行的操作是將單元內的殘留對象清空。比如說單元內定義了form1,并且沒有手動的進行free,則可以在finalization中寫FreeAndNil(form1);
ActiveX.CoUninitialize;
但是對變量的賦值不允許放在initialization部分,因為initialization是在單元載入前執行的,那個時候單元內的變量還未被創建。finalization在單元被釋放后執行,一般進行的操作是將單元內的殘留對象清空,比如說單元內定義了form1,并且沒有手動的進行free。
則可以在finalization中寫FreeAndNil(form1);在end.后面的代碼,編譯時被忽略。
也就是說end.后面寫的代碼,編譯器不會檢查,但是要注意一點,那些代碼也會被編譯到程序內。有很多人喜歡在end.后面加一些亂寫的東西,這樣編譯后的程序在反編譯器面前就顯得非?;靵y,使別人不容易激活成功教程,這是一種保護自己程序的手段。
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
巢湖四中咋樣?巢湖四中的校園氛圍很好。最重要的是,四中這幾年一直在進步,升學率明顯提高。嗯,老師們...那個 具體來說??偟膩碚f,老師是通情達理的。;我遇不到那種無情的老師。巢湖市有哪幾所重點高中?巢湖市分為四縣一區。我不 對四個縣不太了解,除了這個縣最好的高中:——廬江中學,廬江縣,含山中學,——,含山縣,——無為一中,無為縣,——和縣一中。對于居巢區,我比較了解:巢湖一中是無可爭議的最好,也是...
不銹鐵鍋和生鐵鍋區別?:首先,有生鐵和熟鐵,根據碳含量來區分。生鐵的含碳量為2%-7%,相對較高,并含有少量的錳、硫等元素。熟鐵一般是生鐵經過精煉后制成的,碳含量有所下降。生鐵鍋又稱鑄鐵鍋,由灰鐵直接熔化澆注而成。一般這種壺底厚,重量大。熟鐵鍋又稱精鐵鍋,由熟鐵鍛造而成。這種壺比較薄,但是柔韌性和延展性都很好。生熟鐵鍋各有利弊,要根據需要選擇。不銹鐵鍋和生鐵鍋區別?不銹鐵鍋和生鐵鍋都是鐵鍋,但不銹...
什么是企業EAP?EAP(員工援助計劃)是一個員工心理援助計劃。其內容不同于心理咨詢。心理咨詢的對象是正常人,但這種“正?!敝饕c精神病的“不正?!毕鄬?。對于人們的心理健康來說,其實它不是一個二元變量,而是一個連續譜變量(從不健康到非常健康的連續譜),而這個連續譜是隨著時間而變化的。任何兩個普通人,他們的心理健康水平都是不同的,有的各方面都很健康,有的情緒方面很健康,但人際關系方面卻不是很健康。我...