第十二章C++BuilderWin環(huán)境程式設(shè)計(jì)_第1頁(yè)
第十二章C++BuilderWin環(huán)境程式設(shè)計(jì)_第2頁(yè)
第十二章C++BuilderWin環(huán)境程式設(shè)計(jì)_第3頁(yè)
第十二章C++BuilderWin環(huán)境程式設(shè)計(jì)_第4頁(yè)
第十二章C++BuilderWin環(huán)境程式設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩50頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第十二章Win32環(huán)境程式設(shè)計(jì)這一章節(jié)可以說(shuō)是本書(shū)精華之一,Win32程式設(shè)計(jì)算是比較複雜的部分,但是我們以最簡(jiǎn)單的敘述帶領(lǐng)著大家進(jìn)入Win32程式設(shè)計(jì)的殿堂,讓你寫(xiě)出來(lái)的程式具有一定的水準(zhǔn)以上。若能將本章與下一章的技巧靈活運(yùn)用,更能讓大家寫(xiě)出高階的視窗程式。1第一頁(yè),共五十五頁(yè)。大綱12-1.檔案總管的介面12-2.標(biāo)頭控制元件12-3.進(jìn)度狀態(tài)顯示元件12-4.軌跡追蹤列12-5.上下控制元件12-6.日期時(shí)間12-7.熱鍵元件的使用(HotKey)12-8.常駐在SystemTray的程式本章習(xí)題2第二頁(yè),共五十五頁(yè)。12-1.檔案總管的介面提到Win32的程式設(shè)計(jì),最重要的範(fàn)例就是檔案總管。整個(gè)檔案總管都是使用Win32的介面來(lái)完成。而我們?cè)谶@一章以及下一章,也都會(huì)圍繞著檔案總管來(lái)介紹大部分內(nèi)容。下圖中就是檔案總管的介面,在這個(gè)介面裡,主要元件有ListView、TreeView、Splitter、以及StatusBar這四種VCL元件,SplitterTreeViewListViewStatusBar3第三頁(yè),共五十五頁(yè)。12-1.檔案總管的介面表單檢視元件(ListView)範(fàn)例12-1在範(fàn)例12-1,我們的介面相當(dāng)簡(jiǎn)單,除了一個(gè)輸入資料的介面外,就是一個(gè)ListView。除了提到這些可看見(jiàn)的VCL元件外,我們還有放入一個(gè)Popupmenu以及一個(gè)ImageList在這個(gè)範(fàn)例中。Popupmenu主要是提供滑鼠右鍵的功能選單,,而ImageList則是要提供一些Image給ListView使用。4第四頁(yè),共五十五頁(yè)。12-1.檔案總管的介面表單檢視元件(ListView)新增Column個(gè)數(shù)5第五頁(yè),共五十五頁(yè)。12-1.檔案總管的介面表單檢視元件(ListView)ViewStyle的不同大圖示(vsIcon)小圖示(vsSmallIcon)清單(List)詳細(xì)列表(Report)6第六頁(yè),共五十五頁(yè)。12-1.檔案總管的介面表單檢視元件(ListView)範(fàn)例12-1執(zhí)行結(jié)果7第七頁(yè),共五十五頁(yè)。12-1.檔案總管的介面樹(shù)狀檢視元件(TreeView)TreeView是目前檔案總管中的重要元件之一,在檔案總管中TreeView負(fù)責(zé)顯示從桌面開(kāi)始的所有樹(shù)狀結(jié)構(gòu)。在這一小節(jié)裡,我們將會(huì)利用三個(gè)範(fàn)例讓各位練習(xí)TreeView的各項(xiàng)使用實(shí)例。談到Tree的使用,就必須談到什麼是『根節(jié)點(diǎn)』、『父節(jié)點(diǎn)』、『子節(jié)點(diǎn)』、以及『葉節(jié)點(diǎn)』。根節(jié)點(diǎn)就是我們所謂的『root』,他是在整個(gè)Tree的最上方,以檔案總管來(lái)說(shuō),根節(jié)點(diǎn)就是『桌面』父節(jié)點(diǎn)就是這個(gè)節(jié)點(diǎn)的底下還有一個(gè)以上的節(jié)點(diǎn)子節(jié)點(diǎn)就是這個(gè)節(jié)點(diǎn)的上一層還有節(jié)點(diǎn)葉節(jié)點(diǎn)就代表這個(gè)節(jié)點(diǎn)已經(jīng)是這支樹(shù)的最後一個(gè)節(jié)點(diǎn)8第八頁(yè),共五十五頁(yè)。12-1.檔案總管的介面樹(shù)狀檢視元件(TreeView)範(fàn)例12-2:利用簡(jiǎn)單的程式來(lái)控制TreeView的各項(xiàng)動(dòng)作。我們主要是使用靜態(tài)的方式將一棵樹(shù)建立起來(lái)。這棵樹(shù)是利用BCB提供的介面去產(chǎn)生。9第九頁(yè),共五十五頁(yè)。12-1.檔案總管的介面樹(shù)狀檢視元件(TreeView)範(fàn)例12-2執(zhí)行結(jié)果10第十頁(yè),共五十五頁(yè)。12-1.檔案總管的介面樹(shù)狀檢視元件(TreeView)範(fàn)例12-3:在程式中建構(gòu)一個(gè)靜態(tài)的TreeView在範(fàn)例12-3,我們也是靜態(tài)產(chǎn)生Tree,但是這次我們不是從BCB的介面中產(chǎn)生,我們是從程式碼中產(chǎn)生。在範(fàn)例12-3的介面中,全部都跟範(fàn)例12-2一模一樣。程式中,我們宣告了三個(gè)TreeNode(兩個(gè)也可以),經(jīng)由這三個(gè)TreeNode之間的相互關(guān)係,我們完成了整顆樹(shù)的建立。在建樹(shù)的程式碼方面並不難,比較特別的就是要回到上一層我們使用的是『parent=parentParent』這樣的方法來(lái)取得上一層Node的記憶體位址。至於一開(kāi)始我們有保留Root的位址這只是一個(gè)習(xí)慣,因?yàn)閺腂CB中也是可以判斷哪個(gè)Node是Root,在範(fàn)例12-3中這樣做只是為了方便以及寫(xiě)程式者的習(xí)慣。11第十一頁(yè),共五十五頁(yè)。12-1.檔案總管的介面樹(shù)狀檢視元件(TreeView)範(fàn)例12-3:程式碼void__fastcallTForm1::FormCreate(TObject*Sender){TTreeNode*root,*parent,*son;root=TreeView1->Items->Add(NULL,"Root");root->ImageIndex=0;root->SelectedIndex=1;root->StateIndex=-1;parent=root;son=TreeView1->Items->AddChild(parent,"Parent1");son->ImageIndex=2;son->SelectedIndex=3;son->StateIndex=-1;parent=son;son=TreeView1->Items->AddChild(parent,"Son_1_1");son->ImageIndex=2;son->SelectedIndex=3;son->StateIndex=0;son=TreeView1->Items->AddChild(parent,"Son_1_2");son->ImageIndex=2;son->SelectedIndex=3;son->StateIndex=-1;parent=parent->Parent;son=TreeView1->Items->AddChild(parent,"Parent2");son->ImageIndex=2;son->SelectedIndex=3;son->StateIndex=-1;parent=son;son=TreeView1->Items->AddChild(parent,"Son_2_1");son->ImageIndex=2;son->SelectedIndex=3;son->StateIndex=-1;parent=son;son=TreeView1->Items->AddChild(parent,"Son_2_1_1");son->ImageIndex=2;son->SelectedIndex=3;son->StateIndex=1;parent=parent->Parent->Parent;son=TreeView1->Items->AddChild(parent,"Parent3");son->ImageIndex=2;son->SelectedIndex=3;son->StateIndex=-1;}12第十二頁(yè),共五十五頁(yè)。12-1.檔案總管的介面樹(shù)狀檢視元件(TreeView)範(fàn)例12-4:在程式中建構(gòu)一個(gè)TreeView,主要程式碼我們分成三個(gè)部分第一部份是動(dòng)態(tài)新增所需要的變數(shù)宣告,這部分是宣告在main.cpp的上方,歸類(lèi)於全域變數(shù)第二部份就是有關(guān)新增/刪除TreeNode部分的程式碼最後一部分就是一些瑣碎的功能,這些程式碼包括了展開(kāi)以及收合的功能,也有在StatusBar上面顯示目前的狀況,還有一個(gè)就是選擇要不要顯示Root。13第十三頁(yè),共五十五頁(yè)。12-1.檔案總管的介面樹(shù)狀檢視元件(TreeView)範(fàn)例12-4:程式碼宣告//宣告兩個(gè)變數(shù)..用來(lái)存放RootAddress和Node的AddressTTreeNode*root=NULL;TTreeNode*node=NULL;14第十四頁(yè),共五十五頁(yè)。12-1.檔案總管的介面樹(shù)狀檢視元件(TreeView)範(fàn)例12-4:程式碼動(dòng)態(tài)新增Nodevoid__fastcallTForm1::N1Click(TObject*Sender){//新增一個(gè)Node,在新增的時(shí)候會(huì)自動(dòng)判斷是不是新增Root,在新增的時(shí)候利用InputQuery來(lái)當(dāng)作輸入介面

