程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++ Builder編程指南2

C++ Builder編程指南2

編輯:關於C++

三、常用控件的使用與編程

靜態文本是用戶無法直接改變(不可編輯)的文本,程序可以在運行時刻來改變它,通常起標注和提示作用,它位於控件板的“Standard”頁,其主要屬性有:

Align:指該控件在窗口中的位置或對齊方式(AlBottom:位於底部;AlClient:充滿客戶區;AlLeft:位於左方;AlNone:用戶自定義;AlRight:位於右方;AlTop:位於頂部)。

Alignment:顯示文字在本控件中的位置(taCenter:居中;taLeftJustify:居左;taRightJustify:居右)。

AutoSize:是否自動縮放(當設為true時,則控件的尺寸隨控件裡面文字的大小而改變)。

Caption:控件中要顯示的文字,即標題。

Color:控件的顏色。

Cursor:鼠標移入控件後的形狀。

Enabled:設置該控件是否有效。

Font:設置該控件內文字的字體,單擊該屬性彈出字體設置對話框,可以設置字體風格、字體尺寸、字體顏色等。

Name:控件名稱。

標准按鈕主要用於響應用戶鼠標或鍵盤按下的操作,它位於控件板的Standard頁,其主要屬性有:

Cancel:當設為true時,此按鈕相當於放棄按鈕,即當用戶按下Esc鍵時相當於用鼠標單擊此按鈕。

Default:設置該按鈕是否為缺省按鈕。

ModalResult:模式結果。(可選值有mrNone、mrOk、mrCancel、mrAbort、mrRetry、mrIgnore、mrYes、mrNo等)當設為非mrNone時,主要用於按下該按鈕時關閉該按鈕所屬模式窗口。

標准按鈕控件可以響應的主要事件有:

OnClick:鼠標單擊或按下熱鍵時的響應事件。

OnEnter:當按鈕獲得輸入焦點時的響應事件。

OnExit:當按鈕失去輸入焦點時的響應事件。

OnKeyDown:當鍵盤任意鍵按下時的響應事件。

OnKeyPress:當鍵盤上字符鍵按下時的響應事件。

OnKeyUp:放開鍵盤按鍵時的響應事件。

OnMouseDown:鼠標鍵按下時的響應事件。

OnMouseUp:鼠標鍵彈起時的響應事件。

OnMouseMove:鼠標移動時的響應事件。

單行編輯框控件用來接收來自用戶的單行可編輯輸入,它位於控件板的Standard頁,其主要屬性有:

AutoSelect:自動選擇。用來設置當該控件獲得輸入焦點時編輯框裡的文本內容是否被自動選擇。若用戶想要在每次選中該編輯框時就要替換掉原有的內容,不是在原有的內容後添加新的內容,可把該屬性設為true。

CharCase:控制編輯框內字符的大小寫。(可選值有ecLowerCase:全為小寫;ecNormal:正常方式,大小寫均可;ecUpperCase:全為大寫。)

MaxLength:設置輸入文本的最大長度。當為0時表示不受限制。

ReadOnly:當該屬性設為true時,用戶不能改變編輯框裡面的文本。

Text:當程序運行時顯示在編輯框裡面的文本內容。

狀態條控件一般放在應用程序界面底部,用於快速提示當前狀態或提供簡單幫助等功能,它位於控件板的Win32頁上,其主要屬性有:

Panel:面板屬性,用來設置狀態條的風格。用鼠標單擊該屬

所示(狀態條被分成三個小面板)。利用該編輯器和對象觀察器就可以把狀態條編輯成合適的樣子。

SimplePanel:簡單面板。用來決定是顯示一個簡單面板還是多個面板,設為true時,只顯示一個簡單面板。

SimpleText:當SimplePanel設為true時,顯示在簡單面板裡的文本。

下面以一實例介紹控件的用法。該程序可以實時地在狀態條中顯示當前鼠標位置,也可以在編輯框中直接輸入鼠標的坐標值,用來改變鼠標在屏幕中的位置。

