![創(chuàng)建應(yīng)用程序界面_第1頁](http://file4.renrendoc.com/view/33c6d274ea8972de125069e075dfed67/33c6d274ea8972de125069e075dfed671.gif)
![創(chuàng)建應(yīng)用程序界面_第2頁](http://file4.renrendoc.com/view/33c6d274ea8972de125069e075dfed67/33c6d274ea8972de125069e075dfed672.gif)
![創(chuàng)建應(yīng)用程序界面_第3頁](http://file4.renrendoc.com/view/33c6d274ea8972de125069e075dfed67/33c6d274ea8972de125069e075dfed673.gif)
![創(chuàng)建應(yīng)用程序界面_第4頁](http://file4.renrendoc.com/view/33c6d274ea8972de125069e075dfed67/33c6d274ea8972de125069e075dfed674.gif)
![創(chuàng)建應(yīng)用程序界面_第5頁](http://file4.renrendoc.com/view/33c6d274ea8972de125069e075dfed67/33c6d274ea8972de125069e075dfed675.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第4章 創(chuàng)建應(yīng)用程序界面本章學(xué)習(xí)要點l 學(xué)習(xí)窗體組件的作用及其設(shè)計l 學(xué)會為窗體編制事件處理方法程序l 掌握菜單的設(shè)計方法l 掌握彈出式菜單的設(shè)計方法l 學(xué)習(xí)有數(shù)據(jù)源和無數(shù)據(jù)源窗體的設(shè)計方法 應(yīng)用程序要展示給用戶的主要界面形式是窗體,用戶要通過程序員提供的窗體來進行操作,或者獲取所希望的信息。因此,為計算機信息系統(tǒng)設(shè)計美觀和友好的應(yīng)用程序界面,是一項非常重要的內(nèi)容。窗體是可視化編程中最基本的組件,任何一個可視化編程工具都提供了這一組件。在設(shè)計完管理信息系統(tǒng)的數(shù)據(jù)庫之后,就應(yīng)該為用戶設(shè)計合適的應(yīng)用程序窗體了,提供程序與用戶交流的一個窗口,可以說,沒有窗體,應(yīng)用程序的框架就很難建立起來。 窗體是D
2、elphi基本的構(gòu)造模塊,Delphi所有的可視化程序設(shè)計工作都是在窗體上進行的。在程序運行之后,這些窗體實際上就是顯示出來的最主要的人機界面。無論是需要進行信息查看,還是需要對數(shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)進行添加、修改、刪除等編輯操作,信息系統(tǒng)的使用者對數(shù)據(jù)庫中數(shù)據(jù)所進行的任何操作均在窗體中進行。24.1 窗體與組件 在Windows環(huán)境中,人機交互主要是在一些窗體和對話框中進行的。在Delphi中,窗體指的就是窗口和對話框,進行可視化程序設(shè)計一般就是從窗體開始并在窗體中完成的。窗體與組件的關(guān)系非常密切。窗體就像一個可以放置東西的桌面,可以根據(jù)任務(wù)的需要在窗體上放置各種各樣的組件。 從程序設(shè)計的角度來
3、看,一個窗體對應(yīng)一個存放源程序的單元文件。其中窗體展示的是程序運行時的操作界面,而單元文件定義了窗體中所有組件的對象(包括屬性、事件和方法)以及對它們的操作。3 從視覺的角度來看,窗體可以包含很多組件的對象。但這并不是說窗體類包含了組件類型或者說窗體是組件的父類。事實上窗體和組件都是從TComponent類繼承下來的,它們都有公共的TObject祖先類。窗體類是從TComponent類派生的TForm類,所以可以將窗體看成一個特殊的組件,如Panel組件。Delphi中的所有組件都被封裝在可視化組件庫VCL中,集成開發(fā)環(huán)境中的組件面板就是VCL的實現(xiàn)。 在窗體中進行可視化程序設(shè)計時要涉及到VC
4、L組件面板中的組件和在該窗體對應(yīng)的單元文件上編寫代碼,這種關(guān)系可通過第2章的圖2-1來表示:在組件面板上選擇需要的組件放在窗體Form上;在對象查看器中設(shè)置該組件對象的屬性;窗體的單元文件會自動生成窗體中的組件對象的信息以及在單元文件中編寫程序處理代碼。44.2 窗體基本控件及其應(yīng)用 除窗體之外,還有種類繁多、性能各異的其它組件,它們都是Delphi應(yīng)用程序設(shè)計和實現(xiàn)的基本單元。學(xué)習(xí)Delphi程序設(shè)計,首先要學(xué)會常用組件的使用方法。在窗體中可以添加各種對象,進行窗體的界面設(shè)計。向窗體中添加對象的方法是,首先單擊相應(yīng)組件板的控件圖標,接著在窗體的適當位置按下鼠標左鍵并拖動鼠標,即可畫出相應(yīng)的對
5、象。5 在Delphi中,組件是可視化編程的基礎(chǔ),程序員用它來設(shè)計用戶界面,并且給予應(yīng)用程序一些非可視化功能。對于兩種不同類型的Delphi開發(fā)者應(yīng)用程序開發(fā)者(Application Developer)和可視化組件編寫者,組件有不同的含義。對于應(yīng)用程序開發(fā)者來說,組件就是從組件面板上得到的一個實實在在的事物,一般被放在窗口上。應(yīng)用程序開發(fā)者可以修改其屬性并且建立事件的處理過程,從而得到組件的外觀和內(nèi)在的作用。這個過程的完成,是應(yīng)用程序開發(fā)者工作的核心和主要工作內(nèi)容。對于組件編寫者來說,組件只是對象PASCAL語言中的對象,這些對象可以封裝系統(tǒng)提供的行為元素(包括Windows的標準組件),
6、一個組件的代碼構(gòu)成了該組件的全部行為。 由于Delphi提供了豐富且功能強大的組件,程序員就可以集中精力去創(chuàng)建應(yīng)用程序,而不必從頭開始去創(chuàng)建GUI、數(shù)據(jù)庫功能和程序之間的通信。程序員更注重的是程序整體的規(guī)劃和設(shè)計,而不再是怎樣編寫一句句的重復(fù)和冗長的代碼。一切都是這么簡單,大體的框架總是已經(jīng)搭好了,緊接著的任務(wù)就是根據(jù)不同的需要把它們組裝起來。如圖4-1所示的是Delphi的組件面板。6圖4-1 Delphi的組件面板4.2.1 標簽和編輯框 在開發(fā)基于對話框應(yīng)用程序的時候,標簽和編輯框組件是利用相當廣泛的組件。標簽和編輯框的使用是任何一個程序員必須掌握的知識,下面將介紹標簽和編輯框的使用方法
7、 71 Label標簽 標簽是Delphi中最簡單的組件,用于顯示字符串,通常顯示的是文字說明信息。在Windows程序設(shè)計過程中,標簽(Label)是常用的組件之一,它是從TCustomLabel繼承下來的,而TCustomLabel又是從TGraphicControl繼承下來的。 由于Label是一個典型的非窗口組件,它沒有窗口句柄,也不會有輸入焦點,但可以把它與標注的組件關(guān)聯(lián),以后,當用戶按下這個標簽的加速字符時(按鼠標無效),輸入焦點將自動移到關(guān)聯(lián)的組件上。也就是在標簽中設(shè)置熱鍵,在Caption屬性值中輸入含有“&”的字符串,當用戶使用“Alt+關(guān)鍵字母”時,將自動選中它所指向的對象
8、。方法是設(shè)置Label部件的FocusControl屬性,選擇與它關(guān)聯(lián)對象的對象名。 標簽的屬性很多,下面介紹一些常用屬性。 8 Alinment屬性:設(shè)置標簽上的文字在水平方向上的對齊方式,可以設(shè)為taLeftJustify(居左)、taRighJustify(居右)和bcCenter(居中)。 AutoSie屬性:設(shè)置標簽是否自動隨文本的變化而改變大小。如果這個屬性設(shè)為True,標簽的尺寸隨著文字的尺寸和字體自動調(diào)整。如果設(shè)為False,標簽的尺寸不變,如果輸入的文字太大將被剪裁。 FocusControl屬性:設(shè)置按下熱鍵時,獲得焦點的控件名,用于指定關(guān)聯(lián)的組件。TLabel的這種高級用
9、法通常用在“Open”、“Save”等對話框中。 Layout屬性:設(shè)置標簽上的文字在垂直方向上的對齊方式,可以設(shè)為tlTop(靠上)、tlCenter(居中)和tlBotton(靠下)3個值。 ShowAccelChar屬性:決定是否將&作為熱鍵字符的標記。9如果這個屬性設(shè)為True,加速字符以字母加下劃線的形式顯示,如果設(shè)為False,將不顯示加速字符,F(xiàn)ocusControl屬性也無效。 Transparent屬性:一般情況下,標簽顯示在組件的旁邊,但有時候需要把標簽加在組件上。例如,要在一個地圖上標注某個地名,這時候可以把Transparent屬性設(shè)為True,這樣,標簽就是透明的,不
10、會蓋住地圖上的內(nèi)容。2 編輯框 在應(yīng)用程序的界面上,往往需要用戶輸入一些文字,或者以一定的格式將文本顯示給用戶時,可通過編輯框組件來實現(xiàn)。編輯框是個相當靈活的輸入工具,可以輸入單行文本,也可以輸入多行文本,還具有根據(jù)控件的大小自動換行以及添加基本格式的功能。10 在Delphi中,編輯組件包括以下一些組件:Edit組件,它可以顯示和編輯單獨的一行文本,Edit組件位于組件面板的【Standard】頁中;Memo組件,它可以顯示、編輯多行文本,Memo組件也位于組件面板的【Standard】頁中;MaskEdit組件,該組件可以顯示、編輯具有指定格式的文本,如6位數(shù)字的郵政編碼、固定格式的電話號
11、碼等,這個組件位于【Additional】頁上;RichEdit組件,這個組件可以顯示、編輯具有豐富文本格式(RichTextFormat)的文件,如.rtf文件等,它位于【W(wǎng)in32】頁上。 下面首先介紹Edit組件。它的作用是讓用戶輸入單行文字,用戶在組件中輸入字符時,Text屬性總是保持為最新內(nèi)容,并將觸發(fā)OnChange事件。這里介紹的是TCustomEdit的屬性、事件和方法(TEdit沒有自己的屬性、事件和方法)。11 AutoSelect屬性:設(shè)置當Edit組件獲得輸入焦點時,是否自動選中編輯框中的所有文本。如果這個屬性設(shè)為True,當輸入焦點移進編輯框時,編輯框的文字自動加亮(
12、表示被全部選擇),此時按下任意一個鍵,編輯框原有的文字將被剛鍵入的字符代替。 AutoSize屬性:確定編輯框的高度是否隨文本的高度的改變而改變。如果這個屬性設(shè)為True,編輯框的高度自動適應(yīng)輸入文字的字體的高度(編輯框的BorderStyle屬性為bsSingle時才有效)。 BorderStyle屬性:設(shè)置編輯框的邊框類型,默認是bsSingle,表示邊框是單細線。如果設(shè)為bsNone,表示沒有邊框。這個屬性與Ctrl3D屬性配合使用,可以產(chǎn)生不同的視覺效果。 HideSelection屬性:如果這個屬性設(shè)為True,當輸入焦點從編輯框移走時,編輯框內(nèi)原先選擇的內(nèi)容不再保持選擇狀態(tài)。12
13、MaxLength屬性:設(shè)置可輸入文字的長度,設(shè)為0表示無限制。即使MaxLength屬性設(shè)得很小,編輯框中原有的內(nèi)容也不會被裁斷。 Modified屬性:如果自上次Modified屬性被設(shè)為False以來編輯框的文字發(fā)生了變化,這個屬性將返回True。 Passwordchar屬性:默認為#0,表示用戶鍵入什么字符編輯框顯示什么字符,如果這個屬性設(shè)為其他字符,用戶鍵入的字符將轉(zhuǎn)換成設(shè)定的符號,如果編輯框用于鍵入口令時,最好把 Passwordchar屬性設(shè)為*,這樣別人就看不到所鍵入的字符。SLMIS系統(tǒng)用戶登錄口令文本框的Passwordchar屬性設(shè)為了*。13 ReadOnly屬性:如
14、果這個屬性設(shè)為True,表示編輯框是只讀的,用戶不能修改編輯框的內(nèi)容。不過這個屬性往往給人錯覺,因為即使把ReadOnly屬性設(shè)為True,仍然可以在編輯框中移動光標,好像能夠編輯一樣。因此,建議把編輯框的Enable屬性設(shè)為False。 編輯框的方法在實際的編程過程中經(jīng)常用到,表4-1所示編輯框的常用方法。 表4-1 編輯框的常用方法14方 法 說 明 Clear 清空編輯框中的文本內(nèi)容 ClearSelection 刪除編輯框中被選中的文本內(nèi)容 GetTextLength 返回編輯框中的文本字符串的長度 ClearUndo 把Undo緩沖區(qū)中的內(nèi)容清掉,這樣就不能撤消剛剛所做的修改 Cop
15、yToClipboard 把編輯框中選擇的內(nèi)容復(fù)制到剪貼板中 CutToClipboard 把編輯框中選擇的內(nèi)容剪切到剪貼板中 GetSelTextBuf 把編輯框中選擇的內(nèi)容復(fù)制到第一個參數(shù)指定的緩沖區(qū)中,并返回復(fù)制的字符數(shù)PasteFormClipboard 把剪貼板中的內(nèi)容粘貼到編輯框中 SelectAll 選擇編輯框中的全部內(nèi)容 SetSelTextBuf 用Buffer參數(shù)指定的內(nèi)容替換編輯框中選擇的內(nèi)容 Undo 撤消用戶剛剛在編輯框中所做的修改 15 下面介紹編輯框組件的一些常用事件。 OnChange事件:當編輯框中的內(nèi)容發(fā)生改變時,將觸發(fā)這個事件。雖然在Edit組件中輸入字符
16、會被觸發(fā)該事件,但是要在編輯框中實現(xiàn)過濾字符的功能,最好處理編輯框的OnKeyPress事件??梢岳眠@一事件在輸入的時候做一些其他的事,如改變標簽的顯示字符。 OnDblClick事件:當編輯框被雙擊時觸發(fā)此事件。 OnKeyPress事件:當用戶在鍵盤上按下單個字符時觸發(fā)這個事件。此事件經(jīng)常用來過濾用戶輸入的字符。SLMIS系統(tǒng)有許多文本框都將非數(shù)字字符過濾掉了,程序如下: 16procedure Tdfmbasehousenew.Edit1KeyPress(Sender: TObject;var Key: Char);begin if not (key in0.9,#8) then ke
17、y:=#0;/過濾非數(shù)字字符,只允許輸入09這10個數(shù)字以及鍵盤上的退格鍵“”end; 掩碼編輯框(MaskEdit組件),與編輯框組件大部分的屬性和方法都是類似的,主要區(qū)別在于它的數(shù)據(jù)輸入有格式要求,常用來定制想要的數(shù)據(jù)格式。17 MaskEdit組件最重要的屬性是EditMask,如圖4-2所示是設(shè)置輸入查詢條件區(qū)、棟文本框EditMask屬性時的界面。屏蔽字符串用分號隔成了三部分。第一部分是屏蔽本身,它確定了字符串的格式;第二部分指明了屏蔽字符是否作為數(shù)據(jù)的一部分,其中0表示屏蔽字符不作為數(shù)據(jù)的一部分,1表示屏蔽字符作為數(shù)據(jù)的一部分。第三部分指明了用什么樣的字符代替未輸入的字符??梢钥吹?/p>
18、,系統(tǒng)以及提供了一系列的標準屏蔽格式,有phone和date等等。當輸入的數(shù)據(jù)不符合要求時,編輯框?qū)⒉唤邮茌斎搿?8圖4-2 MaskEdit組件的EditMask屬性設(shè)置Memo組件的文本內(nèi)容可以是多行顯示,其行號是從0開始計算的。它的很多屬性和方法都與Edit編輯框類似,不同之處是它提供了一個Lines屬性,通過這個屬性可以調(diào)用一系列方法。Lines常用方法介紹如下:19l 增加一行并返回新行的行號: Memo1.Lines.Add(new string);或 Memo1.Lines.Add(edit1.Text);l 增加一行但不返回新行的行號: Memo1.Lines.Append(n
19、ew string);或Memo1.Lines. Append (edit1.Text);l 刪除第三行:Memo1.Lines.Delete(2);l在第三行插入某一行內(nèi)容:Memo1.Lines.Insert(2,new string);l 把第三行移到第五行:Memo1.Lines.Move(2,4);3標簽和編輯框示例 前面介紹了標簽和編輯框組件的一些基本知識,下面通過一個實例來體會一下這些組件的應(yīng)用。其創(chuàng)建步驟如下。20 第一步:在窗體上添加3個Edit組件、1個MaskEdit組件、1個Memo組件、4個Label標簽、7個位圖按鈕。 第二步:添加事件響應(yīng)代碼。每一個編輯框可以分別
20、輸入內(nèi)容,然后按下【】按鈕就可以把對應(yīng)編輯框的內(nèi)容傳遞給Memo組件。【】按鈕的OnClick事件的代碼如下:procedure TForm1.BitBtn1Click(Sender: TObject);begin if edit1.text then Memo1.Lines.Add(edit1.text); /將edit1文本框中的內(nèi)容遞給memo1組件end;procedure TForm1.BitBtn4Click(Sender: TObject);beginif MaskEdit1.text then Memo1.Lines.Add(MaskEdit1.text); /將掩碼編輯框Ma
21、skEdit1的內(nèi)容遞給memo1組件end;21當按下【確定】位圖按鈕時,把所有不為空的編輯框內(nèi)容遞給memo1組件procedure TForm1.BitBtn9Click(Sender: TObject);begin if edit1.Text then Memo1.Lines.Add(edit1.text); if edit2.Text then Memo1.Lines.Add(edit2.text); if edit3.Text then Memo1.Lines.Add(edit3.text); if MaskEdit1.Text then Memo1.Lines.Add(MaskE
22、dit1.text); /向memo1中添加編輯框中的文本end;22當按下【取消】位圖按鈕時,把memo1中的文本清空。procedure TForm1.BitBtn6Click(Sender: TObject);begin Memo1.Lines.Clear; /清除memo1中的文本end;第三步:運行程序。程序代碼添加完畢,可以編譯、鏈接并運行程序,程序的運行結(jié)果如圖4-3所示。 圖4-3 程序運行結(jié)果 234.2.2 按鈕和對話框在程序設(shè)計中,按鈕類組件是一種實現(xiàn)人機交互的最常用的組件,都能響應(yīng)鍵盤和鼠標事件,用來執(zhí)行某一功能。使用對話框,可以實現(xiàn)一些簡單信息的輸入和輸出。1按鈕以下
23、介紹幾種常用的按鈕類組件。(1) Button組件按鈕Button組件位于【Standard】頁上,主要用來響應(yīng)鼠標的單擊事件。在程序運行時當用戶用鼠標單擊窗體中的該組件對象時,或是該組件對象處于輸入焦點狀態(tài)(按鈕周圍有一個虛線框)按下Enter鍵時,該組件對象的單擊事件處理過程被執(zhí)行。Button組件最常用的屬性是Caption屬性,用于顯示在Button組件上的文本內(nèi)容,最常用的事件是OnClick事件。 24(2) BitBtn組件按鈕 BitBtn組件也是一個按鈕對象,它在組件面板中的【Additional】頁上,作用與Button組件基本相似,只是它在組件上顯示了一個圖標,使窗口界面
24、看起來更美觀。它的幾個常用屬性如下。 Kind屬性:設(shè)置位圖按鈕組件上顯示的圖標??梢允褂迷摻M件指定的默認圖標,也可以使用自己通過Image Editor制作的圖標,此時Kind屬性要設(shè)置為bkCustom。 Glyph屬性:單擊該屬性旁邊的省略號按鈕將打開Picture Editor對話框,通過它可加載圖像,加載的位圖將自動顯示在按鈕上。(3) SpeedButton組件按鈕 SpeedButton組件也稱為加速按鈕或彩色按鈕,它可以顯示圖像和文本,它的屬性與BitBtn組件類似,并且也在組件面板中的【Additional】頁上,是進行工具25條快速設(shè)計的理想部件。它只有一個位圖,沒有標題。
25、(4) CheckBox組件按鈕 CheckBox組件位于【Standard】頁上,該組件主要用來決定是否選取某項內(nèi)容。可將多個CheckBox組件作為一組與GroupBox一起使用,用來提供一組相關(guān)選項的選取,它有以下常用屬性。 Alignment屬性:用來決定組件的標簽放在哪一邊。默認值為taRightJustify,此時CheckBox組件的標簽在右邊;屬性值為taLeftJustify時標簽位于左邊。 Check屬性:用來判斷CheckBox組件是否被選取。State屬性:用來判斷CheckBox組件當前的狀態(tài)。26(5) RadioButton組件按鈕RadioButton組件位于【
26、Standard】頁上。此組件一般不單獨使用,通常是多個這樣的組件作為一組,在同一組中,同一時刻只能選中一個按鈕,其余按鈕自動處于非選中狀態(tài)。2 對話框?qū)υ捒蚴怯脩襞c應(yīng)用程序之間交換信息的最佳途徑之一。(1) 對話框函數(shù)與對話框過程使用對話框函數(shù)或過程可以得到Delphi的內(nèi)部對話框,這種方法具有操作簡單及快速的特點。ShowMessage()過程:顯示一個最簡單的對話框,以應(yīng)用程序的執(zhí)行文件名作為標題,為在對話框中出現(xiàn)的文本,對話框中只含一個“OK”按鈕,單擊該按鈕對話框即關(guān)閉并返回,這對于開發(fā)者而言,調(diào)試程序是非常有用的。ShowMessageFmt(,)過程:與ShowMessage過程
27、的功能基本相同,只是參數(shù)為格式化了的字符串,與配合,形成顯示在對話框中的信息。27 MessageDlg與MessageDlgPos函數(shù)可以顯示一個信息對話框,并等待用戶的響應(yīng)。 CreateMessageDialog函數(shù)生成一個信息框窗體,可以在程序中多次使用ShowModal方法調(diào)用。InputBox與InputQuery函數(shù)可以顯示一個供用戶輸入的對話框。(2) 標準對話框 OpenDialog組件:選擇文件的對話框,可以用它來瀏覽和選擇文件。單擊Filter屬性后的“”,在彈出的Filter Editor界面上編寫Open Dialog對話框能夠顯示和打開的文件類型。屬性得到被選中的文
28、件的名字。 SaveDialog組件:用于以給定的文件名保存文件。284.4 菜單設(shè)計 隨著Windows操作系統(tǒng)風(fēng)行世界,各種基于Windows的應(yīng)用程序及各類娛樂軟件也日益為人們所熟悉。這些軟件的共同特點之一就是大量使用不同的菜單和各種工具欄,因而菜單是應(yīng)用系統(tǒng)的重要組成部分之一,它一般由菜單欄和下拉菜單組成,如Delphi的系統(tǒng)集成環(huán)境中的菜單欄。 在Delphi中可使用組件欄和菜單設(shè)計器快速建立自己的菜單。實際應(yīng)用中,菜單可分為兩種基本類型:主菜單(mainmenu)和彈出式菜單(popupmenu)。主菜單一般稱為菜單欄,其中包括一個或多個選擇項稱為菜單項,當單擊一個菜單項時,包含子
29、菜單項的列表即被打開;彈出式菜單將在下一節(jié)中講解。主菜單組件和彈出式菜單組件都是不可見組件 294.4.1 建立菜單建立菜單的過程是在列出菜單的組成,然后在“菜單編輯器”窗口按照菜單組成進行設(shè)計,設(shè)計完后,再把各菜單項與代碼連接起來。選擇組件欄中standard頁的mainmenu組件,并將其放在窗體容器中,即可產(chǎn)生主菜單項。按下列方法之一打開如圖4-8所示的菜單編輯器,并自動產(chǎn)生一個空菜單項。l 雙擊mainmenu組件。l 右鍵單擊mainmenu,在彈出的快捷菜單中選取menudesigner項。單擊mainmenu組件,并在對象監(jiān)視器中選items屬性,鼠標點擊“”。 30 圖4-8
30、菜單編輯器 菜單項屬性菜單編輯器 主菜單組件 311菜單編輯器屬性、事件和方法菜單是一個特殊的控件,其中的每一個菜單項也是一個控件,MenuItem菜單項組件的屬性見表4-11。 表4-11 MenuItem常用屬性32用鼠標單擊菜單項時,將產(chǎn)生OnClick事件。實際編程序時,這個事件是一定要響應(yīng)的。MenuItem菜單項組件的常用方法見表4-12。表4-12 MenuItem常用方法332添加菜單項打開菜單編輯器后,自動產(chǎn)生一個空菜單項,同時對象編輯器中提示輸入該菜單項的Caption屬性和Name屬性。例如將第1個菜單項的Caption屬性設(shè)置為“&F文件”,Name屬性設(shè)置為File1
31、,其顯示如圖4-9所示。則符號&后的字符為加速字符,或稱為加速鍵,即用戶在應(yīng)用程序中按Alt+F組合鍵執(zhí)行與菜單項執(zhí)行具有同樣的功能。加速字符在菜單上顯示為帶下劃線的字符。圖4-9 菜單項快捷鍵設(shè)置344.4.2 SLMIS主窗體菜單設(shè)計主窗體主要用于打開各個功能窗口,它包括菜單、功能按鈕、工具條和狀態(tài)顯示欄幾部分,菜單的處理程序可以實現(xiàn)顯示相應(yīng)功能窗體。在窗體上放一個主菜單組件,選定一個子菜單項,或者按鍵盤上的Insert鍵,或者選擇快捷菜單中的Insert項,輸入這個菜單項的Caption屬性和Name屬性(Name屬性值沒有輸入時可自動生成),這時,所選定的菜單項前添加一個空的菜單項,并
32、提示設(shè)置其Caption屬性。同時窗體左上方出現(xiàn)如圖4-10所示的菜單。在此只描述菜單項的功能實現(xiàn),菜單設(shè)置如表4-13所示。圖4-10 主窗體菜單設(shè)置35表4-13 菜單屬性表36各菜單項的處理程序如下:procedure TFrm_Slmismain.M_ networkClick(Sender: TObject);begin Application.CreateForm(Tfrm_netmana0, frm_netmana0); try frm_netmana0.showmodal; /顯示網(wǎng)絡(luò)管理窗口 finally frm_netmana0.release; end;end;初始設(shè)置
33、、更改口令、更改用戶、策劃管理、銷售前臺、合同制作、信息查詢、結(jié)算管理菜單項的處理程序與上述代碼一樣。procedure TFrm_Slmismain.M_jianqieClick(Sender: TObject);begin if ActiveControl is TcustomEdit then(ActiveControl as TcustomEdit).CutToClipboard; /實現(xiàn)剪切功能end;37procedure TFrm_Slmismain.M_fuzhiClick(Sender: TObject);beginif ActiveControl is TcustomEdi
34、t then(ActiveControl as TcustomEdit).CopyToClipboard; /實現(xiàn)復(fù)制功能end;procedure TFrm_Slmismain.M_niantieClick(Sender: TObject);beginif ActiveControl is TcustomEdit then(ActiveControl as TcustomEdit).pastefromClipboard; /實現(xiàn)粘貼功能end;procedure TFrm_Slmismain.M_suanchuClick(Sender: TObject);beginif ActiveCont
35、rol is TcustomEdit then(ActiveControl as TcustomEdit).clear; /實現(xiàn)刪除功能end;procedure TFrm_Slmismain.M_xianshitoolClick(Sender: TObject);beginM_xianshitool.Checked:=true;/菜單項的左邊將顯示一個鉤號標記,相當于一個復(fù)選框M_hidetool.Checked:=false;CoolBar1.Visible:=true; /工具欄可見38end;procedure TFrm_Slmismain.M_hidetoolClick(Sender
36、: TObject);beginM_hidetool.Checked:=true;M_xianshitool.Checked:=false;CoolBar1.Visible:=false; /隱藏工具條end;procedure TFrm_Slmismain.M_riliClick(Sender: TObject);beginapplication.CreateForm(Tfrm_rili, frm_rili);tryfrm_rili.showmodal; /顯示萬年歷窗口finallyfrm_rili.release;end;procedure TFrm_Slmismain.M_jisuan
37、qiClick(Sender: TObject);var ;begin(Application.EXEName); /當前路徑 if ( + calc.exe) then begin39shellexecute(handle,open,calc.exe,nil,pchar(),sw_show);/顯示系統(tǒng)計數(shù)器窗口 end else showmessage(計算器);end;procedure TFrm_Slmismain.M_printshezhiClick(Sender: TObject);begin PrinterSetupDialog1.Execute ; /利用打印控件顯示打印機設(shè)置
38、窗口end;procedure TFrm_Slmismain.M_guanyuClick(Sender: TObject);beginapplication.CreateForm(TAboutBox,AboutBox);tryAboutBox.showmodal; /顯示關(guān)于窗口finallyAboutBox.release;end;end;procedure TFrm_Slmismain.M_indexClick(Sender: TObject);begin40application.helpfile:=helpNEWWORLDHOUSE.HLP; /執(zhí)行已經(jīng)生成的幫助文件if (not w
39、inhelp(handle,helpNEWWORLDHOUSE.HLP,help_finder,0) then beginshowmessage(不能訪問幫助文件!);exit;end;end;414.5 彈出式菜單設(shè)計上一節(jié)介紹的菜單是一般菜單,它出現(xiàn)在窗口的頂部,當用戶執(zhí)行某一菜單項時,就必須把鼠標指針移動到窗口頂部,這對于常用的功能來說是很不方便的。本節(jié)介紹另一類型的菜單即彈出式菜單的設(shè)計,它能以更加靈活的方式為用戶提供更加便利的操作,當用戶在不同位置單擊某一鼠標鍵(一般為鼠標右鍵),則將顯示一組不同的菜單項,從而加快用戶的操作,所以彈出式菜單也稱為快捷菜單,該菜單的位置是在屏幕上“浮動
40、”的,根據(jù)鼠標的當前位置決定。所以說主菜單是固定的且有多組菜單項,彈出式菜單是活動的且只有一組菜單項。4.5.1 快捷菜單設(shè)計和TMainMenu控件一樣,TPopMenu控件也提供了菜單設(shè)計器,用于在設(shè)計期間建立菜單的結(jié)構(gòu),不過,由于快捷菜單的菜單項往往是動態(tài)變化的,因此,更多的工作是在運行期間操作菜單。同時它也是從TMenu對象繼承下來的,快捷菜單的每個項目都是一個TMenuItem對象,可以通過Items屬性來訪問菜單中的每一個項目。下面介紹TPopMenu的常用屬性和事件。42Alignment屬性:控制當用戶按下鼠標右鍵的時候快捷菜單的顯示位置。在默認的情況下,快捷菜單會出現(xiàn)在鼠標的
41、右下方,也就是說鼠標出現(xiàn)在快捷菜單的左上方。它可以設(shè)為以下值:l PaLeft:快捷菜單的左上角顯示在鼠標點的地方。l PaCenter:快捷菜單的頂部中間顯示在鼠標點的地方。l PaRight:快捷菜單的右上角顯示在鼠標點的地方。AutoPopup屬性:設(shè)置為True,那么當用戶在指定了PopMenu屬性的對象上單擊鼠標右鍵的時候,會自動彈出快捷菜單。否則需要調(diào)用Popup方法才能顯示出快捷菜單。MenuAnimation屬性:用于指定菜單命令在屏幕上展開的方式。PopupComponent屬性:用于多個組件使用同一個快捷菜單的情況,訪問這個屬性可以知道用戶是在哪個組件上按下了鼠標右鍵。同樣
42、,如果在程序中調(diào)用Popup()來彈出菜單,可以在調(diào)用之前把PopupComponent屬性設(shè)為想關(guān)聯(lián)的組件。OnPoput事件:快捷菜單的優(yōu)越性就在于彈出的菜單能夠根據(jù)鼠標右鍵所擊的對象的不同而變化。當程序調(diào)用Popup或者在AutoPopup屬性設(shè)為Ture的情況下用戶按下鼠標右鍵,就會觸發(fā)這個事件。這樣就有機會在彈出快捷菜單之前通過編程有選擇地顯示菜單項。 43要建立快捷菜單,首先在組件欄standard標簽中把PopupMenu組件添加到Form上,然后雙擊PopupMenu組件,彈出菜單編輯器,設(shè)計方法與MainMenu組件基本相同,鍵入菜單內(nèi)容,不同的是,在PopupMenu中只能
43、輸入一列內(nèi)容。輸入完畢之后,還需要回到Form窗口,在Form的修改的PopupMenu屬性中鍵入彈出式菜單的名字PopupMenu1,這樣,就完成了整個菜單的設(shè)計。運行程序,在窗口的任意位置單擊右鍵,都會彈出設(shè)計的菜單。4.5.2 SLMIS彈出式菜單應(yīng)用售樓管理系統(tǒng)中結(jié)算管理的入住瀏覽窗體應(yīng)用了彈出式菜單進行查找和排序。首先在窗體中建立PopupMenu菜單項,設(shè)計彈出式菜單的內(nèi)容如圖4-11所示。在入住情況顯示網(wǎng)格中單擊右鍵即可彈出該快捷菜單,因而網(wǎng)格Dbgrid1的PopupMenu屬性要為彈出式菜單的名字PopupMenu1。在程序運行時,當用鼠標選擇一個菜單項后,程序要對此進行響應(yīng)
44、。44圖4-11 彈出式菜單設(shè)置彈出式菜單各菜單項的處理程序如下:procedure Tdfm346.findClick(Sender: TObject);var dd:string;begindd:=inputbox(按合同查找,請輸入查找的合同號,020611);DBGrid1.DataSource.DataSet.Filter:=c_concode=+dd;DBGrid1.DataSource.DataSet.Filtered:=true;end;45procedure Tdfm346.paixuClick(Sender: TObject);begin with adoquery1 do
45、 begin close; sql.clear; sql.add(select * from jie_ruzhu); sql.add(order by c_concode); /以合同號為序打開入住信息表 try open; Except on EDBEngineError do Beginapplication.messagebox(數(shù)據(jù)庫打開錯!,open Error,MB_OKCANCEL+MB_DEFBUTTON1); exit; end; end; first; end; DBGrid1.Refresh ;end;46圖4-12 入住瀏覽彈出式菜單應(yīng)用用戶在入住情況顯示的表格中的任意
46、位置單擊鼠標右鍵,運行界面如圖4-12所示。 474.6 SLMIS中設(shè)計各窗體并設(shè)定各控件屬性SLMIS中共有十幾個窗體對象。前幾小節(jié)介紹了其中兩個窗體的設(shè)計細節(jié),此處再介紹兩個性質(zhì)不同的窗體,并分別說明各自的屬性及其設(shè)計方法。4.6.1 “新世界房屋銷售管理系統(tǒng)”主窗體設(shè)計這是SLMIS的主界面窗體,即無數(shù)據(jù)源窗體。一般數(shù)據(jù)庫應(yīng)用系統(tǒng)都是在這個窗體上申明版權(quán),說明其整體功能,當然應(yīng)該設(shè)計得美觀一些。這個窗體的設(shè)計形式如圖4-5所示,其運行形式如圖4-13所示。由于是無數(shù)據(jù)源窗體,所以可以直接在不同的組件板上逐個選取所需控件,安放在窗體中的合適位置處,進行窗體設(shè)計。48圖4-13 主窗體運行
47、界面窗體中共有二十五個組件。六個Label標簽組件、十一個SpeedButton加速按鈕、一個主菜單Menu組件、一個工具欄Coolbar組件、一個狀態(tài)欄Statusbar組件、一個計時器Timer組件、一個圖像Image組件、一個打印機設(shè)置PrinterSetupDialog組件、一個圖像列表Imagelist組件和一個TJanOutBar組件,全部放置在窗體主體上。49六個標簽組件位于窗體主體中部,標注其上的六個加速按鈕響應(yīng)單擊事件后,分別打開一個特定窗體對象,這也是用戶進入自己的工作模塊所經(jīng)常點擊的按鈕,另外還有五個加速按鈕在工具欄中。主菜單組件編輯的主菜單位于窗體頂部,具體設(shè)置見4.4
48、.4節(jié)。窗體中工具欄和狀態(tài)欄的設(shè)置見4.2.4節(jié),其中狀態(tài)欄的信息可利用計時器組件動態(tài)顯示,代碼見4.3.6節(jié)。圖像組件顯示了公司名稱及主題,打印機設(shè)置組件用于主菜單中打印機設(shè)置。在這些組件中,主菜單組件、計時器組件、圖像列表組件和打印機設(shè)置組件為非可視化組件,因而主窗體運行界面看不到這4個組件,其余均為可視化組件。表4-14列舉了六個加速按鈕的屬性及其說明。表4-14 加速按鈕組件主要屬性的設(shè)置50以下是加速按鈕的程序代碼,實質(zhì)上該代碼與主菜單功能模塊菜單項的處理程序是一樣的,只不過是應(yīng)用程序運行時,用戶可以通過不同的方式進入自己的工作模塊而已。procedure TFrm_Slmismai
49、n.SpeedButton6Click(Sender: TObject);beginapplication.CreateForm(Tfrm_chmain, frm_chmain);tryfrm_chmain.showmodal; /顯示市場策劃管理窗口如圖4-7所示finallyfrm_chmain.release;end;end;銷售前臺、合同制作、結(jié)算管理、經(jīng)理查詢這4個加速按鈕的代碼與上述代碼相同。procedure TFrm_Slmismain.SpeedButton11Click(Sender: TObject);beginclose; /關(guān)閉主窗體,退出應(yīng)用程序end;位于主界面窗體左邊的是TJanOutBar組件,它要結(jié)合圖像列表組件使用。如果Delphi的集成開發(fā)環(huán)境沒有TJanOutBar這一組件,則要安裝該組件,下面介紹TJanOutBar組件的安裝及其使用,其步驟如下:51圖4-14 Install Component對話框第一步:首先從安裝盤的第二張盤或者其它資料上找到TJanOutBar組件所需的六個資源文件,然后選擇Component組件菜單的Install Component安裝組件項,打開的Install Component對話框如圖4-14所示。第二步:單擊“ ”按鈕,則彈出如圖4-15所示的對話框,用于選擇資源
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年垃圾滲濾液深度處理設(shè)備行業(yè)跨境出海戰(zhàn)略研究報告
- 2025-2030年在線醫(yī)療投資與創(chuàng)業(yè)孵化器行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報告
- 聲學(xué)器件的音頻處理與多方通話考核試卷
- 2025-2030年新能源汽車出口市場拓展企業(yè)制定與實施新質(zhì)生產(chǎn)力戰(zhàn)略研究報告
- 2025-2030年復(fù)古風(fēng)格休閑服裝復(fù)興行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報告
- 2025-2030年可降解礦物餐具企業(yè)制定與實施新質(zhì)生產(chǎn)力戰(zhàn)略研究報告
- 2025-2030年戶外露營睡袋椅企業(yè)制定與實施新質(zhì)生產(chǎn)力戰(zhàn)略研究報告
- 2025-2030年按摩設(shè)備社區(qū)健康講座行業(yè)跨境出海戰(zhàn)略研究報告
- 2025-2030年復(fù)合調(diào)味肉類行業(yè)跨境出海戰(zhàn)略研究報告
- 2025-2030年手機防水防塵技術(shù)行業(yè)跨境出海戰(zhàn)略研究報告
- 新員工入職通識考試(中軟國際)
- 四星級酒店工程樣板房裝修施工匯報
- 圓翳內(nèi)障病(老年性白內(nèi)障)中醫(yī)診療方案
- 博士后進站申請書博士后進站申請書八篇
- 華為攜手深圳國際會展中心創(chuàng)建世界一流展館
- 2023版思想道德與法治專題2 領(lǐng)悟人生真諦 把握人生方向 第3講 創(chuàng)造有意義的人生
- 全過程工程咨詢服務(wù)技術(shù)方案
- GB/T 41509-2022綠色制造干式切削工藝性能評價規(guī)范
- 土木工程畢業(yè)設(shè)計(論文)-五層宿舍樓建筑結(jié)構(gòu)設(shè)計
- 青年卒中 幻燈
- 典型倒閘操作票
評論
0/150
提交評論