版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第1章 delphi的編程語(yǔ)言object pascal1.1 認(rèn)識(shí)delphi1.2 object pascal語(yǔ)言基礎(chǔ)1.3 delphi 中的程序調(diào)試及異常處理本章小結(jié)1.1 認(rèn)識(shí)delphi u感受delphi編程udelphi的特點(diǎn)udelphi編程環(huán)境及其作用udelphi應(yīng)用程序的文件組成udelphi中幾個(gè)重要概念udelphi學(xué)習(xí)方法本節(jié)要點(diǎn)練習(xí)感受delphi編程下面在delphi的集成開(kāi)發(fā)環(huán)境中編寫(xiě)一個(gè)最簡(jiǎn)單程序,并運(yùn)行。讓大家對(duì)delphi的編程有一種感性認(rèn)識(shí),并體驗(yàn)delphi快捷、方便、高效的編程環(huán)境。演示delphi的特點(diǎn)delphi最早是borland公司于19
2、94年底發(fā)布的一種可視化編程語(yǔ)言。它以object pascal作為基本開(kāi)發(fā)語(yǔ)言。目前已從delphi 1.0發(fā)展到delphi 7.0。它適用于windows 9x, windows xp,windows 2000或更高的版本操作系統(tǒng),同時(shí)也推出lynux操作系統(tǒng)下的kylix版本。u編程效率高、代碼質(zhì)量好u領(lǐng)先的數(shù)據(jù)庫(kù)技術(shù)u強(qiáng)大的internet應(yīng)用開(kāi)發(fā)功能u與office 的巧妙結(jié)合可視化編程語(yǔ)言u(píng)編程語(yǔ)言的發(fā)展 機(jī)器語(yǔ)言匯編語(yǔ)言高級(jí)語(yǔ)言(結(jié)構(gòu)化面向?qū)ο罂梢暬﹗面向?qū)ο蟮某绦蛟O(shè)計(jì)(object oriented programming)u可視化(visual)編程語(yǔ)言 delphi,v
3、fp,vb,vc 等,由組件來(lái)構(gòu)造應(yīng)用程序。面向?qū)ο蟮某绦蛟O(shè)計(jì)u對(duì)象:把要處理的數(shù)據(jù)和處理這些數(shù)據(jù)的方法組合成的一種數(shù)據(jù)類(lèi)型。對(duì)象有如下三大特性: 封裝性:把數(shù)據(jù)和處理數(shù)據(jù)的方法定義在同一數(shù)據(jù)類(lèi)型(對(duì)象)中,一般只能用該對(duì)象中的方法來(lái)處理這些數(shù)據(jù)。 繼承性:可以用已定義的對(duì)象來(lái)構(gòu)造其子對(duì)象,并且子對(duì)象可以訪問(wèn)其父對(duì)象中的數(shù)據(jù)和方法。 多態(tài)性:為動(dòng)作賦予一個(gè)可由對(duì)象序列共享的名稱(chēng),對(duì)象序列中的每個(gè)對(duì)象均以適合于自身的方式實(shí)現(xiàn)該操作。u事件驅(qū)動(dòng)對(duì)象的多態(tài)性實(shí)例 implementation$r *.dfmtype tperson=class name:string; weight:integer;
4、 constructor create(aname:string;aweight:integer); function gettitle:string; virtual; /父類(lèi)中使用虛方法 function getinformation:string; end;tstudent=class(tperson) school:string; constructor create(aname:string;aweight:integer;aschool:string); function gettitle:string; override;/子類(lèi)中使用覆蓋 end;constructor tper
5、son.create(aname:string;aweight:integer);begin inherited create; name:=aname; weight:=aweight;end;function tperson.gettitle:string;begin result:=name+ is a person;end;對(duì)象的多態(tài)性實(shí)例(續(xù))constructor tstudent.create(aname:string;aweight:integer;aschool:string);begin inherited create(aname,aweight); school:=as
6、chool;end;function tstudent.gettitle:string;begin result:=name+ is a student of +school;end;procedure showtitle(person:tperson);begin showmessage(person.getinformation);end;procedure tform1.button1click(sender: tobject);var aperson:tperson; astudent:tstudent;begin aperson:=tperson.create(david,60);
7、astudent:=tstudent.create(young,65,tsinghua); showtitle(aperson); /顯示某人相關(guān)的信息 showtitle(astudent); /顯示某學(xué)生相關(guān)的信息 aperson.free; astudent.free;end;delphi編程環(huán)境及其作用菜單欄與工具欄組件(component)欄對(duì)象樹(shù)狀列表(object treeview)對(duì)象監(jiān)視器(object inspector)窗體設(shè)計(jì)器(form designer)代碼編輯器(code editor)項(xiàng)目管理器(project manager)delphi應(yīng)用程序的文件組成de
8、lphi應(yīng)用程序的文件主要有: 工程文件(.dpr);單元文件(.pas);窗體文件(.dfm)等。delphi中幾個(gè)重要概念u類(lèi)(class):delphi中的對(duì)象類(lèi)型數(shù)據(jù),它由類(lèi)的成員構(gòu)成。u對(duì)象:類(lèi)數(shù)據(jù)類(lèi)型的實(shí)例。u組件:組成應(yīng)用程序的構(gòu)件,其類(lèi)型一般為類(lèi)類(lèi)型。我們常用的是組件的屬性、方法及事件。u組件的事件:能夠把發(fā)生于某一組件上的操作同一指定的方法進(jìn)行關(guān)聯(lián)。當(dāng)該操作發(fā)生時(shí)會(huì)自動(dòng)執(zhí)行指定的方法。窗體或窗體上的組件接收事件,事件可由用戶(hù)引發(fā)(例如鍵盤(pán)或鼠標(biāo)操作),可由系統(tǒng)引發(fā)(例如定時(shí)器事件),也可由代碼間接引發(fā)(例如當(dāng)代碼裝載其他窗體時(shí)產(chǎn)生的load事件)類(lèi)的成員域(字段):類(lèi)中的數(shù)據(jù)
9、。方法:類(lèi)中的過(guò)程或函數(shù)。屬性:類(lèi)似于類(lèi)中的域,但它本身并不占存儲(chǔ)空間,對(duì)它進(jìn)行存取操作,可以是直接存取,也可以是調(diào)用相應(yīng)的方法,它可以是只讀,只寫(xiě)或讀寫(xiě)。delphi學(xué)習(xí)方法u轉(zhuǎn)變編程思維方式u重視上機(jī)u應(yīng)用為主u多參考他人的編程經(jīng)驗(yàn)和技巧(delphi參考書(shū),delphi網(wǎng)站)delphi網(wǎng)站delphi 專(zhuān)家:delphi 園地:delphi程序員之家:5.delphi學(xué)習(xí)方法本節(jié)要點(diǎn) (1.1)u熟悉delphi集成開(kāi)發(fā)環(huán)境主要組成部分及其作用:菜單欄與工具欄,組件欄,對(duì)象樹(shù)狀列表,對(duì)象監(jiān)視器,窗體設(shè)計(jì)器,代碼編輯器,項(xiàng)目管理器等。u掌握delphi應(yīng)用程序的文件組成:項(xiàng)目文件(.dp
10、r);單元文件(.pas);窗體文件(.dfm)等。u了解幾個(gè)重要概念:類(lèi),對(duì)象,組件,組件的屬性、方法及事件等。練習(xí)(1.1)u理論1. delphi集成開(kāi)發(fā)環(huán)境主要有哪幾個(gè)部分組成,并說(shuō)明各部分的作用。2.一個(gè)delphi應(yīng)用程序主要由哪些文件組成?3.預(yù)習(xí)object pascalu上機(jī)實(shí)訓(xùn)教程1.1,1.21.2 object pascal語(yǔ)言基礎(chǔ) u標(biāo)識(shí)符u數(shù)據(jù)類(lèi)型 u變量和常量u運(yùn)算符和表達(dá)式u語(yǔ)句u過(guò)程和函數(shù)u程序和單元本節(jié)要點(diǎn)練習(xí)標(biāo)識(shí)符u標(biāo)識(shí)符必須由字母(az、az)、數(shù)字(09)或下劃線組成,不區(qū)分字母的大小寫(xiě)。u標(biāo)識(shí)符的第一個(gè)字符必須是字母或下劃線。u標(biāo)識(shí)符的長(zhǎng)度不應(yīng)超過(guò)2
11、55個(gè)字符,如果超過(guò)255字符就只有前255個(gè)有效。u不能將保留字用作標(biāo)識(shí)符,如if、and、do等。u盡量不要重新定義已預(yù)定義的標(biāo)識(shí)符,如一些標(biāo)準(zhǔn)的數(shù)學(xué)函數(shù)sqrt、sin等。數(shù)據(jù)類(lèi)型 有序類(lèi)型(ordinal) 實(shí)型(real)整型(integer)字符型(character)布爾型(boolean)枚舉(enumerated)子界(subrange)數(shù)組(array)記錄(record)集合(set)文件(file)類(lèi)(class)類(lèi)引用(class reference)接口(interface)簡(jiǎn)單類(lèi)型(simple)字符串類(lèi)型(string)構(gòu)造類(lèi)型(structured)變體類(lèi)型(
12、variant)指針類(lèi)型(pointer)過(guò)程類(lèi)型(procedural)整型(integer)u常用整型:integer-21474836482147483647有符號(hào) 4字節(jié)cardinal04294967295 無(wú)符號(hào) 4字節(jié)u基本整型:shortint-128127有符號(hào) 1字節(jié)smallint-3276832767有符號(hào) 2字節(jié)longint-21474836482147483647有符號(hào) 4字節(jié)int64263 263 -1有符號(hào) 8字節(jié)byte0255 無(wú)符號(hào) 1字節(jié)word065535 無(wú)符號(hào) 2字節(jié)longword04294967295 無(wú)符號(hào) 4字節(jié)字符型(characte
13、r)u常用字符型:charansi字符集 1字節(jié)表示: a或#97 或#39 空格u基本字符型:ansichar ansi字符集 1字節(jié)widechar unicode字符集(前256個(gè)是ansi字符集) 2字節(jié)布爾型(boolean)uboolean(1字節(jié))false true ord(false) = 0 ord(true) = 1pred(true) = false succ(false) = trueubytebool (1字節(jié)), wordbool (2字節(jié)), longbool (4字節(jié))false true ord(false) = 0 ord(true) 0pred(fals
14、e) = true succ(false) = true枚舉(enumerated)type 類(lèi)型名=(標(biāo)識(shí)符1,標(biāo)識(shí)符2, 標(biāo)識(shí)符n);如:type tmycolor = (mcred, mcblue, mcgreen, mcyellow, mcorange); answer = (ansyes, ansno, ansmaybe);其對(duì)應(yīng)的序號(hào)為0,1,2子界(subrange)type somenumbers = -128.127; caps = a.z;type tcolors = (red, blue, green, yellow, orange, purple, white, bla
15、ck); tmycolors = green.white;實(shí)型(real)u常用實(shí)型real 5.0 10-324 1.7 103088字節(jié)u基本實(shí)型real48 2.9 10-39 1.7 10386字節(jié)single 1.5 10-45 3.4 1038 4字節(jié)double 5.0 10-324 1.7 103088字節(jié)etended 3.6 10-4951 1.1 10493210字節(jié)comp -263+1 263 8字節(jié)currency-922337203685477.5808 922337203685477.5807 8字節(jié)字符串類(lèi)型(string)u常用字符串string $h+ a
16、nsistring , $h- shortstringborland borland youll see youll see 無(wú)字符line 1#13#10line 2中華人民共和國(guó) u基本字符串shortstring 255 個(gè)字符ansistring 231 個(gè)字符widestring230個(gè)字符數(shù)組(array)type 類(lèi)型名=array有序類(lèi)型 of 基類(lèi)型;如:type myarray= array1.100 of char;type tmatrix = array1.10, 1.50 of real;記錄(record)type 類(lèi)型名 = record 域名:類(lèi)型;. 域名:類(lèi)
17、型;end;如:type tdaterec = record year: integer; month: (jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec); day: 1.31; end;集合(set)type 類(lèi)型名= set of 有序類(lèi)型;如:type tintset = set of 1.250;set of byte;set of (club, diamond, heart, spade);set of char;集合值表示:1, 3, 5, 7, 9 ,a,b,c文件(file)type phoneentry
18、= record firstname, lastname: string20; phonenumber: string15; listed: boolean; end; phonelist = file of phoneentry;類(lèi)(class)type tlistcolumns = class(tcollection) private fowner: tcustomlistview; function getitem(index: integer): tlistcolumn; procedure setitem(index: integer; value: tlistcolumn); pr
19、otected function getowner: tpersistent; override; procedure update(item: tcollectionitem); override; public constructor create(aowner: tcustomlistview); function add: tlistcolumn; property owner: tcustomlistview read fowner; property itemsindex: integer: tlistcolumn read getitem write setitem; defau
20、lt; end; /類(lèi)不能定義在函數(shù)或過(guò)程中類(lèi)引用類(lèi)型(class reference)type 類(lèi)引用類(lèi)型名=class of 類(lèi)類(lèi)型;如:type tclass = class of tobject;var anyobj:tclass;anyobj變量可以引用任何其他類(lèi)。類(lèi)引用類(lèi)型在用戶(hù)要調(diào)用一個(gè)類(lèi)的方法,但編譯時(shí)又不知道該類(lèi)的類(lèi)型時(shí)非常有用。接口(interface)type 接口名 = interface (父接口) 各類(lèi)中共同的方式或?qū)傩粤斜韊nd;它體現(xiàn)的是多個(gè)互不相關(guān)的類(lèi)之間的相同行為。變體類(lèi)型(variant)變體類(lèi)型與其他數(shù)據(jù)類(lèi)型結(jié)合使用會(huì)產(chǎn)生類(lèi)型的自動(dòng)轉(zhuǎn)換。var v1,
21、v2, v3, v4, v5: variant; i: integer; d: double; s: string;begin v1 := 1; integer value v2 := 1234.5678; real value v3 := hello world!; string value i := v1; i = 1 (integer value) d := v2; d = 1234.5678 (real value) s := v3; s = hello world! (string value) 指針類(lèi)型(pointer)type 指針類(lèi)型名= 類(lèi)型對(duì)字符串類(lèi)型和類(lèi)類(lèi)型,其內(nèi)部實(shí)現(xiàn)方
22、式均用指針。但為方便使用,delphi把許多運(yùn)用指針的地方隱藏起來(lái),用戶(hù)在編制程序時(shí)可以不把其當(dāng)作指針來(lái)處理,而讓delphi來(lái)處理容易出錯(cuò)的問(wèn)題。過(guò)程類(lèi)型type tintegerfunction = function: integer; tprocedure = procedure; tstrproc = procedure(const s: string); tmathfunc = function(x: double): double;變量和常量u變量u常量真常量類(lèi)型常量變量var 變量名1,變量名2,變量名n:類(lèi)型;如:(全局變量在說(shuō)明時(shí)還可以給初值)var x, y, z: dou
23、ble; i, j, k: integer; digit: 0.9; okay: boolean; crtmode: byte absolute $0040; s:string; /字符串變量訪問(wèn) rd: tdaterec; /記錄變量訪問(wèn)字符串變量訪問(wèn)(s:string)u作為字符串來(lái)訪問(wèn)s:=abcde;u作為單個(gè)字符來(lái)訪問(wèn)s1,s2,s3等訪問(wèn)單個(gè)字符,類(lèi)似于數(shù)組中的每個(gè)元素。記錄變量訪問(wèn)(rd:tdaterec)u點(diǎn)域訪問(wèn)rd.year:=2001; rd.month:=feb; rd.day:=12;uwith do訪問(wèn)with rd do year:=2001;type tdate
24、rec = record year: integer; month: (jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec); day: 1.31; end;真常量const 常量名=常量表達(dá)式;const min = 10; max = $100; center = (max - min) div 2; beta = chr(225); numchars = ord(z) - ord(a) + 1; message = out of memory; errstr = error: + message + . ; errpos
25、= 80 - length(errstr) div 2; ln10 = 2.302585092994045684; ln10r = 1 / ln10; numeric = 0.9; alpha = a.z, a.z; alphanum = alpha + numeric;類(lèi)型常量const 常量名:類(lèi)型=值;(兼容老版本,要加編譯開(kāi)關(guān)$j+;現(xiàn)在可以直接在全局變量中賦初值)consti:integer=23;digits1: array0.4 of char=(0,1,2,3,4);digits2: array0.4 of char = 01234;type tcube=array0.1, 0
26、.1, 0.1 of integer;tmonth=(jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec);tdate = record d: 1.31; m: tmonth; y: 1900.1999; end;const maze:tcube =(0, 1),(2, 3),(4, 5),(6,7);someday: tdate = (d: 2; m: dec; y: 1960);運(yùn)算符和表達(dá)式u算術(shù)運(yùn)算(arithmetic operator)u關(guān)系運(yùn)算(relational operator)u布爾運(yùn)算(boolean operator)u位運(yùn)
27、算(bitwise operator)u字符串運(yùn)算(string operator)u集合運(yùn)算(set operator)u指針運(yùn)算(pointer operator)u類(lèi)運(yùn)算(class operator)u取地址操作()運(yùn)算符的優(yōu)先級(jí)算術(shù)運(yùn)算(arithmetic operator)算術(shù)運(yùn)算符:+, *, /, div(整除), mod(取余)運(yùn)算量有整型、實(shí)型等, div和mod只能是整型,結(jié)果類(lèi)型同運(yùn)算量。例:5/2 2.55 div2 25 mod 2 15 mod 2 1-5 mod 2 -1-5 mod -2 -1關(guān)系運(yùn)算(relational operator)關(guān)系運(yùn)算符有 =
28、, , , =運(yùn)算量有簡(jiǎn)單類(lèi)型、字符串類(lèi)型等,結(jié)果為布爾類(lèi)型。例:60=30 true2.54-43.2 falseabcdefalse true布爾運(yùn)算(boolean operator)布爾運(yùn)算符有 not, and, or, xor運(yùn)算量和結(jié)果均只能為布爾類(lèi)型。例:true and false falseflase or (60=30) true位運(yùn)算(bitwise operator)位運(yùn)算符有 not, and, or, xor, shl, shr運(yùn)算量和結(jié)果均只能為整型。例:byte(not $ff) $00byte($10 and $11) $10byte( $10 or $1b
29、) $1bbyte( $20 xor $21) $01byte( $10 shl 2) $40byte( $20 shr 1) $10字符串運(yùn)算(string operator)字符串運(yùn)算符主要指連接兩個(gè)字符串的運(yùn)算符 +例:i am a+ student. i am a student.文件名:+abc.doc 文件名:abc.doc集合運(yùn)算(set operator)集合運(yùn)算符有 +(并), - (差), * (交), = (包含), = (相等), (不等), in (成員檢查)指針運(yùn)算(pointer operator)指針運(yùn)算符有 +, -, =, , 類(lèi)運(yùn)算(class opera
30、tor)類(lèi)運(yùn)算符有 as, isas:將一個(gè)類(lèi)實(shí)例轉(zhuǎn)換為另一個(gè)類(lèi)型的類(lèi)。如:sender as tbuttonis:用來(lái)判斷一個(gè)類(lèi)實(shí)例的類(lèi)型,結(jié)果為布爾型。如:sender is tcomponet取地址操作()是單目運(yùn)算符,其作用是返回變量的地址。運(yùn)算符的優(yōu)先級(jí), not*, /, div, mod, and, shl, shr, as+, - or, xor=, , , =, in, is高低語(yǔ)句u注釋符單行注釋符/;多行注釋符或(*)u說(shuō)明語(yǔ)句對(duì)數(shù)據(jù)類(lèi)型、變量、常量、標(biāo)號(hào)、函數(shù)及過(guò)程等進(jìn)行聲明的語(yǔ)句,編譯后不生成可執(zhí)行代碼。語(yǔ)句以分號(hào)結(jié)束。u賦值語(yǔ)句和復(fù)合語(yǔ)句u選擇語(yǔ)句u循環(huán)語(yǔ)句uwit
31、h語(yǔ)句賦值語(yǔ)句和復(fù)合語(yǔ)句u賦值語(yǔ)句(變量名:=表達(dá)式)x := y + z;done := (i = 1) and (i 100);i := sqr(j) - i * k;somearrayi + 1 := p;tmyobject.someproperty := true;u復(fù)合語(yǔ)句(把多個(gè)語(yǔ)句組合成一個(gè)語(yǔ)句)begin z := x; x := y; y := z;end;選擇語(yǔ)句uif語(yǔ)句ucase語(yǔ)句ugoto語(yǔ)句if語(yǔ)句if j = 0 then exit /此處不能用;else result := i/j;注:過(guò)程exit將終止子程序if j 0 thenbegin result :
32、= i/j; count := count + 1;end /此處不能用;else if count = last then done := true /此處不能用;else exit;if 布爾型表達(dá)式 then 語(yǔ)句1 else 語(yǔ)句2case語(yǔ)句case 有序類(lèi)型表達(dá)式 of 選擇項(xiàng)1: 語(yǔ)句1; . 選擇項(xiàng)n: 語(yǔ)句n;else 語(yǔ)句;end注:各選擇項(xiàng)中的值要唯一。case i of 1.5: caption := low; 6.9: caption := high; 0, 10.99: caption := out of range;else caption := ;end;got
33、o語(yǔ)句label starthere /說(shuō)明一個(gè)標(biāo)號(hào).starthere: beep;goto starthere;注:標(biāo)號(hào)可以是標(biāo)識(shí)符或09999的數(shù)。循環(huán)語(yǔ)句ufor語(yǔ)句uwhile語(yǔ)句urepeat語(yǔ)句for語(yǔ)句for 有序類(lèi)型變量:=初值 to 終值 do 語(yǔ)句或for :=初值 downto 終值 do 語(yǔ)句注:有序類(lèi)型變量的值增(to)減(downto)1,越過(guò)終值結(jié)束循環(huán)。max:=data1;for i := 2 to 12 do if datai max then max := datai;while語(yǔ)句while 布爾表達(dá)式 do 語(yǔ)句注:布爾表達(dá)式為false結(jié)束循環(huán)。m
34、ax:=data1;i:=2;while i max then max := datai; i:=i+1;end;repeat語(yǔ)句repeat 語(yǔ)句1; .; 語(yǔ)句2; until 布爾表達(dá)式;注:布爾表達(dá)式為true結(jié)束循環(huán)。max:=data1;i:=2;repeat if datai max then max := datai; i:=i+1;until i12;with語(yǔ)句訪問(wèn)記錄中的數(shù)據(jù)域或類(lèi)中的成員(域,屬性或方法)。 with obj do 語(yǔ)句注:指類(lèi)或記錄類(lèi)型變量的名字,下同。 with obj1, ., objn do 語(yǔ)句或with obj1 do with obj2 d
35、o . with objn do 語(yǔ)句注: obj1, ., objn等分別作用于與其對(duì)應(yīng)的各自成員,可嵌套。舉例with語(yǔ)句舉例with edit1 do begin text:=時(shí)間; /相當(dāng)于edit1.text:=時(shí)間; enable:=false; /相當(dāng)于edit1.enable:=false; end;with label1,edit1 do begin caption:=label one; /相當(dāng)于label1.caption:=label one; text:=text one; / 相當(dāng)于edit1.text:=text one; end;with form1,edit1
36、 do text:=text one; / 相當(dāng)于form1.edit1.text:=text one;過(guò)程和函數(shù)u過(guò)程u函數(shù)u常用過(guò)程或函數(shù)過(guò)程procedure 過(guò)程名(形參列表); 過(guò)程頭類(lèi)型聲明常量聲明變量聲明過(guò)程聲明函數(shù)聲明begin 語(yǔ)句;end;注:作為語(yǔ)句來(lái)調(diào)用。舉例說(shuō)明部分語(yǔ)句部分過(guò)程體過(guò)程舉例/把整型數(shù)轉(zhuǎn)化為字符串procedure numstring(n: integer; var s: string); var v: integer;begin v := abs(n); s := ; repeat s := chr(v mod 10 + ord(0) + s; v :=
37、 v div 10; until v = 0; if n 0 do begin if odd(i) then result := result * x; i := i div 2; x := sqr(x); end;end; /p:=power(2.0,3)常用過(guò)程或函數(shù)(sysutils或system單元)abs 求絕對(duì)值sqr 求平方值sqrt 求平方根sin 求正弦cos 求余弦exp 求e的冪ln 求自然對(duì)數(shù)pi 3.1415926535897932385date 取日期time 取時(shí)間length 求字符串的長(zhǎng)度pos 求子串的位置delete 刪除子串copy 復(fù)制字符串chr a
38、scii值對(duì)應(yīng)的字符 ord 取得序號(hào)round 實(shí)型四舍五入為整型trunc 實(shí)型取整inttohex 整型變?yōu)槭M(jìn)制數(shù)串inttostr 整型變?yōu)樽址畇trtoint 字符串變?yōu)檎蚫atetostr 日期變?yōu)樽址畊pcase 轉(zhuǎn)化為大寫(xiě)字母uppercase 轉(zhuǎn)化為大寫(xiě)字符串lowercase 轉(zhuǎn)化為小寫(xiě)字符串random 產(chǎn)生一個(gè)隨機(jī)數(shù)odd 判定奇數(shù)程序和單元舉例program 程序名; 程序頭uses子句 引用單元類(lèi)型聲明常量聲明變量聲明過(guò)程聲明函數(shù)聲明begin 語(yǔ)句;end. 程序結(jié)束說(shuō)明部分語(yǔ)句部分程序體程序舉例program editor; /程序?qū)?yīng)的文件名(.dp
39、r)必須與程序名相同。uses forms, reabout in reabout.pas aboutbox, remain in remain.pas mainform; $r *.res /編譯指示begin application.title := text editor; application.createform(tmainform, mainform); application.run;end.單元unit 單元名; 單元頭interfaceuses子句 引用其它單元 接口部分implementation uses子句 引用其它單元 實(shí)現(xiàn)部分initialization 初始化代
40、碼finalization 結(jié)束代碼end. 單元結(jié)束舉例單元舉例unit unit1; /單元對(duì)應(yīng)的文件名(.pas)必須與單元名相同interfaceuses windows, messages, sysutils, classes, graphics, controls, forms, dialogs;type tform1 = class(tform) button1: tbutton; procedure button1click(sender: tobject); private private declarations public public declarations end
41、;var form1: tform1;implementation$r *.dfmprocedure tform1.button1click(sender: tobject);begin close;end;end.本節(jié)要點(diǎn)(1.2)u會(huì)使用delphi的幫助系統(tǒng)(object pascal reference主題)查閱object pascal的各語(yǔ)法要素u逐漸熟悉object pascal的常用數(shù)據(jù)類(lèi)型、變量、常量、運(yùn)算符和表達(dá)式,并掌握它們的用法。u熟悉各語(yǔ)句的格式和用法,并使用本講稿中的各示例編寫(xiě)完整程序,來(lái)驗(yàn)證各語(yǔ)句的用法。u逐漸掌握過(guò)程和函數(shù)的編寫(xiě)和調(diào)用。u熟悉程序和單元的結(jié)構(gòu)。練
42、習(xí)(1.2)u理論教程p28-30選擇題1-5,簡(jiǎn)答題2-3u上機(jī)實(shí)訓(xùn)教程1.3,1.4補(bǔ)充:使用delphi編寫(xiě)一實(shí)現(xiàn)排序功能的程序。演示1.3 delphi 中的程序調(diào)試及異常處理u程序調(diào)試u異常處理本節(jié)要點(diǎn)練習(xí)程序調(diào)試u程序設(shè)計(jì)中的錯(cuò)誤類(lèi)型u設(shè)置編譯選項(xiàng)u控制程序的執(zhí)行u使用監(jiān)視列表窗口(watch list, ctrl+f5)u使用求值/修改對(duì)話框(evaluate/modify, ctrl+f7)程序設(shè)計(jì)中的錯(cuò)誤類(lèi)型u設(shè)計(jì)期錯(cuò)誤u編譯期錯(cuò)誤u運(yùn)行期錯(cuò)誤u邏輯錯(cuò)誤 設(shè)計(jì)期錯(cuò)誤 這一類(lèi)型的錯(cuò)誤較容易發(fā)現(xiàn)和糾正,因?yàn)閐elphi能對(duì)特定的值進(jìn)行合法性檢查,發(fā)現(xiàn)這類(lèi)錯(cuò)誤,delphi將顯示一
43、個(gè)警告窗口,以提示用戶(hù)糾正錯(cuò)誤。 這種錯(cuò)誤類(lèi)型發(fā)生在使用delphi進(jìn)行可視化設(shè)計(jì)的時(shí)候,通常是因?yàn)榻o組件的某個(gè)屬性輸入了非法的值。例如按鈕組件tbitbtn的numglyphs屬性取值為 1.4,若輸入的值不在此范圍,則發(fā)生錯(cuò)誤。編譯期錯(cuò)誤 編譯期錯(cuò)誤也稱(chēng)為語(yǔ)法錯(cuò)誤。在delphi中,通常是當(dāng)程序代碼違反了object pascal語(yǔ)言的語(yǔ)法規(guī)則時(shí)發(fā)生這類(lèi)錯(cuò)誤。比較常見(jiàn)的語(yǔ)法錯(cuò)誤有標(biāo)識(shí)符未定義或拼寫(xiě)錯(cuò)誤;語(yǔ)句的末尾漏掉分號(hào);賦值語(yǔ)句中漏寫(xiě)昌號(hào);begin與end末配對(duì);括號(hào)末配對(duì);引號(hào)末配對(duì)等。 如果程序代碼中有語(yǔ)法錯(cuò)誤,編譯不能通過(guò),代碼編輯器的狀態(tài)行將給出錯(cuò)誤信息提示,并加亮有語(yǔ)法錯(cuò)誤的
44、代碼行。運(yùn)行期錯(cuò)誤 程序雖然通過(guò)了編譯,但運(yùn)行失敗,這種錯(cuò)誤稱(chēng)為運(yùn)行期錯(cuò)誤,例如應(yīng)用程序試圖打開(kāi)一個(gè)不存在的文件,或者運(yùn)算時(shí)出現(xiàn)被零除等情況。 delphi能夠檢測(cè)出這類(lèi)錯(cuò)誤,并退出當(dāng)前模塊。此時(shí),如果不能確定錯(cuò)誤發(fā)生在什么地方,可以用delphi內(nèi)部集成的調(diào)試器查找錯(cuò)誤的位置。例如可以用單步執(zhí)行命令,讓程序一條語(yǔ)句一條語(yǔ)句地執(zhí)行,或者添加一個(gè)監(jiān)視窗口,觀察某個(gè)變量的變化情況。邏輯錯(cuò)誤舉例 邏輯錯(cuò)誤是指程序通過(guò)了編譯,也能執(zhí)行,但執(zhí)行的結(jié)果跟預(yù)期的不同。 邏輯錯(cuò)誤有時(shí)比較難找,因?yàn)閐elphi不能自動(dòng)識(shí)別這類(lèi)錯(cuò)誤。這時(shí)就需要用到內(nèi)部集成的調(diào)試器,通過(guò)控制程序的運(yùn)行、監(jiān)視程序的輸出或觀察變量的值
45、,把錯(cuò)誤逐步定位在一個(gè)較小的范圍內(nèi)。舉例(邏輯錯(cuò)誤)編程實(shí)現(xiàn)符號(hào)函數(shù)的功能 :var x,y:real;begin x:=-2; y:=0; if x=0 then if x0 then y:=1 else y:=-1; showmessage(floattostr(y);end;設(shè)置編譯選項(xiàng) 設(shè)置編譯選項(xiàng)用來(lái)控制delphi程序的編譯方式。 可以使用如下二種方法進(jìn)行設(shè)置:(1)使用delphi菜單project/options-compiler(2)在程序中加$z+或$z-設(shè)置或清除編譯選項(xiàng),其中z為編譯開(kāi)關(guān)字母。 建議,在程序調(diào)試時(shí),將所有檢查性的選項(xiàng)設(shè)置上,優(yōu)化特性清除,以利于調(diào)試;當(dāng)程
46、序調(diào)試通過(guò)后,應(yīng)把那些加重程序時(shí)間、空間負(fù)擔(dān)的編譯開(kāi)關(guān)清除,設(shè)置優(yōu)化代碼功能,再編譯一次,以生成簡(jiǎn)練的可執(zhí)行文件。編譯選項(xiàng)1代碼生成(code generation) 選 項(xiàng) 說(shuō) 明 字母 optimization 編譯時(shí)啟動(dòng)優(yōu)化功能:如把循環(huán)變量放入cpu的寄存器中,對(duì)重復(fù)出現(xiàn)的表達(dá)式只求一次值等 o stack frames 強(qiáng)制編譯器為每個(gè)過(guò)程和函數(shù)產(chǎn)生一個(gè)堆找結(jié)構(gòu),這主要是為調(diào)試某些程序設(shè)置的 w pentium-safe fdiv 自動(dòng)生成檢測(cè)錯(cuò)誤浮點(diǎn)除法的代碼 u record field alignment 讓變量地址都為1,2,4,8 的整數(shù)倍數(shù),以提高cpu對(duì)內(nèi)存訪問(wèn)的速度
47、a 編譯選項(xiàng)2運(yùn)行時(shí)的錯(cuò)誤(runtime errors) 信息(messages) 選 項(xiàng) 說(shuō) 明 字母 range checking 檢查數(shù)組或字符串類(lèi)型的下標(biāo)范圍是否越界 r i/o checking 在每次i/o調(diào)用后檢查是會(huì)有io錯(cuò)誤 i overflow checking 檢查整數(shù)操作是否溢出 q 選 項(xiàng) 說(shuō) 明 show hints 使編譯器顯示提示信息 show w arnings 使編譯器顯示警告信息 編譯選項(xiàng)3語(yǔ)法選項(xiàng)(syntax options)選 項(xiàng) 說(shuō) 明 字母 strick var-strings 設(shè)置字符串參數(shù)的錯(cuò)誤檢查, 要求形參與實(shí)參類(lèi)型必須嚴(yán)格一致(若 o
48、pen parameters 選項(xiàng)被選中,此項(xiàng)無(wú)效) v complete boolean eval 計(jì)算完邏輯表達(dá)式的所有項(xiàng)后計(jì)算整個(gè)邏輯表達(dá)式的值。 當(dāng)不選此項(xiàng), 且邏輯表達(dá)式的值能確定時(shí),后面的項(xiàng)就不計(jì)算了。如無(wú)特殊要求此項(xiàng)通常不選 b extended syntax 用 delphi 的擴(kuò)展語(yǔ)法,允許忽略函數(shù)的返回值,而像使用過(guò)程一樣使用函數(shù);同時(shí)也支持 pchar 類(lèi)型 x type operator 使由操作符返回的指針只與指向同類(lèi)型變量的指針兼容 t open parameters 允許在過(guò)程及函數(shù)的聲明中使用開(kāi)放式的字符串參數(shù) p huge strings 使關(guān)鍵字 strin
49、g 對(duì)應(yīng)新的 ansistring 類(lèi)型(否則只對(duì)應(yīng)shortstring 類(lèi)型) h assignable typed constants 編譯器允許程序修改類(lèi)型常量的值。 此選項(xiàng)是為了兼容早期的 delphi 和 pascal 版本而設(shè)置的 j 編譯選項(xiàng)4調(diào)試(debugging) 舉例選 項(xiàng) 說(shuō) 明 字母 debug information 把調(diào)試信息放入單元文件(.dcu)里 d local symbols 生成局域變量信息 l reference info /definitions only 生成符號(hào)索引信息。若此二項(xiàng)均被選中,編譯器記錄下各標(biāo)識(shí)符的定義位置,使代碼瀏覽器工作。若只有
50、reference info被選中, 編譯器記錄下標(biāo)識(shí)符定義和使用位置的信息。除非 debug information和 local symbols都被選中,否則此二選項(xiàng)均無(wú)效 y assertions 在程序代碼中插入斷點(diǎn)代碼 c use debug dcus 允許鏈接調(diào)試版本的vcl 舉例(range checking)$r+或$r-var a:array 1.3 of byte; i:integer;begin for i:=1 to 4 do begin ai:=i; showmessage(inttostr(ai); end;end;控制程序的執(zhí)行u設(shè)置斷點(diǎn)(toggle break
51、point/f5)u執(zhí)行到光標(biāo)處(run to cursor/f4)u單步執(zhí)行(trace into/f7,step over/f8)舉例舉例(控制程序的執(zhí)行)編程實(shí)現(xiàn)符號(hào)函數(shù)的功能 :var x,y:real;begin x:=-2; y:=0; if x=0 then if x0 then y:=1 else y:=-1; showmessage(floattostr(y);end;異常處理udelphi對(duì)異常的自動(dòng)處理u編程人員對(duì)異常的處理tryexcept語(yǔ)句raise語(yǔ)句tryfinally語(yǔ)句u自定義異常類(lèi)及其使用delphi對(duì)異常的自動(dòng)處理 delphi為應(yīng)用程序提供了一套缺省的
52、自動(dòng)異常處理機(jī)制,即當(dāng)前模塊發(fā)生錯(cuò)誤后退出當(dāng)前模塊并給出錯(cuò)誤信息,而并不立即引起應(yīng)用程序的中止。 若程序在delphi的集成開(kāi)發(fā)環(huán)境中運(yùn)行,在給出相應(yīng)錯(cuò)誤信息的同時(shí),還盡可能定位出錯(cuò)的位置。例如:var i:integer; r:real;begin i:=0; r:=8 / i; showmessage(floattostr(r);end;tryexcept語(yǔ)句(格式1)格式1:try 語(yǔ)句except 語(yǔ)句end;功能: 若執(zhí)行try與except之間的語(yǔ)句發(fā)生異常,則執(zhí)行except與end之間的語(yǔ)句對(duì)該異常作出處理,并清除異常,否則(沒(méi)有異常)跳過(guò)except與end之間的語(yǔ)句。舉例舉
53、例(格式1)舉例:var i:integer; r:real;begin i:=0; try r:=8/i; showmessage(floattostr(r); except showmessage(除數(shù)為零); end;end;tryexcept語(yǔ)句(格式2)格式2:try 語(yǔ)句except on 標(biāo)識(shí)符: 異常類(lèi) do 語(yǔ)句 on 標(biāo)識(shí)符: 異常類(lèi) do 語(yǔ)句 end;功能: 當(dāng)執(zhí)行try與except之間的語(yǔ)句發(fā)生異常時(shí),依次查找on后的異常類(lèi),直到發(fā)現(xiàn)某個(gè)匹配的異常類(lèi)即執(zhí)行其do后語(yǔ)句,并清除異常,然后跳過(guò)try與except結(jié)構(gòu),執(zhí)行end后的語(yǔ)句。 若在on后沒(méi)有找到匹配的異常類(lèi)
54、,則異常仍然存在。舉例舉例(格式2)var i,j:integer; r:real;begin j:=20; try i:=strtoint(edit1.text); j:=10 div i; r:=10/(i-1); showmessage(正常,j=+inttostr(j)+,r=+floattostr(r); except on e:econverterror do showmessage(異常,非數(shù)值+#13+e.message); on edivbyzero do showmessage(異常,整數(shù)被0除); on ezerodivide do showmessage(異常,實(shí)數(shù)被0
55、除); end;end;tryexcept語(yǔ)句(格式3)格式3:try 語(yǔ)句except on 標(biāo)識(shí)符: 異常類(lèi) do 語(yǔ)句 on 標(biāo)識(shí)符: 異常類(lèi) do 語(yǔ)句 else 語(yǔ)句end;功能: 當(dāng)執(zhí)行try與except之間的語(yǔ)句發(fā)生異常時(shí),依次查找on后的異常類(lèi),直到發(fā)現(xiàn)某個(gè)匹配的異常類(lèi)即執(zhí)行其do后語(yǔ)句,若在on后沒(méi)有找到匹配的異常類(lèi),則執(zhí)行else后的語(yǔ)句,并清除異常。舉例舉例(格式3)var i,j:integer; r:real;begin j:=20; try i:=strtoint(edit1.text); j:=10 div i; r:=10/(i-1); showmessage(正常,j=+inttostr(j)+,r=+floattostr(r); /raise exception except on e:econverterror do showmessage(異常,非數(shù)值+#13+e.message); else showmessage(異常,除數(shù)為0); end;end;raise語(yǔ)句在except后語(yǔ)句處理了異常,則清除異常,但可在其后使用raise重新產(chǎn)生該異常,再提供給外層try來(lái)處理。var i:integer; r:real;begin i:=0; try r:=8/i
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 動(dòng)物外套產(chǎn)業(yè)鏈招商引資的調(diào)研報(bào)告
- 人工智能與機(jī)器學(xué)習(xí)行業(yè)市場(chǎng)調(diào)研分析報(bào)告
- 登山杖項(xiàng)目運(yùn)營(yíng)指導(dǎo)方案
- 電話聽(tīng)筒產(chǎn)品供應(yīng)鏈分析
- 頭發(fā)拉直制劑產(chǎn)品供應(yīng)鏈分析
- 嬰兒床床單產(chǎn)業(yè)鏈招商引資的調(diào)研報(bào)告
- 信息和數(shù)據(jù)的臨時(shí)電子存儲(chǔ)行業(yè)相關(guān)項(xiàng)目經(jīng)營(yíng)管理報(bào)告
- 紡車(chē)產(chǎn)品供應(yīng)鏈分析
- 電動(dòng)吸痰器商業(yè)機(jī)會(huì)挖掘與戰(zhàn)略布局策略研究報(bào)告
- 應(yīng)收賬款融資行業(yè)市場(chǎng)調(diào)研分析報(bào)告
- 機(jī)械工程專(zhuān)業(yè)導(dǎo)論學(xué)習(xí)通課后章節(jié)答案期末考試題庫(kù)2023年
- 結(jié)算審計(jì)服務(wù)投標(biāo)方案
- 蘇教版2023年小學(xué)三年級(jí)科學(xué)上冊(cè)期中測(cè)試試卷及答案
- 一代元帥劉伯承
- 氣道評(píng)估和管理
- 學(xué)科分析:中等職業(yè)教育“民族音樂(lè)與舞蹈”專(zhuān)業(yè)學(xué)科分析
- 單層工業(yè)廠房結(jié)構(gòu)吊裝
- 消音器研究報(bào)告
- 策略思維:商界、政界及日常生活中的策略競(jìng)爭(zhēng)
- 筑夢(mèng)紅色之旅智慧樹(shù)知到答案章節(jié)測(cè)試2023年南昌大學(xué)
- 艾里遜8000系列變速箱培訓(xùn):《液控系統(tǒng)》
評(píng)論
0/150
提交評(píng)論