AnsiStringBuf;if(root==NULL){//如果現(xiàn)在root還是NULL的話..表示要新增一個(gè)root

if(InputQuery("輸入","請(qǐng)輸入TreeNode的名稱(chēng)",Buf)){//使用InputQuery當(dāng)作輸入介面

root=TreeView1->Items->AddChild(NULL,Buf);//將新增的Node加入到TreeView中

root->ImageIndex=0;root->SelectedIndex=1;root->StateIndex=-1;//設(shè)定該Node的一些基本屬性

StatusBar1->SimpleText="新增Root節(jié)點(diǎn)";//在StatusBar顯示目前的運(yùn)作情況

TreeView1->AlphaSort();//新增之後利用AlphaSort對(duì)整個(gè)Tree排序}}else{//新增一般的Node//必須得先選一個(gè)node才能繼續(xù)產(chǎn)生Child,不然如果沒(méi)有Parent那來(lái)的Childif(TreeView1->Selected!=NULL){//使用InputQuery當(dāng)作輸入介面

if(InputQuery("輸入","請(qǐng)輸入TreeNode的名稱(chēng)",Buf)){//將新增的Node加入到TreeView中

node=TreeView1->Items->AddChildFirst(TreeView1->Selected,Buf);

node->ImageIndex=2;node->SelectedIndex=3;node->StateIndex=-1;//設(shè)定該Node的一些基本屬性

StatusBar1->SimpleText="新增一個(gè)Node";//在StatusBar顯示目前的運(yùn)作情況

TreeView1->AlphaSort();//新增之後利用AlphaSort對(duì)整個(gè)Tree排序}}}}15第十五頁(yè),共五十五頁(yè)。12-1.檔案總管的介面樹(shù)狀檢視元件(TreeView)範(fàn)例12-4:程式碼動(dòng)態(tài)刪除Nodevoid__fastcallTForm1::N2Click(TObject*Sender){

if(TreeView1->Selected!=NULL){//如果有Node被選取..也選擇要?jiǎng)h除才執(zhí)行if(TreeView1->Selected==root){//判斷是不是RootTreeView1->Selected->Delete();root=NULL;//如果是root被刪除..要將root的point設(shè)成nullStatusBar1->SimpleText="刪除Root節(jié)點(diǎn)";}else{TreeView1->Selected->Delete();StatusBar1->SimpleText="刪除一個(gè)Node";}}}16第十六頁(yè),共五十五頁(yè)。12-1.檔案總管的介面樹(shù)狀檢視元件(TreeView)SortAlphaSort:根據(jù)我們每個(gè)Node的Caption中的值去做排序CustomSort:讓我們自己寫(xiě)函式去做排列SortTypestBoth:當(dāng)Date或是Text有任何一種改變時(shí)就重新SortstDate:當(dāng)Node的資料改變時(shí)就重新Sort一次stNone:永遠(yuǎn)不排序stText:當(dāng)Node的Text改變時(shí)重新Sort17第十七頁(yè),共五十五頁(yè)。12-1.檔案總管的介面分隔元件(Splitter)分隔元件最主要的功能就是讓兩個(gè)元件在你拉動(dòng)的時(shí)候自動(dòng)分配元件的大小。例如在檔案總管中,我們可以將游標(biāo)停放在TreeView和ListView的中間,接著游標(biāo)就會(huì)變成一個(gè)雙箭頭的游標(biāo),然後我們就可以按著滑鼠的左鍵左右移動(dòng)滑鼠,這時(shí)候TreeView和ListView的視窗會(huì)隨著滑鼠的移動(dòng)自動(dòng)改變大小。拉動(dòng)之後可以自動(dòng)調(diào)整大小18第十八頁(yè),共五十五頁(yè)。12-1.檔案總管的介面狀態(tài)列元件(StatusBar)顧名思義就是將一些訊息顯示在這個(gè)Bar上面,在檔案總管中就是在檔案總管畫(huà)面的最下方。範(fàn)例12-6StatusBar基本應(yīng)用void__fastcallTForm1::Button1Click(TObject*Sender){StatusBar1->SimpleText="你剛剛按下了Button1";}//void__fastcallTForm1::Button2Click(TObject*Sender){StatusBar1->SimpleText="你剛剛按下了Button2";}//void__fastcallTForm1::Button3Click(TObject*Sender){StatusBar1->SimpleText="你剛剛按下了Button3";}//void__fastcallTForm1::Edit1Change(TObject*Sender){StatusBar1->SimpleText="你剛剛修改了Edit1";}//void__fastcallTForm1::Edit2Change(TObject*Sender){StatusBar1->SimpleText="你剛剛修改了Edit2";}19第十九頁(yè),共五十五頁(yè)。12-1.檔案總管的介面狀態(tài)列元件(StatusBar)範(fàn)例12-7:StatusBar進(jìn)階應(yīng)用使用一個(gè)按鈕、一個(gè)Edit、一個(gè)Image、以及一個(gè)StatusBar。在StatusBar上總共有四個(gè)欄位,跟上一個(gè)範(fàn)例不一樣。在StatusBar上面按下滑鼠右鍵,選擇『PanelsEditor』會(huì)出現(xiàn)StatusBar的Panel編輯畫(huà)面。20第二十頁(yè),共五十五頁(yè)。12-1.檔案總管的介面狀態(tài)列元件(StatusBar)範(fàn)例12-7:程式碼(PartI)void__fastcallTForm1::Button1MouseDown(TObject*Sender,

TMouseButtonButton,TShiftStateShift,intX,intY)

{StatusBar1->Panels->Items[0]->Text="你按下了Button1";}//void__fastcallTForm1::Button1MouseUp(TObject*Sender,TMouseButtonButton,TShiftStateShift,intX,intY)

{StatusBar1->Panels->Items[0]->Text="你沒(méi)按下Button1";}//void__fastcallTForm1::Edit1Change(TObject*Sender)

{StatusBar1->Panels->Items[1]->Text="Edit1的文字是

:"+Edit1->Text;}//void__fastcallTForm1::FormDragDrop(TObject*Sender,TObject*Source,intX,intY)

{//設(shè)定Form上的DragDrop的Function,主要是用來(lái)讓Image在Form上可以做Drag的動(dòng)作

TImage*buf=(TImage*)Source;buf->Left=X;buf->Top=Y;}21第二十一頁(yè),共五十五頁(yè)。12-1.檔案總管的介面狀態(tài)列元件(StatusBar)範(fàn)例12-7:程式碼(PartII)void__fastcallTForm1::FormDragOver(TObject*Sender,TObject*Source,

intX,intY,TDragStateState,bool&Accept)

{Accept=true;//讓Form可以被允許DragOver}//void__fastcallTForm1::Image1StartDrag(TObject*Sender,TDragObject*&DragObject)

{StatusBar1->Panels->Items[2]->Text="正在拉圖片";//當(dāng)啟動(dòng)Drag的時(shí)候顯示

"正在拉圖片"}//void__fastcallTForm1::Image1EndDrag(TObject*Sender,TObject*Target,

intX,intY)

{StatusBar1->Panels->Items[2]->Text="沒(méi)在拉圖片";//結(jié)束Drag的時(shí)候顯示

"沒(méi)在拉圖片"}//void__fastcallTForm1::FormMouseMove(TObject*Sender,TShiftStateShift,

intX,intY)

{//利用Form上面的MouseMove事件抓取滑鼠游標(biāo),並且在StatusBar上將游標(biāo)顯示出來(lái)

AnsiStringBuf;Buf="("+IntToStr(X)+","+IntToStr(Y)+")";StatusBar1->Panels->Items[3]->Text="滑鼠游標(biāo)

(X,Y):"+Buf;}22第二十二頁(yè),共五十五頁(yè)。12-1.檔案總管的介面狀態(tài)列元件(StatusBar)範(fàn)例12-7執(zhí)行結(jié)果23第二十三頁(yè),共五十五頁(yè)。12-2.標(biāo)頭控制元件標(biāo)頭控制元件所提供的功能,一般來(lái)說(shuō)我們都會(huì)直接利用ListView來(lái)完成,而不是單純的去拉一個(gè)標(biāo)頭控制元件下來(lái)用。因?yàn)镠eaderControl一般都是用來(lái)區(qū)分是不是同類(lèi)型的資料,例如在ListView中我們顯示檔案的話,檔名就會(huì)集體放在檔名那一個(gè)Column,檔案大小也都會(huì)放在同一個(gè)Column……等,所以才會(huì)說(shuō)大部分的使用都是利用ListView來(lái)完成。但是如果想要在Header部分加上一些圖片等花俏的功能,還是得使用HeaderControl24第二十四頁(yè),共五十五頁(yè)。12-3.進(jìn)度狀態(tài)顯示元件我們?cè)诎惭b應(yīng)用程式(或是使用一些應(yīng)用程式)的過(guò)程中,常常會(huì)有一條光棒跑出來(lái)告訴我們目前工作正進(jìn)行了多少百分比,這個(gè)元件我們稱(chēng)做進(jìn)度狀態(tài)列元件。進(jìn)度狀態(tài)列元件可以給使用程式的使用者非常高層次的訊息(可以馬上了解現(xiàn)在的情況),也可以讓使用者預(yù)估時(shí)間,也可以增加整個(gè)程式UserFriendly的程度。在BorlandC++Builder6中,有『ProgressBar』、『Cgauge』這兩個(gè)元件可以用來(lái)表示目前的完成度為何,其中ProgressBar位在Win32的頁(yè)面中,而Cgauge在Sample這一頁(yè)裡。25第二十五頁(yè),共五十五頁(yè)。12-3.進(jìn)度狀態(tài)顯示元件範(fàn)例12-9:ProgressBar&CGauge操作實(shí)例ProgressBar重要屬性說(shuō)明屬性說(shuō)明MaxProgressBar跑到100%時(shí)的那個(gè)值。MinProgressBar在0%時(shí)的那個(gè)值。Orientation有Horizontal和Vertical兩種不同的屬性值,主要是用來(lái)決定ProgressBar是要往右增加或是往上增加。Position決定目前ProgressBar的光棒的所在位置。Smooth決定移動(dòng)的光棒要用平滑的模式或是一格一格的模式呈現(xiàn)出來(lái)。26第二十六頁(yè),共五十五頁(yè)。12-3.進(jìn)度狀態(tài)顯示元件範(fàn)例12-9:ProgressBar&CGauge操作實(shí)例CGauge重要屬性說(shuō)明屬性說(shuō)明BackColorCGauge在顯示ProgressBar的地方的顏色Color除了ProgressBar的地方的顏色。如果ProgressBar不是標(biāo)準(zhǔn)的長(zhǎng)條狀,就有可能會(huì)需要用到Color這個(gè)屬性。ForeColorProgressBar本身的顏色。KindCGauge的表示種類(lèi),有『HorizontalBar』、『Needle』、『Pie』、『Text』、以及『VerticalBar』這五種不同的表示方法。MaxValueProgressBar跑到100%時(shí)的那個(gè)值。MinValueProgressBar在0%時(shí)的那個(gè)值。Progress決定目前ProgressBar的光棒的所在位置。跟ProgressBar這個(gè)元件的Position屬性功能一樣。ShowText決定是否要在ProgressBar上面顯示出目前完成的百分比數(shù)字。27第二十七頁(yè),共五十五頁(yè)。12-3.進(jìn)度狀態(tài)顯示元件範(fàn)例12-9:ProgressBar&CGauge操作實(shí)例執(zhí)行結(jié)果28第二十八頁(yè),共五十五頁(yè)。12-3.進(jìn)度狀態(tài)顯示元件不管在執(zhí)行ProgressBar或是CGauge的時(shí)候,整個(gè)程式幾乎都陷入了停頓狀態(tài),也就是停止回應(yīng)﹔反過(guò)來(lái)說(shuō),當(dāng)我們需要使用到ProgressBar或是CGauge的功能時(shí),通常也是因?yàn)檎谂芤粋€(gè)非常大的迴圈?,F(xiàn)在有一個(gè)問(wèn)題產(chǎn)生了,不管是在跑一個(gè)非常大的迴圈(CPU使用率100%)或是跑Progress的元件,都會(huì)讓程式停止回應(yīng),這時(shí)候該怎麼辦?我們?cè)谶@邊將提出一個(gè)簡(jiǎn)單的解決方案『ApplicationProcessMessages()』這個(gè)函式,這個(gè)函式可以讓我們的介面程式在執(zhí)行中取得一些CPUTime,也因?yàn)檫@樣,我們的介面就不會(huì)再發(fā)生『沒(méi)有回應(yīng)』的情況了。29第二十九頁(yè),共五十五頁(yè)。12-3.進(jìn)度狀態(tài)顯示元件大家在寫(xiě)過(guò)幾個(gè)程式之後,一定也會(huì)發(fā)現(xiàn)ProcessMessages()這個(gè)函式會(huì)有無(wú)效的時(shí)候,其實(shí)不是無(wú)效,而是剛剛好ProcessMessages()運(yùn)作原理剛好跟你程式的做法無(wú)法match,這時(shí)候又該怎麼辦呢?在這邊非常建議各位採(cǎi)用Thread的做法,雖然有些情況下不加入ProcessMessages()也可以正常運(yùn)作,雖然有時(shí)候加入了ProcessMessages()就可以正常運(yùn)作,但是最終的解決方法仍然是使用Thread的做法,因?yàn)門(mén)hread才是真正將所有的工作分成『執(zhí)行緒』後才交給CPU去執(zhí)行,所以不管現(xiàn)在程式在跑什麼東西,只要有開(kāi)Thread,不管同時(shí)間有多少程式在跑一定都可以使用到CPUTime。關(guān)於Thread的介紹與使用,我們將在後面章節(jié)提到。30第三十頁(yè),共五十五頁(yè)。12-3.進(jìn)度狀態(tài)顯示元件其實(shí)除了上面介紹的這兩個(gè)元件以外,還有其他很多元件都可以用來(lái)表示類(lèi)似這方面的功能,例如曲線圖、圓餅圖、Shape,或是任何一個(gè)可以顯示圖形或是文字的都可以,只是需要程式設(shè)計(jì)師自己設(shè)計(jì)表現(xiàn)的模式。31第三十一頁(yè),共五十五頁(yè)。12-4.軌跡追蹤列軌跡追蹤列通常都是為了讓使用者可以有比較方便的方法設(shè)定數(shù)值。例如在寫(xiě)一個(gè)骰子的程式時(shí)(一次丟多個(gè)骰子),我們一定要輸入各點(diǎn)數(shù)會(huì)出現(xiàn)的機(jī)率,這時(shí)候我們就可以利用TrackBar這個(gè)元件,採(cǎi)用『拉』的方式來(lái)設(shè)定好各點(diǎn)數(shù)出現(xiàn)的機(jī)率。概觀的說(shuō),凡是需要設(shè)定『數(shù)值』時(shí),都可以利用TrackBar來(lái)完成,這樣可以增加不少UserFriendly的效果喔!32第三十二頁(yè),共五十五頁(yè)。12-4.軌跡追蹤列範(fàn)例12-10:TrackBar操作實(shí)例TrackBar重要屬性說(shuō)明屬性說(shuō)明Frequency在TrackBar上的標(biāo)記多少單位劃一格LineSize當(dāng)你使用方向鍵控制TrackBar上面的指標(biāo)時(shí),按一下會(huì)移動(dòng)多少格MaxTrackBar的最大值MinTrackBar的最小值Orientation有Horizontal和Vertical兩種不同的屬性值,主要是用來(lái)決定TrackBar是要往右移動(dòng)或是往上移動(dòng)PageSize跟LineSize很像,不過(guò)LineSize是控制方向鍵對(duì)於TrackBar的移動(dòng)數(shù)量,而PageSize是控制PageDown、PageUp對(duì)於TrackBar的移動(dòng)數(shù)量Position目前TrackBar指標(biāo)的位置SelEnd會(huì)顯示出一個(gè)Range的光棒在TrackBar上,這個(gè)光棒的結(jié)束位置就是在SelEnd這個(gè)位置。SelStart會(huì)顯示出一個(gè)Range的光棒在TrackBar上,這個(gè)光棒的結(jié)束位置就是在SelStart這個(gè)位置。一般來(lái)說(shuō)SelStart的位置都設(shè)定在『0』,而SelEnd的位置跟Position的值是同步的。因?yàn)檫@樣就會(huì)將TrackBar已經(jīng)被指標(biāo)拉過(guò)的位置用其他顏色來(lái)表示SliderVisible決定指標(biāo)要不要出現(xiàn)在TrackBar上ThumbLengthTrackBar的長(zhǎng)度TickMarks

決定標(biāo)記點(diǎn)要在哪個(gè)方向TickStyle決定標(biāo)記點(diǎn)產(chǎn)生的方式,Auto、Manual、或是None33第三十三頁(yè),共五十五頁(yè)。12-4.軌跡追蹤列範(fàn)例12-10程式碼void__fastcallTForm1::TrackBar1Change(TObject*Sender){Label1->Caption="目前位置:"+IntToStr(TrackBar1->Position);Label2->Caption="百分比率:"+\FloatToStr((float)100*(float)TrackBar1->Position/(float)TrackBar1->Max)+"%";}34第三十四頁(yè),共五十五頁(yè)。12-5.上下控制元件上下控制元件跟TrackBar非常的類(lèi)似,都是用來(lái)設(shè)定(表現(xiàn))數(shù)值,只是TrackBar一定是一個(gè)調(diào)整棒在那邊讓使用者拉,但是上下控制元件就不一樣了,你可以結(jié)合各種不同的VCL元件,例如可以跟Label或是Edit結(jié)合等等。在範(fàn)例12-11中,我們將列出一些比較常跟上下控制元件結(jié)合的使用範(fàn)例,也會(huì)提到『CspinEdit』這個(gè)類(lèi)似上下控制元件。35第三十五頁(yè),共五十五頁(yè)。12-5.上下控制元件範(fàn)例12-11:UpDown&CSpinEdit操作範(fàn)例UpDown常用的屬性說(shuō)明屬性說(shuō)明AlignButton設(shè)定UpDown按鈕的方向要在那個(gè)方向ArrowKeys決定我們是不是可以使用方向鍵來(lái)控制UpDown元件Associate想要跟UpDown元件結(jié)合的VCL元件Increment每次按一次按鈕所增加或是減少的值MaxUpDown中會(huì)出現(xiàn)的最大的值,也就是Position這個(gè)屬性的值不可以超過(guò)這個(gè)值MinUpDown中會(huì)出現(xiàn)的最小的值,也就是Position這個(gè)屬性的值不可以小於這個(gè)值Orientation有Horizontal和Vertical兩種不同的屬性值,主要是用來(lái)決定UpDown的按鈕是要上下方向或是左右方向Position目前UpDown所在的位置(顯示出來(lái)的值)Thousands如果數(shù)值超過(guò)1000的時(shí)候,需要需要每三個(gè)數(shù)字打一個(gè)逗點(diǎn)36第三十六頁(yè),共五十五頁(yè)。12-5.上下控制元件範(fàn)例12-11:UpDown&CSpinEdit操作範(fàn)例CspinEdit常用的屬性說(shuō)明屬性說(shuō)明AutoSelect當(dāng)CspinEdit剛好在focus的時(shí)候,Text中的值會(huì)自動(dòng)被選取EditorEnabled設(shè)定我們可不可以直接EditorCspinEdit的TextIncrement每次按一次按鈕所增加或是減少的值MaxValueCSpinEdit中會(huì)出現(xiàn)的最大的值,也就是Value這個(gè)屬性的值不可以超過(guò)這個(gè)值MinValueCSpinEdit中會(huì)出現(xiàn)的最大的值,也就是Value這個(gè)屬性的值不可以低於這個(gè)值Value目前CSpinEdit所在的位置(顯示出來(lái)的值)37第三十七頁(yè),共五十五頁(yè)。12-5.上下控制元件範(fàn)例12-11:UpDown&CSpinEdit操作範(fàn)例程式碼執(zhí)行結(jié)果void__fastcallTForm1::UpDown3Click(TObject*Sender,TUDBtnTypeButton){if(Button==btPrev)ProgressBar1->Position--;elseProgressBar1->Position++;}38第三十八頁(yè),共五十五頁(yè)。12-6.日期時(shí)間在BCB內(nèi)有不少跟『日期/時(shí)間』相關(guān)的元件可以用,例如Win32頁(yè)次中的『DateTimePicker』及『MonthCalendar』,System頁(yè)次中的『Timer』,以及Sample頁(yè)次中的『Ccalendar』這幾個(gè)元件。範(fàn)例12-12我們將實(shí)做這幾個(gè)元件讓大家看看。39第三十九頁(yè),共五十五頁(yè)。12-6.日期時(shí)間範(fàn)例12-12TimerTimer用白話一點(diǎn)的話來(lái)說(shuō)就是『定時(shí)器』。也就是說(shuō)我們可以利用Timer來(lái)做固定時(shí)間的定時(shí)器。除了可以利用Timer做時(shí)間的定時(shí)器外,在BCB中也有提供一些函式可以做時(shí)間的計(jì)算,例如時(shí)間間距的計(jì)算或是目前時(shí)間的回報(bào)等等。在範(fàn)例程式12-12中,我們將上面我們所說(shuō)的三個(gè)功能寫(xiě)出來(lái)當(dāng)作範(fàn)例,讓大家可以對(duì)Timer這個(gè)元件以及有關(guān)DateTime方面的函式更熟悉。40第四十頁(yè),共五十五頁(yè)。12-6.日期時(shí)間範(fàn)例12-12月曆MonthCalendar&DateTimePicker&CCalendarMonthCalendar重要屬性說(shuō)明屬性說(shuō)明CalColor設(shè)定月曆中的各種顏色Date月曆中被選取的日期FirstDayOfWeek設(shè)定每個(gè)星期的第一天是星期幾MultiSelect可以選多個(gè)日期ShowToday在月曆上顯示出今天的日期ShowTodayCircle在今天的日期上會(huì)出現(xiàn)一個(gè)圈圈包住WeekNumbers出現(xiàn)這一週是今年的第幾週的數(shù)字41第四十一頁(yè),共五十五頁(yè)。12-6.日期時(shí)間範(fàn)例12-12月曆

CCalendar重要屬性說(shuō)明屬性說(shuō)明Day目前選定的日子GridLineWidth表格格線的寬度Month目前選定的月份StartOfWeek設(shè)定每個(gè)星期的第一天是星期幾UseCurrentDate預(yù)設(shè)為目前的日期Year目前表格顯示出來(lái)的日期的年份42第四十二頁(yè),共五十五頁(yè)。12-6.日期時(shí)間範(fàn)例12-12Timer執(zhí)行畫(huà)面&DateTime執(zhí)行畫(huà)面43第四十三頁(yè),共五十五頁(yè)。12-7.熱鍵元件的使(HotKey)熱鍵的使用在Windows系統(tǒng)中也是蠻重要的功能。雖然說(shuō)目前大家都習(xí)慣使用滑鼠,但是如果想讓自己在使用軟體上能加快速度或是提昇效率,熱鍵的使用及建立就相當(dāng)?shù)闹匾恕@缭赪ord中,你要打個(gè)『頓號(hào)』可能得從〔插入〕〔符號(hào)〕這個(gè)選單中慢慢找,但是如果你將他設(shè)定成快速鍵,節(jié)省下來(lái)的時(shí)間可能高達(dá)30秒鐘。44第四十四頁(yè),共五十五頁(yè)。12-7.熱鍵元件的使(HotKey)範(fàn)例12-13:HotKey實(shí)作技巧在BCB中有提供熱鍵的元件。在範(fàn)例12-13中我們將會(huì)設(shè)計(jì)一個(gè)範(fàn)例程式來(lái)展現(xiàn)熱鍵的實(shí)作技巧,以及使用熱鍵的好處。在範(fàn)例12-13中我們利用MainMenu這個(gè)元件當(dāng)作我們要指定快速鍵的元件。設(shè)定好了之後按下快速鍵就會(huì)啟動(dòng)相關(guān)的函式。45第四十五頁(yè),共五十五頁(yè)。12-7.熱鍵元件的使(HotKey)範(fàn)例12-13:HotKey實(shí)作技巧相關(guān)程式碼void__fastcallTForm1::BitBtn1Click(TObject*Sender){AnsiStringStrBuf,HotKeyBuf;TMenuItem*ItemBuf;if(RadioGroup1->ItemIndex!=-1){StrBuf=RadioGroup1->Items->Strings[RadioGroup1->ItemIndex];for(inti=0;i<MainMenu1->Items->Count;i++)if((ItemBuf=MainMenu1->Items->Items[i]->Find(StrBuf))!=NULL)break;if(ItemBuf)ItemBuf->ShortCut=HotKey1->HotKey;}}//void__fastcallTForm1::ShowHotKeySet(TObject*Sender){ShowMessage("SetHotKeySuccess!\n");}46第四十六頁(yè),共五十五頁(yè)。12-7.熱鍵元件的使(HotKey)範(fàn)例12-13:HotKey實(shí)作技巧執(zhí)行畫(huà)面47第四十七頁(yè),共五十五頁(yè)。12-8.常駐在SystemTray的程式有很多軟體常常會(huì)將自己的軟體最小化在右下角的系統(tǒng)列,例如防毒軟體或是一些常駐程式都會(huì)在系統(tǒng)列。在BCB中也有這樣的元件提供給programmer使用,這個(gè)元件就是『TrayIcon』。範(fàn)例12-14:系統(tǒng)列程式實(shí)作技巧TrayIcon的使用方法非常的簡(jiǎn)單,在範(fàn)例12-14中,我們除了放入一個(gè)TrayIcon外,我們也加入一個(gè)PopupMenu當(dāng)做快速選單,也加入一個(gè)ImageList,並且放入多個(gè)Image在ImageList中,讓TrayIcon最小化的時(shí)候可以在系統(tǒng)列出現(xiàn)我們所設(shè)定的圖示。48第四十八頁(yè),共五十五頁(yè)。12-8.常駐在SystemTray的程式範(fàn)例12-14:系統(tǒng)列程式實(shí)作技巧主要程式碼void__fastcallTForm1::N1Click(TObject*Send

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論