(1) 從控件板的“Standard”頁拖動兩個靜態文本控件“Label1”和“Label2”、兩個單行編輯框“Edit1”和“Edit2”、一個按鈕控件“Button1”到窗體“Form1”上,設置“Label1”和“Label2”的“Caption”屬性值分別為“鼠標X坐標值:”和“鼠標Y坐標值:”;設置“Edit1”和“Edit2”的“Text”屬性都為“0”;設置“Button1”的“Caption”屬性為“退出”。根據自己的喜好安排好各控件在窗體中的布局。選擇菜單“File|Save As”,另存程序文件“Unit1.cpp”為“xyp.cpp”;選擇“File|Save Project As”,另存工程文件為“xy.bpr”。

(2) 從控件板的“Win32”頁拖動一個狀態條控件“StatusBar1”到窗體“Form1”的底部(自動),點擊其“Panels”屬性,所示的三個小面板,其中一個放提示信息,另外兩個分別存放鼠標的X和Y坐標值。

(3) 利用對象觀察器設置“Form1”的“OnMouseMove”(鼠標在窗體上移動時觸發該消息)消息響應函數為“MouseMove()”,單行編輯框“Edit1”和“Edit2”的“OnChange”消息響應函數同為“EditChange()”,標准按鈕“Button1”的“OnClick”消息響應函數為“ExitButton()”。

(4) 轉入代碼編輯器,在“xyp.cpp”中鍵入如下程序代碼:

