版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Delphi7程序設計與實驗指導張景安趙慧勤張葉娥傅文博編著第三章面向對象程序設計
面向對象程序設計(Object-orientedProgramming,簡稱OOP)方法是一種以模擬現實世界的概念來組織程序的全新方法,其立意于創(chuàng)建軟件重用代碼,具備更好地模擬現實世界環(huán)境的能力。能夠支持面向對象程序設計的語言稱之為面向對象的程序設計語言。Delphi是完全面向對象的,具有真正OOP擴展的可視化編程環(huán)境,將可視化編程與面向對象的開發(fā)框架緊密地結合起來。本章主要介紹面向對象的程序設計方法。3.1面向對象的可視化編程步驟面向對象的可視化編程一般包括以下步驟:l
創(chuàng)建應用程序。l
設計應用程序的界面,添加各窗體的組件對象。l
設置主窗體組件對象的屬性。l
編寫程序代碼(主要是按鈕的事件處理代碼)。l
保存文件。l
編譯、運行程序?!纠?-1】創(chuàng)建一個工程,其中有一個窗體InputForm,用于輸入教師基本信息。下面以例3-1為例,介紹面向對象的可視化編程的步驟。3.1面向對象的可視化編程步驟3.1.1建立新工程在Delphi7集成環(huán)境下選擇File→New→Application菜單項,或使用工具條上New按鈕,然后在NewItems窗口中選擇Application,若此前未打開任何工程,確認后,FormDesigner窗口中會出現一個空白窗體Forml,在CodeEdit窗口中還會出現與Forml對應的代碼單元Unitl。若先前已打開了工程并且沒有對修改過的工程進行保存,則系統會提示是否保存等信息,處理完畢后系統將關閉該工程,然后新建一個應用程序。3.1面向對象的可視化編程步驟3.1.2設計程序界面InputForm窗體設計界面如圖3-1所示,界面上包含五個標簽(Label),用于顯示輸入提示信息,兩個文本框(Edit),分別用于輸入姓名、工齡;二個組合列表框(ComboBox),分別用于選擇職稱和部門的輸入內容;三個按鈕(Button),分別用于清除、顯示和退出程序。InputForm窗體及其包含的組件屬性見書表3-1。3.1面向對象的可視化編程步驟圖3-1InputForm窗體設計界面3.1面向對象的可視化編程步驟3.1.3編寫程序代碼本例所要設計的是按鈕組件對象的事件處理程序。雙擊窗體上的按鈕,將打開代碼編輯器,在begin和end之間輸入如下各按鈕的事件處理代碼。(*“清除”按鈕事件處理代碼*)procedureTInputForm.BtnClearClick(Sender:TObject)begin(*清空各文本框*)
Edit1.Text:='';Edit2.Text:='';end;3.1面向對象的可視化編程步驟(*“顯示”按鈕事件處理代碼*)procedureTInputForm.BtnShowClick(Sender:TObject);beginMessageDlg('這是顯示教師基本信息的窗體',mtInformation,[mbOk],0);end;(*“退出”按鈕事件處理代碼*)procedureTInputForm.BtnExitClick(Sender:TObject);beginTInputForm.Close;//關閉TInputForm窗體end;3.1面向對象的可視化編程步驟3.1.4保存所有文件選擇File→SaveAll選項,由于這個新建的工程還沒有命名,所以首先會出現一個SaveAs對話框,默認的單元名是Unitl,用戶可以用更具描述意義的名字代替它。在這里,使用InputUnit.pas進行命名。保存完單元文件后,又會出現SaveAs對話框,要求為工程文件命名,在這里,把它命名為InputPrj.dpr。注意:在進行程序設計前,應該先建立一個目錄,用來存放工程文件,便于管理。3.1面向對象的可視化編程步驟3.1.5運行程序運行程序的方法主要有以下幾種:l
打開Run菜單,選擇Run子菜單。l
快捷鍵:F9。l
單擊工具欄的按鈕。其他的程序運行方式在本章第五節(jié)程序調試中將詳細介紹。其運行后,在文本框中分別輸入姓名(張紅)、工齡(19),并選擇職務(副教授)和部門(外語系)的值,如圖3-2所示。按下“退出”按鈕,將關閉“教師基本信息”窗口,結束程序的運行。3.1面向對象的可視化編程步驟3.1.6生成exe文件打開工程文件,選擇菜單項Project→Build<工程文件名>,生成可執(zhí)行文件,文件名與工程文件名同名,擴展名為.exe??梢酝ㄟ^雙擊.exe文件圖標啟動應用程序。例如:由工程文件InputPrj.dpr生成exe文件的過程是:選擇菜單項Project→BuildInputPrj,生成InputPrj.exe文件,雙擊InputPrj.exe文件圖標,即可運行應用程序。圖3-2InputForm運行界面3.1面向對象的可視化編程步驟3.1.7制作安裝包在完成了應用程序的設計后,就要將最終的產品打包發(fā)送給用戶。目前一般使用安裝程序InstallShield來制作安裝盤。1.創(chuàng)建新的項目(1)進入Delphi7集成開發(fā)環(huán)境,編譯并執(zhí)行應用程序InputPrj.exe。(2)單擊開始→程序→InstallShield→Express,打開InstallShieldExpressBorlandLimitedEdition窗口。(3)選擇File→New命令,將彈出如圖3-3所示的NewProject對話框。3.1面向對象的可視化編程步驟(4)單擊按鈕,彈出“SelectaFileName”對話框。輸入安裝程序名為“人事管理”,然后選擇保存位置為C:\DocumentsandSettings\Administrator\Mydocuments\Mysetups,單擊“保存”按鈕,返回到圖3-3所示的界面,單擊“OK”按鈕。圖3-3NewProject對話框3.1面向對象的可視化編程步驟這樣就在C:\DocumentsandSettings\Administrator\Mydocuments\Mysetups路徑下創(chuàng)建一個名為“人事管理”的安裝項目,如圖3-4所示。圖3-4制作新安裝項目的界面3.1面向對象的可視化編程步驟2.制作安裝程序的步驟整個安裝程序的制作分為以下6個步驟。(1)組織安裝項目。安裝制作的第1步是配置項目中常見的設置,可再細分為以下幾步。①GeneralInformation:配置整個項目的一些基本信息。選擇OrganizeYourSetup\GeneralInformation,可以在屏幕的右方設置項目的基本信息。在這些基本信息中以下幾個是必須設置的?!馭ubject:項目名?!馪roductName:產品名?!馡nstalldir:安裝的目標文件夾。安裝項目的基本信息的設定如圖3-5所示3.1面向對象的可視化編程步驟圖3-5基本信息的設定②Features:使整個項目中需要安裝的文件按不同的用途分組。③SetupTypes:安裝類型設置,用戶根據不同的需求選擇不同的安裝類型。3.1面向對象的可視化編程步驟(2)指定項目文件。安裝制作的第2步工作是向安裝項目中添加文件。選擇SpecifyApplicationData→Files,可以在屏幕右方的幾個窗口向安裝項目中添加文件,如圖3-6所示。①在“Sourcecomputer’sfolders”窗口中定位到F:\Delphi61\第三章,此時“Sourcecomputer’sfiles”列表中顯示了該文件夾下的文件。②鼠標單擊“Sourcecomputer’sfiles”列表中的“InputPrj.exe”文件,將其拖到“Destinationcomputer’sfolders”的“[ProgramFilesFolder][INSTALLDIR]”上松開鼠標,這樣在該文件夾中就多了一個名為“InputPrj.exe”的文件。若系統有數據庫文件,用同樣的方法將數據庫文件拖動到“Database[DATABASEDIR]”文件夾中,本例中沒有數據庫文件。3.1面向對象的可視化編程步驟圖3-6向安裝項目中添加文件窗口(3)配置目標系統(ConfiguretheTargetSystem)。是讓安裝程序在安裝過程中能夠自動配置目標系統的一些參數,如桌面快捷方式、ODBC數據源(若有數據庫文件)等。①選擇ConfiguretheTargetSystem→Shortcuts/Folders,將顯示如圖3-7所示的視圖。3.1面向對象的可視化編程步驟圖3-7創(chuàng)建快捷方式的窗口②鼠標右擊中間窗口的“Desktop”,選擇彈出式菜單中的NewShortcuts命令,創(chuàng)建名為“InputPrj”的快捷方式(如圖3-7所示)。③若有數據庫文件,則還需要配置ODBC數據源:選擇ConfiguretheTargetSystem→ODBCresources,系統顯示了本機上存在的ODBC數據源,可以通過選擇決定是否將其中的某些數據源安裝到目標機器上。3.1面向對象的可視化編程步驟(4)設置安裝界面(CustomizetheSetupAppearance)。安裝制作的第4步工作是選擇安裝過程中將要顯示的界面。選擇CustomizetheSetupAppearance→Dialogs,將顯示如圖3-8所示的界面。選中需要顯示的對話框前面的復選框。(5)設定安裝所需的前提條件(DefineSetupRequirementsandActions)。安裝制作的第5步工作主要是定義安裝的前提條件,包含以下幾個步驟:①Requirements:選擇安裝的軟硬件環(huán)境。②CustomAction:選擇需進行的安裝操作。③SupportFiles:選擇所支持的文件。3.1面向對象的可視化編程步驟圖3-8安裝過程中顯示對話框的設置(6)制作安裝程序的最后階段(PrepareforRelease)。①選擇PrepareforRelease\BuildYourRelease,編譯安裝項目。②選擇PrepareforRelease\TestYourRelease,測試安裝程序。3.1面向對象的可視化編程步驟③選擇PrepareforRelease\DistributeYourRelease,發(fā)布安裝程序。至此應用程序InputPrj的安裝程序就制作完成。最后,測試安裝程序,如圖3-9所示。圖3-9安裝程序運行界面3.2對象和類的概念3.2.1對象對象是一種數據結構,是類的實例。了解對象,最關鍵的是掌握對象的特性。一個對象最突出的三個特征是封裝性、繼承性、多態(tài)性。定義了類之后,就可以創(chuàng)建該類的實例,即對象,通過對象來訪問類的成員。對象聲明的語法格式如下:varObjectName:Classname;其中Classname是已定義過的類名。例如:聲明Tstudent類(已定義過)的對象Classmate可以用以下語句,varClassmate:Tstudent;
3.2.2類在ObjectPascal語言中,類和記錄比較相似,也是一個構造類型,并且由屬性和方法構成。其中屬性又包括類的內部屬性和外部屬性,也就是供內部使用的一些數據變量和供外部使用的一些數據變量;方法則是該類或其實例可以操作的過程和函數。通常把類的內部屬性稱為字段,把字段、屬性和方法統稱為類的成員。類的定義形式如下:typeClassName=Class[(ParentClassname)]MemberListend;3.2對象和類的概念3.2對象和類的概念1.成員屬性類的成員屬性由保留字private、protected、public、published或automated來說明,通過這些保留字,可以控制對類中成員的訪問權限。每個保留字的具體含義如下:private:私有成員,不能被類所在單元以外的程序訪問。protected:保護成員,可以被該類的所有派生類訪問,并且成為派生類的私有成員。public:公有成員,可以被該類以外的類訪問。published:發(fā)行類型成員,它的訪問權限基本與公有成員相同,只是在設計期間可以被訪問。automated:自動類型成員,它的訪問權限基本與公有成員相同,一般用在從TAutoObject類派生的類中。3.2對象和類的概念構造函數和析構函數是類定義中兩個非常重要的函數。聲明類的一個變量后,調用類的構造函數來進行一些初始化工作,再對類的實例—對象進行操作、使用,使用完畢,調用類的析構函數,刪除創(chuàng)建的對象,同時釋放相應的內存資源等。構造函數完成對象的創(chuàng)建和初始化工作,根據類的結構為類的對象分配內存空間,而且還可以打開文件或數據庫,讀取一些初始數據,或者控制一些設備進行復位等。定義構造函數使用保留字Constructor,通常函數名使用Create。如果在定義類的時候沒有定義構造函數,系統會自動為該類生成一個默認的構造函數。3.2對象和類的概念析構函數的作用是將對象刪除并釋放相應的內存資源,此外還可以在這之前保存一些數據信息并關閉文件或數據庫等,或者對一些設備進行復位。定義析構函數使用保留字Destructor,函數名為Destroy。如果在定義類的時候沒有定義析構函數,則系統會自動為該類生成一個默認的析構函數。下面的例子說明了類的定義和使用。3.2.3方法方法是屬于一個給定對象的過程或函數,反映的是對象的行為而不是數據。1.方法的聲明和定義創(chuàng)建一個方法分兩步:首先是在對象類型的聲明中聲明這個方法,然后再用代碼來定義方法。方法的聲明格式如下:3.2對象和類的概念type
TPerson=Class//人類publicname:String;//姓名
FunctionGetAge:Integer;//獲取年齡procedureSetAge(a:Integer);//設置年齡privateage:Integer;//年齡end;3.2對象和類的概念2.方法的類型對象的方法能定義成靜態(tài)(static)、虛擬(virtual)、動態(tài)(dynamic)或消息處理(message)。請看下面的例子:TMyclass=classProcedureMyStatic;//靜態(tài)方法
ProcedureMyVitual;virtual;//虛擬方法
ProcedureMyDynamic;dynamic;//動態(tài)方法
ProcedureMyMessage(varM:TMessage);messagewm_SomeMessage;//消息處理方法end;3.2對象和類的概念3.方法的覆蓋在ObjectPascal中利用覆蓋一個方法來實現OOP的多態(tài)性概念。通過覆蓋使一種方法在不同的派生類間表現出不同的行為。ObjectPascal中能被覆蓋的方法是在聲明時被標識為virtual或dynamic的方法。為了覆蓋一個方法,在派生類的聲明中用override代替virtual或dynamic。例如:能用下面的代碼覆蓋MyVirtual和MyDynamic方法。TmyclassChild=Class(TMyclass)procedureMyVitual;override;procedureMyDynamic;override;procedureMyMessage(varM:TMessage);messagewm_SomeMessage;end;3.2對象和類的概念4.方法的重載就像普通的函數和過程,方法也支持重載,使得一個類中有許多同名的方法帶著不同的參數表,能重載的方法必須用overload關鍵字標識出來,可以不對第一個方法用overload。下面的代碼演示了一個類中有三個重載的方法:Type
TSomeClass=classprocedureAmethod(i:Integer);overload;//方法的重載
procedureAmethod(s:String);overload;//方法的重載
procedureAmethod(d:Double);overload;//方法的重載end;3.2對象和類的概念3.2.4繼承和多態(tài)1.繼承性繼承性是指一個子類能夠從父類中獲取屬性和方法,繼承的好處是能共享代碼,在往子類中添加任何新內容之前,父類的每一個屬性和方法都已存在于子類中。在定義一個實體的時候,可能會使用一些抽象的概念來概括一類事物。但是在現實生活中,接觸到的都是某一類具體的事物。由于類具有繼承性,所以可以在父類的基礎上派生出子類,同時為了避免直接創(chuàng)建類的實例,可以把類定義為抽象類。在編程時,可以首先建立通用類,然后創(chuàng)建這些通用類所有專用功能的子類。3.2對象和類的概念2.多態(tài)性在ObjectPascal語言中定義的類的方法通常是“靜態(tài)”的,也就是說在編譯和鏈接階段就確定了對象方法的調用地址。另外,還可以在運行時才確定對象方法的調用地址,這種調用函數的方式叫做多態(tài)性。在ObjectPascal語言中,多態(tài)性是通過virtual方法或dynamic方法實現的,方法的調用取決于對象的類型。3.3消息3.3.1消息機制1.什么是消息在Windows中,消息是被定義成如下形式的變體記錄:TMessage=recordmsg:Word:caseIntegerOf0:(wparam:Word;lparam:Longint;result:Longint);1:(wparamLo:Byte;wparamHi:Byte;lparamLo:Word;lparamHi:Word;resultLo:Word;resultHi:Word);end;3.3消息2.消息處理方法注意:(1)組件Message;(2)組件Defaulthandler;(3)父類Message;(4)組件Defaulthandler;(5)TwinControl.Defaulthandler;(6)TControl.Defaulthandler;(7)TObject.Defaulthandler;圖3-10Delphi消息處理過程表3.3消息表3-2處理消息的虛擬方法名稱功能Tcontrol.WndProc定義了鼠標的基本消息,如點擊和拖動。其他消息調用TObject.DispatchTwinControl.WndProc覆蓋了TControl.WndProc,定義對聚焦、鼠標、鍵盤消息的響應。其他消息繼承TControl.WndProcTcontrol.DefaultHandler處理Windows管理組件的文本串的消息:WM_GETTEXT,WM_SETTEXT及WM_GETTEXTLENGTHTwinControl.DefaultHandler通過調用API函數CallWindowProc來處理各種消息
3.3消息3.Windows消息分類Windows的消息分類如下:(1)窗口管理消息(Windows-management):當一個窗口狀態(tài)改變時,由Windows送給應用程序。(2)初始化消息:當應用程序建立一個菜單或者對話框時發(fā)送。(3)輸入消息:Windows發(fā)送的鼠標、鍵盤、滾動條、時鐘等消息。(4)系統消息:用戶操作系統的控制菜單、滾動條、邊界時,由Windows發(fā)給應用程序的消息。(5)剪貼板消息。(6)系統信息修改消息。(7)組件操作消息:Windows發(fā)給子組件,如按鈕、列表、編輯框等。(8)組件通知消息:通知組件的父窗口發(fā)生在該控制內的動作。(9)多文檔MDI消息。(10)非客戶區(qū)消息。(11)滾動條通知消息。3.3消息3.3.2發(fā)送消息Windows允許應用程序發(fā)送消息給自己、其他應用程序或者Windows本身。Windows的API函數SendMessage和PostMessage都可以實現發(fā)送功能(格式如下)。FunctionSendMessage(Wnd:HWnd,Msg,Wparam:Word;Lparam:LongInt):LongInt;FunctionPostMessage(Wnd:HWnd,Msg,Wparam:Word;Lparam:LongInt):Boolean;發(fā)送函數的參數Wnd指出接收消息的窗口句柄。其他參數都是TMessage的記錄域。Delphi組件還允許使用Perform方法給組件自己發(fā)送消息,格式如下:FunctionPerform(Msg,Wparam:Word;Lparam:LongInt);LongInt;3.3消息3.3.3處理消息1.覆蓋WndProc在程序中對WndProc進行覆蓋,例如以下的定義和實現:procedureWndProc(varMessage:TMessage);override;procedureTMyControl.WndProc(varMessage:TMessage);beginif(Message.Msg<>WM_KeyDown)inheritedWndProc(Message);end;以上程序段屏蔽了鍵盤按下的消息。3.3消息2.使用關鍵字Message可以使用關鍵字Message來聲明Windows消息處理的程序。這種消息方法的定義可以使用消息的記錄名字。在消息處理的過程中,也可以繼承父類的消息處理過程,只需Inherited就可以了,不必指明繼承哪個函數。3.3消息TypeTMyControl=class(TComponent)…procedureKeyDownEvent(varMessage:TWMKeyDown);end;procedureTMyContro1.KeyDownEvent(varMessage:TWMKeyDown);beginShowMessage(IntToStr(Message.CharCode));Inherited;end;以上程序段輸出被按下的鍵碼。3.3消息3.覆蓋DefaultHandler在程序中對Defaulthandler進行覆蓋,例如以下的定義和實現:procedureDefaulthandler(varMessage:TMessage);override;它的實現同WndProc。4.Application.OnMessage可以通過給Application.OnMessage賦值的方法,使用自己編寫的代碼代替系統提供的消息處理過程。Application.OnMessage事件為應用程序的所有窗口查看消息隊列。不要在這個事件中做耗時的操作,這會影響整個應用程序的速度和安全性。3.3消息3.3.4用戶自定義消息Windows允許定義自己消息的名字。常數WM_USER代表了第一條新消息的序號。例如:constWM_USERl=WM_USER+0;自定義的消息序號范圍在0x400—0x7fff,自定義的消息的使用方法同系統消息一樣。3.4異常處理1.異常異常(Exception)是所有的應用程序不可避免的。受異常的影響,程序常常被迫終止或者不能及時釋放資源。Delphi提供了異常處理機制,使應用程序能夠處理幾乎所有的異常情況。2.異常類(1)運行時間庫異常類(RTLException)運行時間庫異常類可以分為7類,見書表3-3,它們定義在SysUtils庫單元中。(2)對象異常類所謂對象異常類是指非部件的對象引發(fā)的異常類。Delphi定義的對象異常類見書表3-4。(3)組件異常類Delphi定義的組件異常類有3種,見書表3-5。3.4異常處理3.4.2try…except子句try…except子句用于異常發(fā)生后,判斷異常的類型,正確處理異常。在try…except語句中,except塊包含異常發(fā)生時執(zhí)行的動作。如果不發(fā)生異常,except塊不被調用。try…except語法格式如下:try…{被保護語句}except…{異常處理語句(異常不發(fā)生,不處理)}end;3.4異常處理3.4.3try…finally語句try…finally語句用于異常發(fā)生時,要釋放已分配的資源。try…finally語句無論是否發(fā)生了異常,程序都會執(zhí)行釋放資源的語句,如果發(fā)生了異常,try…finally不會處理異常,當finally代碼被執(zhí)行以后,異常被轉到下一個合法的異常處理程序。try…finally的語法格式如下:try…{資源使用情況}finally…{釋放資源}end;3.4異常處理3.4.4raise語句在try…except子句中,except處理了異常,然后便釋放了異常對象,程序繼續(xù)執(zhí)行。但有時候,不需要釋放異常對象,希望外層的異常保護程序能夠繼續(xù)處理該異常,那么就可以使用raise再次產生相同異常,退到外層保護程序處理。例如:try…{被保護語句1}try…{被保護語句2}exceptonESomethingdobegin…{為被保護語句2提供異常保護}raise;{再次提出異常}end;end;exceptonESomethingdo…;{所有的異常處理}end;3.5程序調試在開發(fā)應用程序過程中,編寫的代碼難免會出現一些錯誤。常見的錯誤有:(1)語法錯誤。這種錯誤是最常見的錯誤,它們可以被編譯器檢查出來,因此容易修改。(2)邏輯錯誤。程序員設計上的錯誤,這種錯誤較語法錯誤難發(fā)現,它們與程序員解決問題的思路有關。對于語法錯誤,Delphi的編譯器會用高亮彩條標出錯誤的位置,并在編輯窗口底部顯示錯誤信息;對于邏輯錯誤,就只能通過程序調試去發(fā)現和糾正。程序調試的主要內容可以概括為以下幾個方面:l
控制程序的運行。l
斷點的使用。l
監(jiān)視變量和數據結構項的數值變化。3.5程序調試3.5.1調試的準備和開始在默認的狀態(tài)下,調試程序不需要做任何準備,除非修改了Delphi7的配置。如果調試發(fā)生了問題,請按如下過程檢查并將調試信息編譯到程序中。首先激活集成調試器。激活的方法為:單擊Tools→DebuggerOption…,打開DebuggerOptions對話框;然后選中窗口下部IntegeratedDebugging復選框(默認情況下該框選中)。在開始調試前,還需要將符號調試信息(SymbolsDebugInformation)編譯進程序。在Delphi環(huán)境中編譯運行程序時,符號調試信息能夠使調試器在程序的源代碼與編譯器產生的機器代碼間建立聯系,這樣在程序執(zhí)行中可以同時查看對應的源代碼。符號調試信息被存放在一個符號表中,當產生的調試符號信息供集成調試器使用時,編譯器把調試符號表儲存在每個相應的.dcu文件中。3.5程序調試
3.5.2程序運行的控制通過調試器(包括集成調試器)運行程序,當程序處于等待狀態(tài)時調試器可以獲得控制,主要的控制方式有以下幾種:(1)全速運行(Run)(2)單步執(zhí)行(StepOver)
(3)追蹤執(zhí)行(TraceInto)(4)運行到光標位置(RuntoCursor)(5)運行到斷點(6)暫停執(zhí)行(ProgramPause)(7)程序復位(ProgramReset)3.5程序調試3.5.3斷點的使用1.設置斷點在Delphi7中,通過設置斷點,使程序在預先設置的代碼上暫停,以便追蹤變量值。設置斷點有以下四種常用的方法:(1)單擊CodeEditor中選定代碼行左邊的空白。(2)將光標放置在要設置斷點的那一行,按F5鍵。(3)選擇CodeEditor菜單中的“Debug→ToggleBreakPoint”選項。(4)選擇Run菜單中AddBreakPoint子選項打開斷點編輯對話框進行設置。2.斷點的操作斷點列表窗口(BreakPointListWindow)列出了所有斷點所在的源文件名、行號、條件,以及已通過的次數。如果一個斷點非法或失去功能,則在列表窗口中變灰。3.5程序調試圖3-10斷點列表窗口
(1)臨時使某斷點無效。(2)顯示和編輯斷點處的代碼。(3)設置有條件斷點和斷點通過次數。3.5程序調試1.通過WatchList窗口監(jiān)視變量或表達式監(jiān)視列表窗口(WatchListWindow)顯示程序運行中當前監(jiān)視變量或表達式的值。選擇View→DebugWindows→Watches選項,打開WatchList窗口,如圖3-11所示。圖3-11監(jiān)視列表窗口當單步執(zhí)行代碼時,WatchList窗口動態(tài)更新,這樣就可以看到每行代碼對變量或表達式的影響。在WatchList窗口可以顯示任何類型的變量或表達式,每個變量或表達式按適當的格式顯示。WatchList窗口只能顯示在作用域內有意義的變量值,變量在程序沒有運行時顯示Processnotaccessible,在斷點處沒有處于作用域內將顯示Unknownidentifier。當WatchList窗口首次顯示時,變量列表為空。3.5程序調試可以用以下幾種方法將變量或表達式添加到WatchList窗口中:(1)在CodeEditor中選中一個變量或表達式,按Ctrl+F5組合鍵,Delphi7會彈出一個“WatchProperties”對話框,如圖3-12。確認后,該變量就添加到WatchList窗口中。圖3-12“WatchProperties”對話框3.5程序調試(2)從CodeEditor中選中一個變量或表達式,按下鼠標右鍵,從快捷菜單中選擇Debug→AddWatchatCousor選項,把變量或表達式添加到WatchList窗口。(3)單擊主菜單Run→AddWatch選項,打開“WatchProperties”對話框。輸入要查看的變量或表達式。(4)從WatchList窗口選定一個變量或表達式,雙擊WatchList窗口或從WatchList窗口的快捷菜單中選擇AddWatch或EditWatch。(5)當WatchList窗口為當前窗口時,按Ctrl+A鍵。3.5程序調試2.修改變量或表達式的值在WatchList窗口中只能查看變量,而在“Evaluate/Modify”(如圖3-13所示)對話框允許快速查看并修改某個變量或表達式的值。
圖3-13“Evaluate/Modify”對話框3.5程序調試為激活“Evaluate/Modify”對話框,可運行程序到某個斷點,在CodeEditor窗口中選中要查看的變量,然后利用以下幾種方法之一,激活“Evaluate/Modify”對話框。(1)按Ctrl+F7鍵,出現“Evaluate/Modify”對話框。(2)單擊主菜單Run→Evaluate/Modify選項。(3)從CodeEditor的快捷菜單中選擇“Evaluate/Modify”選項。激活“Evaluate/Modify”對話框后,可在“Expression”框中輸入任何合法的ObjectPascal表達式,但該表達式不能包含任何函數調用。所查看的變量必須在當前斷點的作用域內。單擊“Evaluate”按鈕,表達式的值顯示在“Result”域中。在Newvalue欄中,輸入新值后,單擊“Modify”按鈕,即可修改表達式的值。3.5程序調試3.顯示函數調用當調試帶多層嵌套函數,特別是有遞歸過程的復雜程序時,要準確記住調用哪個過程以獲得程序中的特定指針是很困難的。CallStack窗口(如圖3-23所示)提供了一個調用過程列表,減輕了這種負擔。使用View→DebugWindows→CallStack選項,打開CallStack窗口。在CallStack窗口上面的項是當前函數,第一個函數下面的項是調用第一個函數,依次類推。在CallStack窗口中既顯示函數名,又顯示傳遞給它們的參數,這樣就不需要在WatchList窗口或Evaluate/Modify對話框中建立這些變量。在CallStack窗口中查看函數的調用,可使用以下幾種方法:(1)雙擊CallStack窗口中的函數,光標會自動停在CodeEditor中該函數的最后一行上。(2)選擇快捷菜單中的ViewSource或EditSource選項。(3)使用Ctrl+I鍵。3.5程序調試3.5.5其他調試工具Delphi的內置調試器雖然功能很強大,但并不能勝任所有的任務,同時由于內置調試器在執(zhí)行中引起程序環(huán)境的細微變化,所以可能影響
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 手工制作在小學數學幾何圖形教學中
- 人教部編版四年級語文上冊口語交際《安慰》精美課件
- 【暑假閱讀】小升初非連續(xù)性文本閱讀銜接講義 專題07 車票路線類(有答案解析)
- 福建省福州市平潭縣新世紀學校2023-2024學年高三學生寒假自主學習調查數學試題
- 2024年盤錦資格證客運題庫
- 2024年西藏道路運輸客運從業(yè)資格證考試題庫
- 2024年通化客運從業(yè)資格模擬考試
- 2024年湘西客運資格證題庫
- 2024年鎮(zhèn)江公交車從業(yè)資格證考試題庫
- 2024年黑龍江客運資格證題庫及答案
- 限制被執(zhí)行人駕駛令申請書
- 鋁合金船的建造課件
- 邊坡土石方開挖施工方案
- 八年級上冊語文課后習題及答案匯編(部分不全)
- 玻璃廠應急預案
- 安全帽生產與使用管理規(guī)范
- 貨車進入車間安全要求
- 新版深度學習完整整套教學課件
- 2023學年完整公開課版冰雕史話
- BIM大賽題庫含答案
- 羅馬人的故事(全15冊)(修訂版)
評論
0/150
提交評論