Borland出品的Delphi,有著閃電般的編譯速度,但是在界面控制項使用較多、工程項目較大的時候,編譯一個工程仍需要一段時間,打開龐大的Delphi IDE,也需要時間。其實,在一個工程開發結束,調試完成之後的Release編譯,完全可以用命令行來執行,因為Delphi的編譯器參數不像C++編譯器那樣復雜。
筆者把Delphi聯機手冊中關於命令行編譯(command-line compiler)的幾篇主題作了翻譯,希望對Delphi開發人員有幫助。
目錄
1. Command-line compiler
命令行編譯器
2. Command-line compiler options
命令行編譯器選項
3. Compiler directive options
編譯器指令選項
4. Compiler mode options
編譯模式選項
5. DCC32.CFG file
編譯器配置文件DCC32.CFG
6. Debug options
調試選項
7. Directory options
目錄選項
8. IDE command-line options
IDE命令行選項
9. Generated files
幾個IDE自動生成的文件介紹
Command-line compiler
命令行編譯器
Delphi's command-line compiler (dcc32.EXE) lets you invoke all the functions of the IDE compiler (DELPHI32.EXE) from the DOS command line (see IDE command-line options. Run the command-line compiler from the DOS prompt using the syntax:
Delphi』s命令行編譯器(dcc32.exe)允許你從DOS命令行方式(參照:IDE命令行選項)實現IDE編譯器(delphi32.exe)的所有功能。用DOS命令運行命令行編譯器語法如下:
dcc32 [options] filename [options]
dcc32 [選項] [文件名] [選項]
where options are zero or more parameters that provide information to the compiler and filename is the name of the source file to compile. If you type dcc32 alone, it displays a help screen of command-line options and syntax.
零或多個參數給編譯器提供信息,文件名指定需要編譯的源文件名。如果你單獨輸入dcc32,它會顯示一個關於命令行編譯的選項和語法的屏幕。
If filename does not have an extension, the command-line compiler assumes .dpr, then .pas, if no .dpr is found. If the file you're compiling to doesn't have an extension, you must append a period (.) to the end of the filename.
如果文件名沒有擴展名,命令行編譯器會查找擴展名為.dpr的同名文件,如果找不到,則查找擴展名為.pas的同名文件。如果你的源文件確實沒有擴展名,你需要在文件名的末尾添加(.)。
If the source text contained in filename is a program, the compiler creates an executable file named filename.EXE. If filename contains a library, the compiler creates a file named filename.DLL. If filename contains a package, the compiler creates a file named filename.BPL. If filename contains a unit, the compiler creates a unit file named filename.dcu.
如果指定的源文件是一個工程文件,編譯器會創建一個擴展名為.EXE的同名可執行文件。如果指定的源文件是一個庫文件,編譯器創建一個擴展名為.DLL的同名動態鏈接庫文件。如果指定的源文件是一個包文件,編譯器會創建一個擴展名為.BPL的同名包。如果指定的源文件是一個單元文件,編譯器會創建一個擴展名為.dcu的目標代碼文件。
You can specify a number of options for the command-line compiler. An option consists of a slash (/) or immediately followed by an option letter. In some cases, the option letter is followed by additional information, such as a number, a symbol, or a directory name. Options can be given in any order and can come before or after the file name.
你可以為命令行編譯器指定多個參數。一個參數包含一個破折號「-」(或「/」)和緊跟著的一個選項字元構成。通常情況下,選項字元後面會跟一些附加的信息,如一個數字、一個符號、一個目錄等。選項可以是任意順序並且可以在源文件名前面或後面。
Command-line compiler options
命令行編譯選項
The IDE lets you set various options through the menus; the command-line compiler gives you access to these options using the slash (/) delimiter. You can also precede options with a hyphen (-) instead of a slash (/), but those options that start with a hyphen must be separated by blanks. For example, the following two command lines are equivalent and legal:
IDE允許你使用菜單來設置各種編譯選項,而命令行編譯器允許你使用字元「/」作為分隔符來設定這些編譯選項。你也可以使用連字元「-」來代替「/」,但是用「-」引出的參數之間必須用空格隔開。例如,下面兩個命令都是等同的也是合法的:
DCC -IC:/DELPHI -DDEBUG SORTNAME -$R- -$U+
DCC /IC:/DELPHI/DDEBUG SORTNAME /$R-/$U+
The first command line uses hyphens with at least one blank separating options. The second uses slashes and no separation is needed.
第一個編譯命令用「-」引出參數,且參數之間有多個空格分隔。第二個編譯命令用「/」引出參數,參數之間不必要分隔。
The following table lists the command-line options. In addition to the listed options, all single-letter compiler directives can be specified on the command line, as described in Compiler directive options.
下列表中列出所有的命令行參數。在附加的選項列表中,所有的單字元編譯器指令都可以在命令行編譯中使用,詳情請參照:編譯器指令。
Option Description
選項 描述
Aunit=alias 設置單元別名
B 編譯所有單元
CC 編譯控制台程序
CG 編譯圖形界面程序
Ddefines 編譯條件符號定義
Epath 可執行文件輸出路徑
Foffset 查找運行期間錯誤
GD 生成完整.Map文件
GP 生成.Map文件Public段
GS 生成.Map文件Segment段
H 輸出提示信息
Ipaths 文件包含路徑
J 生成.Obj目標文件
JP 生成C++類型.Obj目標文件
Kaddress Set image base address
LEpath 包.BPL文件輸出路徑
LNpath .dcp文件輸出路徑
LUpackage 使用運行期間包列表
M 編譯有改動的源文件
Npath dcu/dpu文件輸出目錄
Opaths .Obj文件(匯編目標代碼文件)路徑
P 按8.3格式文件名查找
Q 安靜模式
Rpaths 資源文件(.RES)路徑
TXext 目標文件擴展名
Upaths 單元文件路徑
V 為Turbo Debugger生成調試信息文件
VN 以.Giant格式生成包含命名空間的調試信息文件(將用於C++Builder)
VR 生成調試信息文件.rsm
W 輸出警告信息
Z Disable implicit compilation
$directive Compiler directives
--Help 顯示編譯選項的幫助。同樣的,如果你在命令行單獨輸入dcc32,也會顯示編譯選項的幫助。
--version 顯示產品名稱和版本
Compiler directive options
編譯器指令選項
Delphi supports the compiler directives described in Compiler directives. The $ and D command-line options allow you to change the default states of most compiler directives. Using $ and D on the command line is equivalent to inserting the corresponding compiler directive at the beginning of each source file compiled.
Delphi支持用編譯器指令關鍵字描述的編譯器指令。使用「$」和「D」命令行選項可以改變所有的默認編譯器狀態。用「$」和「D」命令行選項等同於在源文件的前面添加編譯器指令。
Switch directive option
編譯器指令選項開關
The $ option lets you change the default state of all of the switch directives. The syntax of a switch directive option is $ followed by the directive letter, followed by a plus (+) or a minus (-). For example:
「$」允許你改變每一種編譯器指令默認狀態。編譯器指令的語法是「$」後緊跟一個指令字元,再跟一個「-」或「+」。例如:
dcc32 MYSTUFF -$R-
compiles MYSTUFF.pas with range-checking turned off, while:
不使用邊界檢查編譯MYSTUFF.pas單元:
dcc32 MYSTUFF -$R+
compiles it with range checking turned on. Note that if a {$R+} or {$R-} compiler directive appears in the source text, it overrides the -$R command-line option.
使用界面檢查編譯MYSTUFF.pas單元。如果將編譯器指令{$R+}或{$R-}添加到源文件的開始,它將覆蓋從命令行傳入的參數。
You can repeat the -$ option in order to specify multiple compiler directives:
你可以用多個「$」來指定多個編譯器指令,如:
dcc32 MYSTUFF -$R--$I--$V--$U+
Alternately, the command-line compiler lets you write a list of directives (except for $M), separated by commas:
命令行編譯器允許作用逗號分隔的編譯器指定列表,如:
dcc32 MYSTUFF -$R-,I-,V-,U+
只需要用一個「$」符號。
Only one dollar sign ($) is needed.
注意,因為$M的格式不一樣,你不能在逗號分隔的指令列表中使用$M
Note that, because of its format, you cannot use the $M directive in a list of directives separated by commas.
Conditional defines option
條件編譯選項
The -D option lets you define conditional symbols, corresponding to the {$DEFINE symbol} compiler directive. The -D option must be followed by one or more conditional symbols separated by semicolons (;). For example, the following command line:
「-D」選項允許你定義一個編譯條件,符合你用{$DEFINE symbol}定義的編譯器指令。「-D」選項後必須跟隨一或多個用分號分隔的編譯條件符號,如下命令:
dcc32 MYSTUFF -DIOCHECK;DEBUG;LIST
defines three conditional symbols, iocheck, debug, and list, for the compilation of MYSTUFF.pas. This is equivalent to inserting:
定義了三個編譯條件符號:IOCHECK,DEBUG,LIST,用於MYSTUFF.pas單元中。這等同於在源文件中插入以下語句:
{$DEFINE IOCHECK}
{$DEFINE DEBUG}
{$DEFINE LIST}
如果你指定了多個「-D」選項,你可以聯接它們,如下:
dcc32 MYSTUFF -DIOCHECK-DDEBUG-DLIST
等同於第一個例子。
編譯模式選項
有幾個選項能影響編譯器自身的功能。像其它選項一個,你可以使用「/」或「-」的格式。別忘了用至少一個空格分隔這些選項。
選項(-M)
命令行編譯器使用構造邏輯的方式來維護工程。「-M」選項指示編譯器檢查所有與編譯文件相關聯的文件。用這個參數會導致編譯時間增大。
一個源文件在下列情況下會重新編譯:
The source file for that unit has been modified since the unit file was created.
源文件被創建以來被修改過;
用「$I」指令包含的任何文件,用「$L」包含的任何.Obj文件,或用「$R」關聯的任何資源文件.Res,比源文件中的要新;
單元介面部分interface的uses段有改動。
在單元編譯時指令「-Z」在構造邏輯期不被接受。
If you were applying this option to the previous example, the command would be:
如果你在上一個例子中使用這個指令,編譯命令就應該是:
dcc32 MYSTUFF -M
編譯所有 選項(-B)
用於取代要知道哪些單元需要更新-M的選項,你可以使用-B選項來更新所有你的程序中關聯的單元。你不能在程序中同時使用-M和-B。選項-B比-M速度更慢,而且它並不是必需的。
如果你在前一個例子中使用這個參數,編譯命令就應該是:
dcc32 MYSTUFF -B
查找錯誤 選項(-F)
當一個程序由於運行期間錯誤而終止時,它會顯示一個錯誤號和錯誤地址在錯誤發生時。用-Faddress選項來指定錯誤地址,你在源文件中能找到引發錯誤的位置,如果你的程序和單元編譯時附加了調試信息(使用$D編譯器指令)。
為了命令行編譯器能用-F選項查找運行期間錯誤,你必須傳遞與第一次編譯時相同的指令列表。
先前提到過,你的程序和單元必須啟用調試信息,命令行編譯器才能查找運行期間錯誤。默認情況下,所有的程序和單都是啟用調試信息的,除非你用{-D}或-$D-指令關閉它,這樣,命令行編譯器就不能查找運行期間錯誤了。
使用包(-LU)選項
使用-LU選項來在編譯時添加你應用程序中要用到的運行期間包。運行期間包已經在「工程選項」對話框中列舉的,不必再在命令行中添加。
Disable implicit compilation (-Z) option
(此選項在delphi6.0/7.0中有不同描述,在此不作翻譯)
目標文件擴展名(-TX)選項
選項-TX允許你改寫默認的輸出文件擴展名。例如:
dcc32 MYSTUFF -TXSYS
生成的將是一個叫做MYSTUFF.SYS的文件。
Quiet (-Q) option
安靜模式(-Q)選項
安靜模式選項禁止在編譯時顯示文件名及代碼行數,如果命令行編譯器調用這個選項的話。
它的輸出僅限於起始時行版權信息以及結尾的統計信息。當然,如果發生錯誤,它也會輸出。
DCC32.CFG file
DCC32.CFG配置文件
你可以設置一個編譯選項列表到一個叫做DCC32.CFG的配置文件中,它將用於編譯時附加到命令行參數後。配置文件的每一行都相當於一個額外的命令行參數插入到實際的命令行參數前(注意,是實際參數前)。因而,你可以使用這個配置文件改變一些命令行參數的默認設置。
命令行編譯器允許你輸入相同的命令行參數,它將忽略所有除最後一個之外。這個的話,盡管通過配置文件你可以改變一些設置,你仍然可以覆蓋它使用命令行參數。
當dcc32啟動時,它查找DCC32.CFG文件在當前目錄。如果文件沒有找到,dcc32會查找它所在的目錄。
以下是一個DCC32.CFG配置文件的例子,定義了關於文件包含、OBJ文件包含、單元文件搜索路徑信息,並改變了編譯器指令$O和$R的默認值。
-IC:/DELPHI/INC;C:/DELPHI/SRC
-OC:/DELPHI/ASM
-UC:/DELPHI/UNITS
-$R+
-$O-
現在,如果你輸入:
dcc32 MYSTUFF
編譯器把它當作你輸入如下命令:
dcc32 -IC:/DELPHI/INC;C:/DELPHI/SRC -OC:/DELPHI/ASM -UC:/DELPHI/UNITS -$R+ -$O- MYSTUFF
調試選項
編譯器有兩個命令行參數可以生成外部調試信息:MAP文件選項和調試信息選項。
Map file (-G) options
Map文件(-G)選項
選項-G指示命令行編譯器生成一個.map文件來查看一個可執行文件的布局。不同於可二進制的可執行文件和.dcu文件,.map文件是一個可讀的文本文件,可以被列印或是其它文本編輯器編輯。選項-G後必須跟字元S、P或D,去決定你想要在.map文件列出的信息。一個.MAP文件被分成三個節:
Segment
Publics
Line Numbers
-GS選項只輸出Segment Section,-GS選項輸出Segment和Publics,-GD輸出所有的三個Sections.-GD選項也生成一個擴展名為.DRC的文件包含所有的用resourcestring關鍵字聲明的字元串常量。
用默認的編譯選項{$D+,L+}編譯模塊(程序或單元),Publics Section列舉所有的全局變數、過程和函數,Line Numbers Section列舉模塊中所有的過程和函數的行號。如果用{$D+,L-}編譯選項編譯模塊,Publics Section中僅列舉在單元的interface部分定義的符號。如果用{$D-}選項編譯模塊,在Line Numbers Section沒有任何入口。
調度選項(-V)
選項-V、-VN、-VR會指示編譯器生成調試信息,它們能在命令行中組合使用。
生成Turbo Debugger使用的調試信息的選項(-V)
當你在命令行中使用-V選項時,編譯器會在可執行文件的末尾附加與Turbo Debugger5.0一致的外部調試信息。Turbo Debugger包含代碼和硬體級別的強大的斷點。
雖然附加調試信息到查執行文件中會使可執行文件增大,但是它並不影響實際可執行文件中的可執行代碼,也不需要額外的內存來啟動程序。
② DELPHI編程指的是什麼
由Borland公司推出的Delphi是全新的可視化編程環境,為我們提供了一種方便、快捷的Windows應用程序開發工具。它使用了Microsoft
Windows圖形用戶界面的許多先進特性和設計思想,採用了彈性可重復利用的完整的面向對象程序語言(Object-Oriented
Language)、當今世界上最快的編輯器、最為領先的資料庫技術。對於廣大的程序開發人員來講,使用Delphi開發應用軟體,無疑會大大地提高編程效率,而且隨著應用的深入,您將會發現編程不再是枯燥無味的工作——Delphi的每一個設計細節,都將帶給您一份欣喜。
Delphi是Borland公司研製的新一代可視化開發工具,可在Windows3.x、Windows95、WindowsNT等環境下使用。當前,DELPHI
也可以為LINUX平台上開發應用,其在LINUX上的對應產品Kylix。
DELPHI
擁有一個可視化的集成開發環境(IDE),採用面向對象的編程語言ObjectPascal和基於部件的開發結構框架。Delphi它提供了500多個可供使用的構件,利用這些部件,開發人員可以快速地構造出應用系統。開發人員也可以根據自己的需要修改部件或用Delphi本身編寫自己的部件。主要特點如下:
(1)直接編譯生成可執行代碼,編譯速度快。由於Delphi編譯器採用了條件編譯和選擇鏈接技術,使用它生成的執行文件更加精煉,運行速度更快。在處理速度和存取伺服器方面,Delphi的性能遠遠高於其他同類產品。
(2)支持將存取規則分別交給客戶機或伺服器處理的兩種方案,而且允許開發人員建立一個簡單的部件或部件集合,封裝起所有的規則,並獨立於伺服器和客戶機,所有的數據轉移通過這些部件來完成。這樣,大大減少了對伺服器的請求和網路上的數據傳輸量,提高了應用處理的速度。
(3)提供了許多快速方便的開發方法,使開發人員能用盡可能少的重復性工作完成各種不同的應用。利用項目模板和專家生成器可以很快建立項目的構架,然後根據用戶的實際需要逐步完善。
(4)具有可重用性和可擴展性。開發人員不必再對諸如標簽、按鈕及對話框等Windows的常見部件進行編程。Delphi包含許多可以重復使用的部件,允許用戶控制Windows的開發效果。
(5)具有強大的數據存取功能。它的數據處理工具BDE(BorlandDatabaseEngine)是一個標準的中介軟體層,可以用來處理當前流行的數據格式,如xBase、Paradox等,也可以通過BDE的SQLLink直接與Sybase、SQLServer、Informix、Oracle等大型資料庫連接。
Delphi既可用於開發系統軟體,也適合於應用軟體的開發。
(6)擁有強大的網路開發能力,能夠快速的開發B/S應用,它內置的IntraWeb和ExpressWeb使得對於網路的開發效率超過了其他任何的開發工具。
(7)Delphi使用獨特的VCL類庫,使得編寫出的程序顯得條理清晰,VCL是現在最優秀的類庫,它使得Delphi在軟體開發行業處於一個絕對領先的地位。用戶可以按自己的需要,任意的構建、擴充、甚至是刪減VCL,以滿足不同的需要。
(8)從Delphi8開始Delphi也支持.Net框架下程序開發。
當前DELPHI
已經成為一個品牌,而不僅僅是一個開發平台或開發語言的名稱。
當前DELPHI產品已經由CodeGear公司繼續發展,該公司是BORLAND公司的全資子公司。
③ 如何改變Delphi編譯器的背景顏色
Delphi 7:Tool → Editor Options → Color
更高版本:Tool → Options → Editor Options → Color
④ DELPHI編譯器
菜單上面的,從左邊數第六個菜單中的第一個run,點它就編譯了,形成EXE文件
⑤ DELPHI編譯器
borland編譯器不錯的,大公司的產品都是那樣,就好比微軟的VS一樣,盡管你不喜歡,但是不得不用。
當然,DELPHI7肯定是沒辦法和VS比的,功能差距太遠了。
⑥ Delphi編譯器採用的是什麼編程語言
Pascal語言 & Delphi
優點
(1)Pascal語言結構嚴謹,可以很好地培養一個人的編程思想。
(2)Delphi是一門真正的面向對象的開發工具,並且是完全的可視化。
(3)Delphi使用了真編譯,可以讓你的代碼編譯成為可執行的文件,而且編譯速度非常快。
(4)Delphi具有強大的資料庫開發能力,可以讓你輕松地開發資料庫。
缺點
Delphi幾乎可以說是完美的,只是Pascal語言的過於嚴謹讓人感覺有點煩。
Pascal語言簡介
Delphi這個名字源於古希臘的城市名。它集中了第三代語言的優點。以Object Pascal為基礎,擴充了面向對象的能力,並且完美地結合了可視化的開發手段。Delphi自1995年3 月一推出就受到了人們的關注,並在當年一舉奪得了多項大獎。
Delphi的出現打破了V承可視化編程領域一統天下的局面。並且Delphi使用了本地編譯器直接生成技術,使程序的執行性能遠遠高於其它產品生成的程序。它還是真正的面向對象的編程語言。PASCAL語言的嚴謹加上可視化的優勢和強大的資料庫功能使得它有充分的資本和微軟的VB叫板。許多人當時都認為Pascal 是最有前途的程序設計語言,並預測Delphi將會成為可視化編程的主流環境。
Delphi在你編好程序後自動轉換成.EXE文件它運行時速度比VB快,而且編譯後不需要其他的支持庫就能運行。它的資料庫功能也挺強的,是開發中型資料庫軟體理想的編程工具。 Delphi適用於應用軟體、資料庫系統、系統軟體等類型的開發。而且它擁有和VB差不多一樣的功能,而且一樣能應用API函數,這在控制Windows很有用。
Delphi是全新的可視化編程環境,為我們提供了一種方便、快捷的Windows應用程序開發工具。它使用了Microsoft Windows圖形用戶界面的許多先進特性和設計思想,採用了彈性可重復利用的完整的面向對象程序語言(Object-Oriented Language)、當今世界上最快的編輯器、最為領先的資料庫技術。對於廣大的程序開發人員來講,使用Delphi開發應用軟體,無疑會大大地提高編程效率,而且隨著應用的深入,您將會發現編程不再是枯燥無味的工作——Delphi的每一個設計細節,都將帶給您一份欣喜。
Delphi的基本形式
Delphi實際上是Pascal語言的一種版本,但它與傳統的Pascal語言有天壤之別。一個Delphi程序首先是應用程序框架,而這一框架正是應用程序的「骨架」。在骨架上即使沒有附著任何東西,仍可以嚴格地按照設計運行。您的工作只是在「骨架」中加入您的程序。預設的應用程序是一個空白的窗體(form),您可以運行它,結果得到一個空白的窗口。這個窗口具有Windows窗口的全部性質:可以被放大縮小、移動、最大最小化等,但您卻沒有編寫一行程序。因此,可以說應用程序框架通過提供所有應用程序共有的東西,為用戶應用程序的開發打下了良好的基礎。
Delphi已經為您做好了一切基礎工作——程序框架就是一個已經完成的可運行應用程序,只是不處理任何事情。您所需要做的,只是在程序中加入完成您所需功能的代碼而已。 在空白窗口的背後,應用程序的框架正在等待用戶的輸入。由於您並未告訴它接收到用戶輸入後作何反應,窗口除了響應Windows的基本操作(移動、縮放等)外,它只是接受用戶的輸入,然後再忽略。Delphi把Windows編程的回調、句柄處理等繁復過程都放在一個不可見的Romulam覆蓋物下面,這樣您可?/td>
⑦ delphi的編程方法
Delphi的編程語言是以Pascal為基礎的。Pascal語言具有可讀性好、編寫容易的特點,這使得它很適合作為基礎的開發語言。同時,使用編譯器創建的應用程序只生成單個可執行文件(.EXE),正是這種結合,使得Pascal成為Delphi這種先進開發環境的編程語言。
本章中,將討論ObjectPascal的主要特點,並講解如何在事件處理過程和其他應用程序中,使用它來編製程序代碼。本章將講解Delphi應用程序中最常用的ObjectPascal語法,而不是Pascal語言的一切細節。如果您完全不熟悉Pascal編程,請參閱一些基礎的Pascal教程。如果您具有編程經驗,並能熟練地使用其他流行程序語言,您將在本章的ObjectPascal中發現一些相同的概念。如果您已經熟悉了BorlandPascal,就可以快速瀏覽或跳過本章。
編寫ObjectPascal程序代碼
在前邊的章節中,通過常式,已經編寫了幾行簡單的代碼。在本章中,將從熟悉Pascal編程的角度,配合實例,講解ObjectPascal編程的基該方法。
在編寫自己的ObjectPascal程序時,要注意程序的可讀性。Pascal語言是英式結構語言,在程序中選擇合適的縮排、大小寫風格,並在需要時將程序代碼分行,會使得程序代碼能夠很容易地被自己和他人讀懂。一般的程序員都有這樣的體驗:如果不給程序加上適當的註解,一段時間後,自己也難以理清程序的流程。給程序及時地加上注釋是良好的編程習慣。Delphi的注釋需要加註在{}之間,編輯器會把它們處理成為空白。Delphi保留了BorlandPascal編輯器的風格,關鍵字採用黑體字,被注釋的部分會變暗,這使得編程風格良好,易讀易寫。 在事件處理過程中,最常用到的工作就是把一個新值賦給一個屬性或變數。在設計用戶界面時,可以使用ObjectInspector(ObjectInspector)來改變其屬性;但有時需要在程序執行時改變屬性的值,而且有些屬性只能在執行時改變,這些屬性在Delphi的在線幫助的「Proprety」主題中被標為執行期屬性。進行這種改變,就必須使用賦值語句。
下文的賦值語句表徵一個OnClick事件。當按鈕按動後,將編輯框部件Edit1的Color屬性置為clRed:
procereTForm1.Button1Click(Sender:TObject);
begin
Edit1.Color:=clRed;
end;
當按動按鈕後賦值語句被執行,編輯框變成紅色。
在語句中,部件的名稱在屬性前,中間用「.」表示屬性的所屬關系。這樣就准確地指定了要將clRed值賦給哪一部件的哪一屬性。賦值號為「:=」,不論給屬性還是給變數賦值,都是將右邊的值賦給左邊的屬性或變數。
當將一個屬性值、變數、常量或文本數據賦給屬性或變數時,所賦值的類型和接受此值的屬性或變數的類型應相同或兼容。一個屬性或變數的類型定義了此屬性或變數的可能值集合,也定義了程序代碼可以執行的運算。在前邊的常式中,編輯框部件的Color屬性和clRed的類型都是TColor。可以在在線幫助中找到一個屬性的類型;另外一種方法是在ObjectInspector中選定該屬性值段,並按下F1鍵,則類型將在屬性說明的結尾處列出,例如Color屬性列出下邊的語句:
PropertyColor:TColor;
有些屬性是只讀(ReadOnly)的,它們只能被讀取,不能被改變。請查閱在線幫助,在Delphi中這些只讀屬性都有註解。
標識符的說明與使用
標識符是Delphi應用程序中一些量的名稱,這些量包括變數(var)、常量(const)、類型(type)、過程(procere)、方法(Method)及其他,ObjectPascal在應用標識符時,必須首先說明它們。ObjectPascal是強類型語言,它的編譯器可以檢查確保賦給變數或屬性的值是正確的類型,以便於您改正錯誤。因為ObjectPascal是編譯語言,所以Delphi的執行速度要比使用解釋語言快得多。在使用標識符前說明它們,可以減少程序錯誤並增加代碼的效率。
變數
變數是程序代碼中代表一個內存地址的標識符,而此地址的內存內容在程序代碼執行時可以被改變。在使用變數前必須對它進行說明,即對它進行命名,並說明它的類型。在所有變數說明以前加上保留字var。變數說明左邊是變數的名稱,右邊則是該變數的類型,中間用(:)隔開。
var
Value,Sum:Integer;
Line:String;
在窗體中加入一個名稱為Edit1的編輯框,再加入一個名稱(屬性Name)為Add的按鈕部件,並建立如下的事件處理過程:
procereTForm1.addClick(Sender:TObject);
var
X,Y:Integer;
begin
X:=100;
Y:=20;
Edit1.Text:=IntToStr(X+Y);
end;
在本例中,當按動ADD按鈕時,編輯框中顯示值120。在ObjectPascal中,必須確保變數或屬性被賦予類型相同或兼容的值。您可以嘗試將賦給X的值改為100.0,或去掉IntToStr函數,在編譯時會出現類型不匹配的錯誤,這也說明了ObjectPascal強類型語言的特點。 case語句適用於被判斷的變數或屬性是整形、字元型、枚舉型或子界型時(LongInt除外)。用case語句進行邏輯跳轉比編寫復雜的if語句容易閱讀,而且程序代碼整形較快。
下面的常式顯示一個使用case語句的窗體:
建立如下的事件處理過程:
procereTForm1.Button1Click(Sender:TObject);
var
Number:Integer;
begin
Number:=StrToInt(Edit1.Text);
caseNumberof
1,3,5,7,9:Label2.Caption:='奇數';
0,2,4,6,8:Label2.Caption:='偶數';
10..100:
begin
Label2.Caption:='在10到100之間';
Form1.Color:=clBlue;
end;
else
Label2.Caption:='大於100或為負數';
end;
end;
執行程序,當Edit1部件接受到一個值,並按動「OK」按鈕觸發程序後,Number便被賦值為用戶輸入的數值。case語句根據Number的值判斷該執行哪一條語句。象if語句一樣。case語句也有可選擇的else部分。case語句以end結尾。 ObjectPascal的循環語句有三種:repeat、while和for語句。
repeat語句
repeat語句會重復執行一行或一段語句直到某一狀態為真。語句以repeat開始,以until結束,其後跟隨被判斷的布爾表達式。參閱以下的常式:
i:=0;
repeat
i:=i+1;
Writeln(i);
until=10;
當此語句被執行時,窗體的下方會出現1到10的數字。布爾表達式i=10(注意,與其他語言不同的是,「=」是關系運算符,而不能進行賦值操作)直到repeat..until程序段的結尾才會被計算,這意味著repeat語句至少會被執行一次。 while語句和repeat語句的不同之處是,它的布爾表達式在循環的開頭進行判斷。while保留字後面必須跟一個布爾表達式。如果該表達式的結果為真,循環被執行,否則會退出循環,執行while語句後面的程序。
下面的常式達到和上面的repeat常式達到同樣的效果:
i:=0;
whilei0then
test2(A);{經前置說明,調用未執行的過程Test2}
writeln(A);
end;
procereTest2(varA:Integer);{經前置說明的Test2的執行部分}
begin
A:=Adiv2;
ifA>0rhen
test1(A);{在Test2中調用已執行的過程Test1}
end;
procereTForm1.Button1Click(Sender:TObject);
begin
Alpha:=15;{給Alpha賦初值}
Test1(Alpha);{第一次調用Test1,遞歸開始}
end;
按鈕的OnClick事件處理過程給Alpha賦初值,並實現先減1再除2的循環遞歸調用,直到Alpha小於0為止。
⑧ 如何編譯外部程序(pascal語言) delphi
用Delphi的編譯器dcc32.exe,可在DOS命令窗口編譯你的Pascal程序,但程序的基本結構必須如下:
program Area; {程序首部}
{$APPTYPE CONSOLE} {編譯指令。使用Turbo Pascal編譯時不需要}
const pi=3.14159; {說明部分——數據描述}
var s,r:real;
begin {執行部分}
readln(r);
s:=pi*sqr(r);
writeln('s=',s);
end.
也可直接從網上下載一個Turbo Pascal,然後在它的集成開發環境中打開、編譯。
想當年,Turbo Pascal的火爆程序,可一點不輸如今的C#,那是Anders Hejlsberg(Delphi之父,也是C#之父)的第一個開山之作,Borland就是靠著這個Turbo Pascal的編譯器,挖到了第一桶金。 呵呵,扯遠了。
⑨ delphi debug __line__
Delphi開發的調試技巧1、設置調試選項Delphi主菜單。【Project】->【Options】,或單擊工程管理器中的【ProjectOptions】按鈕顯示ProjectOptions,Complier
<1>選中DebugInformation:把調試信息嵌入到DCU單元文件,會加大編譯後的DCU文件,但不會影響最後生成的exe的大小和執行速度。同時激活【Search】菜單中的【FindError】命令。
當文件中包含調試信息並得到一個運行時錯誤(run-timeerror),記錄下Delphi提供的16進制地址,在【Search】->【FindError】中輸入,Delphi將重新編譯程序,並停留在產生錯誤的命令行。
<2.Localsymbols:決定調試器能否看到在Implementation中定義的局部變數
<3>Referenceinfoj選項/DefinitionOnly選項是否產生應用程序中對象標識符的引用信息。信息和對象代碼存在dcu文件中,可以使用對象瀏覽器查看。如果DefinitionOnly選項同時選中,編譯器將生成標識符定義位置的信息,能夠激活對象瀏覽器的Refenrence頁。如果不選,Dcu文件更小.
⑩ 關於delphi
方案一:
unit ServerMain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, IniFiles, ExtCtrls, bsSkinData, BusinessSkinForm, Menus,
bsSkinMenus,shellapi, ImgList;
type
Tmain = class(TForm)
bsSkinData: TbsSkinData;
bsBusinessSkinForm1: TbsBusinessSkinForm;
Image1: TImage;
Timer1: TTimer;
Label1: TLabel;
PopupMenu1: TbsSkinPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
Timer2: TTimer;
ImageList1: TImageList;
procere FormCreate(Sender: TObject);
procere FormDestroy(Sender: TObject);
procere N3Click(Sender: TObject);
procere N4Click(Sender: TObject);
procere FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
procere WndProc(var Msg: TMessage); override;
end;
const
TrayMsgStr = 'TrayNotifyIconMsg';
var
main: Tmain;
shi,fen,miao:integer;
nd0,nd1: NotifyIconData;
hs: array[0..1]of LongWord;
WM_TRAYNOTIFY: Cardinal;
IconFlag: integer;
implementation
{$R *.DFM}
procere TMain.WndProc(var Msg: TMessage);
var
pt:TPoint;
begin
with Msg do
begin
if Msg = WM_TRAYNOTIFY then
begin
case lParam of
WM_LBUTTONDOWN:
begin
hs[1]:=LoadIcon(hInstance, 'Icon1');
nd1.cbSize := sizeof(NotifyIconData);
nd1.Wnd := Handle;
nd1.uID := 1;
nd1.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
nd1.uCallbackMessage := WM_TRAYNOTIFY;
nd1.hIcon := hs[1];
StrPLCopy(nd1.szTip, 'Thank You !',63);
Shell_NotifyIcon(NIM_MODIFY,@nd1);
IconFlag :=1;
Main.Show ;
end;
WM_LBUTTONDBLCLK:
begin
ShowMessage('double click');
end;
WM_RBUTTONDOWN:
begin
SetForegroundWindow(Handle);
GetCursorPos(pt);
PopupMenu1.Popup(Pt.X, Pt.Y);
end;
end;
end;
end;
inherited;
end;
procere Tmain.FormCreate(Sender: TObject);
begin
setwindowlong(application.handle,gwl_exstyle,ws_ex_toolwindow);
WM_TRAYNOTIFY := RegisterWindowMessage(TrayMsgStr);
hs[0]:=LoadIcon(hInstance, 'MainIcon');
nd0.cbSize := sizeof(NotifyIconData);
nd0.Wnd := Handle;
nd0.uID := 0;
nd0.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
nd0.uCallbackMessage := WM_TRAYNOTIFY;
nd0.hIcon := hs[0];
StrPLCopy(nd0.szTip, '速普得應用伺服器,正在運行...',63);
Shell_NotifyIcon(NIM_ADD,@nd0);
IconFlag :=0;
with Timer2 do
begin
Enabled := False;
Interval := GetDoubleClickTime;
end;
end;
procere Tmain.FormDestroy(Sender: TObject);
begin
if (IconFlag=0) then
Shell_NotifyIcon(NIM_DELETE, @nd0)
else
Shell_NotifyIcon(NIM_DELETE, @nd1);
end;
procere Tmain.N3Click(Sender: TObject);
begin
main.Show;
end;
procere Tmain.N4Click(Sender: TObject);
begin
beep;
if messagedlg('如果你退出該服務,ERP系統將無法正常運行!'+#13+'你確定要強行退出應用伺服器嗎? Y/N',mtwarning,[mbyes,mbno],0) = mryes then
Application.Terminate;
end;
procere Tmain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caNone;
main.Hide;
end;
end.
方案二:
安裝第三方控制項BSF,此控制項包在網上可以下載到,你自己搜索一下;
安裝完成後,使用TbsTrayIcon控制項即可輕松實現你需要的功能
該控制項位面BDF面板的 BusinessSkinForm VCL組中的第8個bs控制項,即要安裝BSF包後方可看到)
文件來自網路