void __fastcall TForm1::MouseMove(TObject *Sender, TShiftState Shift,int X, int Y)
{
//該程序段用於在狀態條中的第二個小面板(Item[1])中顯示鼠標的X坐標值,第三個小
//面板(Item[2])中顯示鼠標的Y坐標值。IntToStr()函數用於把整型坐標值轉換為字符型。
StatusBar1->Panels->Items[1]->Text = IntToStr(X);
StatusBar1->Panels->Items[2]->Text = IntToStr(Y);
void __fastcall TForm1::ExitButton(TObject *Sender)
{Close();//關閉應用程序}
void __fastcall TForm1::EditChange(TObject *Sender)
{
//調用API函數SetCursorPos()(C++ Builder中可以直接調用)設置鼠標位置,ToInt()//用於把字符型的值轉換為整型值。讀者要留意這種C++ Builder中所特有的轉換方法。
SetCursorPos(Edit1->Text.ToInt(),Edit2->Text.ToInt())
;
}

位圖按鈕控件位於Additional頁,它提供了同標准按鈕一樣的功能,但它能在按鈕上貼上一幅位圖,其主要屬性有:

Glyph:浮雕,單擊該屬性會彈出一個“Picture Editor”對圖(510cb17.Jpg )

所示。

Hint:當鼠標停留在該控件上一段時間後所彈出的一小段提示信息。

Layout:用於決定位圖貼在按鈕的哪個位置。(blGlyphBottom:位於按鈕標題的下方;blGlyphLeft:位於按鈕標題的左方;blGlyphRight:位於按鈕標題的右方;blGlyphTop:位於按鈕標題的上方。)

快速按鈕(SpeedButton)是一種新型的按鈕控件,它具有一般按鈕的屬性和方法,另外除了可以在按鈕上添加文字標題外,還可以在按鈕表面設定不同圖像(這點有別於位圖按鈕,它只能設定一幅圖像),用於代表不同的按鈕狀態(如選中、無效等)。一般把若干個快速按鈕都集中在一個工具條(ToolBar)或面板(Panel)上,使用戶可以快速地執行一些常用命令。其主要屬性有:

AllowAllUp:全部彈起。當該屬性設為true時,屬於同一組(通過設置GroupIndex屬性為相同值)的快捷按鈕可以同時處於彈起狀態,即所有按鈕均未被選中。

Down:按鈕是否處於按下狀態。

Glyph:點擊該屬性彈出“Picture Editor”對話框,用於裝入一幅位圖,然後把該位圖分成四幅小位圖,每幅小位圖代表不同的按鈕狀態。這就要求“Glyph”屬性設定的位圖必須包含四幅相同大小尺寸的小位圖,並且這些小位圖必須緊密相連且在同一水平線上。

NumGlyphs:設定每個按鈕對應的小位圖的個數。

Flat:設定快速按鈕的平面效果。設定該屬性為true,當鼠標不在按鈕上時,該按鈕呈現平面狀態;當鼠標移到按鈕之上時,按鈕馬上突了出來。當Flat為false時,則沒有這種效果。

工具條按鈕(ToolBar)(簡稱工具條)通常作為工具按鈕(tool buttons)或其它按鈕的一個容器,以便對其進行統一管理。一般情況下可以在工具條上產生工具按鈕(在工具條控件上單擊鼠標右鍵,選擇彈出式菜單中的“New Button”或“New Separator”,則可以產生一系列的工具按鈕或分割線)或放置快速按鈕,以便對應用程序進行更加直接的控制(它一般是一些菜單的快捷方式),其主要屬性有:

Flat:工具條上的工具按鈕或其它控件是否具有平面特性。

Images:工具條上的工具按鈕所對應的圖像系列。它一般對應一個ImageList控件。  Wrapable:工具條上的按鈕是否可以自動換行,產生一個對齊的新列。

為用工具條產生的一個應用程序界面,它共有四個工具按鈕,對應一個“ImageList”控件。

C++ Builder3.0提供了一個Splitter控件來實現對用戶窗口的分割,只需拖動該控件到窗體上,就可以實現窗口的任意分割。把面板控件(Panel)拖動到窗體上,設置其對齊方式,然後把Splitter控件拖動到面板控件的邊緣,設置其對齊方式與面板控件的對的分割方式為例來介紹其具體操作過程:

(1) 放置一個面板“Panel1”到窗體“Form1”上,並設置其“Align”屬性為“alLeft”,然後在“Panel1”的右邊界處放置一個“Splitter”控件,其“Align”屬性為“alLeft”。應當使“Splitter”控件的“Left”屬性值大於或等於“Panel1”的“Left”值加上其“Width”的值。再設定“Splitter”控件的“Width”屬性值為3。

(2)放置另外一個面板“Panel2”到窗體“Form1”上,並設置其“Align”屬性為“alClient”。最後在各面板控件上放置其它所需控件,從而實現了窗口的分割。

圖像控件“TImage”位於“Additional”頁,主要用於在某一位置來顯示一幅圖片。該控件的主要屬性有:

Center:圖片是否在控件的居中位置。

Picture:用於裝入圖片。

Stretch:用於圖片是否自動伸縮到控件大小。

下面以實例介紹上述幾個控件的用法。

假如設計一個圖像放大、縮小的演示程序,可以選擇任意一幅位圖進行演示。

(1) 拖動一個面板(Panel)控件到窗體“Form1”上,設置其“Align”屬性為“alTop”,讓其充當工具條控件。然後拖動四個快速按鈕控件到面板上,設置其“Caption”屬性分別為“打開”、“放大”、“縮小”和“退出”,設置其“Flat”屬性為“true”,“Layout”屬性為“blGlyphBottom”。最後用“Glyph”屬性為各個快速按鈕設置圖像。

(2) 然後拖動一個圖像控件和一個“OpenDialog”(打開文件對話框)控件到窗體之上;設置“Form1”的“Caption”屬性為。

(3) 另存程序文件“Unit1.cpp”為“imageio.cpp”,另存工程文件為“image.bpr”。轉入代碼編輯器,在程序“imageio.cpp”中鍵入如下代碼:

void __fastcall TForm1::SpeedExitClick(TObject *Sender)
{Close();//關閉應用程序}
void __fastcall TForm1::SpeedOpenClick(TObject *Sender)
{//利用打開文件對話框為圖像控件裝入位圖。
Image1->Stretch = true;//圖像大小隨圖像框的大小而改變
OpenDialog1->Filter = “Bmp files (*.bmp)|*.bmp”;//文件過濾器中只裝入位圖文件
if(OpenDialog1->Execute())
Image1->Picture->LoadFromFile(OpenDialog1->FileName);
}
void __fastcall TForm1::SpeedInClick(TObject *Sender)
{//圖像的長和寬分別增加10各象素
Image1->Height=Image1->Height+10;
Image1->Width=Image1->Width+10;
}
void __fastcall TForm1::SpeedOutClick(TObject *Sender)
{//圖像的長和寬分別減少10各象素
Image1->Height=Image1->Height-10;
Image1->Width=Image1->Width-10;
}

用“打開”按鈕選擇一幅位圖,用“放大”或“縮小”按鈕對改位圖進行任意大小的縮放操作。最後設計一個類似Win95“開始”菜單中的“運行”功能基本.

該應用程序是進程應用程序。進程是裝入內存並准備執行的程序,它是資源分配的獨立單位。進程有代碼、數據,該進程中的線程可用的其他系統資源,如文件、管道和同步對象組成。通過為外部可執行程序創建進程,從而可以在自己的應用程序中調用外部可執行程序。創建進程應使用Windows的API函數“CreateProcess()”,其具體用法和內部所涉及到的數據結構,讀者可以參考其他書籍。

在“Open”標簽所對應的編輯框內輸入可執行文件的名稱(包括路徑),單擊“Run”按鈕,就可運行該外部可執行文件。也可以單擊“Browse”按鈕,利用打開文件對話框選擇外部可執行文件並運行它。

拖動如下所示的控件到窗體上,並設置其屬性:

控件名稱 屬性  設定值

Label1 (標簽)  Caption Open:

Edit1(編輯框)  Text

OpenDialog1(打開文件對話框)

Button1(按鈕)  Caption  Run

Button2(按鈕)  Caption  Exit

Button3(按鈕)  Caption  Browse

然後在程序中鍵入代碼。

在事件Button1Click中添加如下代碼(按“Run”按鈕時的響應函數):

void __fastcall TForm1::Button1Click(TObject *Sender)
{
STARTUPINFO StartInfo;
PROCESS_INFORMATION ProcessInformation;
StartInfo.cb=sizeof(STARTUPINFO);
StartInfo.lpDesktop=NULL;
StartInfo.lpReserved=NULL;
StartInfo.lpTitle=NULL;
StartInfo.dwFlags=STARTF_USESHOWWINDOW;
StartInfo.cbReserved2=0;
StartInfo.lpReserved2=NULL;
StartInfo.wShowWindow=SW_SHOWNORMAL;
//為外部可執行程序創建進程,其中的可執行文件名由Edit1編輯框提供。
BOOL bReturn=CreateProcess(NULL,Edit1->Text.c_str(),NULL,NULL,
FALSE,NULL,NULL,NULL,&StartInfo,
&ProcessInformation);
if(!bReturn)
{
//當輸入可執行文件名無效時,彈出信息框,然後控制焦點停留在編輯框上。
Application->MessageBox(“你沒有指定可執行文件”,“C++ Builder MessageBox”,
MB_OKCANCEL +MB_DEFBUTTON1);
Edit1->SetFocus();
}
}

在事件Button2Click中添加如下代碼:

void __fastcall TForm1::Button2Click(TObject *Sender)

{Close();}//按“Exit”按鈕時,程序退出。

在事件Button3Click中添加如下代碼:

void __fastcall TForm1::Button3Click(TObject *Sender)
{
OpenDialog1->Execute();//執行打開文件對話框
Edit1->Text=OpenDialog1->FileName;//把選中的可執行文件名返回給編輯框。
}

運行該程序,然後利用該程序調用Windows的計算器外部程序

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved