• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 16, 文章 - 1, 評論 - 4, 引用 - 0
            數據加載中……

            C++ Builder 初學問與答 (十一~十五)

            11.工具條組件
              87)問:工具條是Windows編程經常要用的, C++Builder能不能實現這個功能呢?

            答:當然可以,工具條是由許多具有圖形的按鈕組成的,這些按鈕被分隔符分隔成許多組,每個組都能夠完成特定的工作。工具條上的按鈕具有與位圖按鈕相似的特性——可以擁有多個位圖,當按鈕處于不同狀態時,例如按下、失效等,將顯示不同的位圖。以前C++Builder制作工具條的方法是通過把加速按鈕放在面板組件Panel上實現的。現在,我們不必使用這兩種組件的組合,只要使用ToolBar就可以創建工具條了。工具條是比較難掌握的,它之所以不容易掌握是因為它包含的TToolButton組件有三個屬性:Grouped,AllowAllUp和Down,它們的組合可以產生各種不同效果的按鈕組。這三個屬性我們一定要好好理解。

              88)問:那請給我介紹一下Toolbar這個組件的使用方法好嗎?

              答:好的,我們先從ToolBar的屬性入手,通過對一些重要屬性的分析來了解它。ToolBar包含一些前面沒有見過的屬性:

              ButtonHeight屬性指出了工具條中按鈕的高度。

              ButtonWidth屬性用來設定工具條中按鈕的寬度。

              Flat屬性為true時,使工具條透明,同時使工具條上按鈕之間的邊界消失。俗稱平面工具條,它的缺省值為False。

              Indent用來在工具條的左邊創建一個邊沿區。

              ShowCaptins確定是否允許在工具條的按鈕上顯示標題。缺省值為False。

              Wrapable設定是否允許工具條上的按鈕換行。缺省值為True。

              List屬性,當這個屬性為True時,工具條上按鈕的圖標在左,標題在右。為False時,按鈕的圖標在上,標題在下。缺省值為False。

              Images用來設定正常情況下,按鈕上顯示的圖標列表。

              HotImages用來設定當鼠標移動到按鈕上顯示的圖標列表。

              DisabledImages用來設定按鈕失效時顯示的圖標列表。

              工具條上所有按鈕顯示的圖標就包含在這三個圖標列表中。

              在前面介紹的ListView組件中,屬性LargeImages和SmallImages分別表示在兩種不同的狀態下顯示的圖標列表。ToolBar的這三種屬性也有類似的特點,它們分別表示在正常狀態、鼠標指向工具條以及按鈕失效時顯示的圖標列表。

              此外,還有幾個運行時態屬性:

              ButtonCount屬性,指出了工具條中按鈕的個數。

              Buttons存放著工具條中按鈕的列表。

            RowCount指示著工具條的行數。

              89)問:C++Builder為什么要采用圖標列表的方式來管理工具條上的圖標呢?

              答:因為這樣可以集中統一地管理大量的圖標,從而大大地減輕了程序員的負擔。

              答:要為應用程序建立工具條,可以按照下面的步驟:

              (1)從選項卡Win32中選擇工具條組件,放置在窗體上。

              注意,剛放置在窗體上的工具條組件一定是在窗體的頂部,因為這時工具條的Align屬性被設置為alTop。

              (2)在窗體上增加兩個ImageList組件,并為這些組件引入圖標。

              (3)將一個ImageList組件賦予工具條的屬性Images,另一個賦予工具條的屬性DisabledImages。

              (4)用鼠標右鍵單擊工具條,在彈出菜單中選擇New Button。

              這時將在工具條上出現一個按鈕,這個按鈕無標題。這是因為工具條的ShowCaption屬性被設置成了False。實際上這個按鈕有一個缺省的標題ToolButton1。

              這個新創建的按鈕與我們前面介紹的按鈕都不一樣,它是一個TTtoolButton組件。

              (5)選中工具條上的按鈕,把按鈕的ImageIndex屬性改為所需要圖標的索引號。這個圖標實際上是存放在ImageList組件中的。

              (6)重復第四步和第五步,在工具條上創建更多的按鈕。這樣一個工具條就建立了。

              90)問:工具條上的按鈕好像與普通按鈕不一樣,請問它有些什么特點呢?

              答:工具條上的按鈕是一個TToolButton組件。它包括一些與工具條有關的特性,可以簡化工具條上按鈕的配置,并增加一些顯示特性。TToolButton有這樣一些重要屬性。

              AllowAllUp屬性允許一個組中的按鈕同時全部處于未選中狀態。缺省值是False。

              Down屬性指定按鈕是否被選中。在設計期間把該屬性設置為True,可以使按鈕初始化為選中狀態,缺省值為False。

              DropDownMenu屬性把一個彈出菜單與按鈕相連。

              ImageIndex屬性指定出現在按鈕上的圖標的索引號。

              Indeterminate屬性確定按鈕是否處于一種既不是選中也不是未選中的中間狀態。缺省值為False。

              Wrap屬性強迫這個按鈕是這一行的最后一個按鈕,下一個按鈕從下一行開始。缺省值為False。

              Style屬性用來確定按鈕的樣式,它可以有五種不同的取值,這五種取值分別表示五種不同樣式的按鈕。

            tbsButton表示按鈕正常顯示與一般的加速按鈕一樣。

              tbsCheck表示單擊這種類型的按鈕時可以切換Down屬性。一旦你選中了該按鈕,那么按鈕將保持選中狀態直到再次單擊。

              tbsDropDown表示按鈕顯示成一個向下的箭頭。

              tbsSeparator表示按鈕顯示成工具條上的一個空格。

              tbsDivider表示按鈕顯示成工具條上的一個垂直線段。

              Grouped屬性確定是否允許連續的多個tbsCheck類型的按鈕組成一組。缺省值是False。如果連續的多個按鈕,每個按鈕的Grouped屬性都設置為True,同時Style屬性都設置為tbsCheck,那么這些組件一次只能選取一個。選中其中一個按鈕將使其他按鈕變成未選中狀態。

              91)問:如何用加速按鈕創建工具條?

              答:工具條的另一種創建方法是使用面板組件+加速按鈕SpeedButton的方法。加速按鈕在前面曾經提到過,它與位圖按鈕很相似,也使用屬性Caption和Glyph放置文本和圖標,不過加速按鈕還有一些屬性是比較特殊的。

              下面我們先介紹加速按鈕的屬性:

              GroupIndex:通過GroupIndex屬性可以使加速按鈕像單選按鈕那樣使用。也就是說,把多個單選按鈕的GroupIndex屬性賦予相同的值以便組成一組,這樣這個組中的按鈕一次只能有一個按鈕可以被按下,當你按下一個按鈕時,其他按鈕就會彈起。需要注意的是GroupIndex必須大于0。如果GroupIndex屬性等于0,那么表示該按鈕是一個普通的加速按鈕。

              Down:屬性值可以控制按鈕是否處于按下狀態,當該屬性值為True時,按鈕處于按下狀態。你可以在設計時把屬性Down設置為True,這樣當程序運行時,按鈕一開始就處于按下狀態。

              AllowAllUp:這個屬性用來指定一個組中的所有加速按鈕是否可以同時處于未被按下的狀態。當該屬性為True時,單擊該組中被按下的按鈕,這個按鈕會彈起。當該屬性為False時,單擊該組中被按下的按鈕,這個按鈕不會彈起。

              如果你比較一下加速按鈕和TToolButton組件就會發現,它們都有上面介紹的這三種屬性,只不過TToolButton組件中使用屬性Grouped來完成類似于GroupIndex的功能。

              92)問:用加速按鈕設計工具條與用Toolbar組件相比有什么不同?

              答:用加速按鈕設計工具條時必須首先在窗體上放置面板組件,而且應該把它的Align屬性設置為alTop(因為工具條一般都放在窗口的頂部)。然后在面板組件上放置加速按鈕。

              一般要利用按鈕的Caption和Glyph屬性為加速按鈕設置文本和圖標。如果這些按鈕只是像普通按鈕那樣操作的話,那么這樣設置就可以了。但是如果這些按鈕要像單選按鈕那樣使用,那么還必須對GroupIndex屬性進行設置。

            93)問:那如何用加速按鈕來設計工具條呢?

              答:我們要用到Additional頁的可控組件ControlBar、Speedbutton與Win32頁面中的ToolBar。下面來看一下他的實現:

              ①雙擊ControlBar,把她放到窗體中;

              ②雙擊ToolBar,并將其放到ControlBar上;

              ③在ToolBar上添加SpeedButton;

              ④選中一個SpeedButton,在Object Inspector中找到Glyph屬性,來選擇圖片。

              *SpeedButton的Flat屬性改為true,則按鈕為透明的

              *AutoSize改為true,則容器大小隨容件變化

              12.狀態條組件
              94)問:在Windows編程中,狀態條可以顯示程序當前的一些狀態信息,是一個很有用的部件,它也被廣泛應用在許多程序中,請問,C++Builder是怎樣編寫狀態條的?

              答:狀態條StatusBar實際上是由一組狀態面板組成的,通常顯示在應用程序窗口的底部,它的功能主要是顯示一些提示信息和狀態信息。例如,C++Builder的代碼編輯器底部就顯示了一個狀態條,而且顯示了多個狀態面板。

              狀態條可以只顯示一個狀態面板,也可以顯示多個狀態面板。當顯示多個狀態面板時,狀態條被分割為幾個部分,每個部分都有自己的Text屬性,通過這個屬性就可以在狀態條顯示信息了。

              如果要在狀態條上顯示多個狀態面板,就需要把狀態條的SimplePanel屬性設置為False,否則只能顯示一個狀態面板。

              如果狀態條只需要顯示一個狀態面板,那么只要簡單地在窗體上放置狀態條就可以了。這時窗體上的文本保存在屬性SimpleText中。如果要顯示多個狀態面板,那么就需要使用面板編輯器創建多個狀態面板。單擊屬性Panels的Value列中的省略號按鈕(或者雙擊菜單條),就可以打開狀態面板編輯器。

              單擊編輯器上的按鈕Add可以增加狀態條上的狀態面板。單擊面板編輯器中新創建的狀態面板,在對象編輯器中就會列出該狀態面板的屬性。

              95)問:可以看出狀態條上的狀態面板有五個屬性,他們分別有什么作用呢?

              答:Alignment屬性用來確定面板中所顯示文本的對齊方式。它的可能值為:taLeftJustify表示左對齊、taRightJustify表示右對齊和taCenter表示居中對齊。缺省值為taLeftJustify。

              Bevel用來確定面板的樣式。共有三種方式,None表示面板處于平整的狀態;Lowered表示面板下沉;Raised表示突起。

              Style屬性用來確定在面板中顯示的內容是Text文本還是OwnerDraw自繪制圖形方式。如果要在面板中作圖,那么就需要編寫OnDrawPanel事件處理過程。

              Text屬性用來保存面板中顯示的字符串。

              Width用來設定面板的長寬。

            13.對話框組件

            96)問:怎樣編寫文件打開、保存等對話框?

              答:C++Builder為我們提供了許多常用的對話框組件,這些對話框組件都放在組件模板的Dialogs選項卡中,例如Font,Color,Open和Print對話框。其中OpenDialog對話框組件最具有代表性,只要掌握了它的用法,那么你也就會使用其他的對話框組件了。

              97)問:對話框組件的特性有哪些特性呢?

              答:對話框組件是一種不可見組件。當你把它放在窗體上時,它是一個大小不變的圖形按鈕,當程序運行時,對話框組件不會立刻顯示,而必須使用每個對話框都有的Execute方法,使對話框顯示出來。

              C++Builder提供的對話框大多數是有模式對話框。這種對話框要求首先必須響應該對話框,然后才能繼續進行工作。所謂響應對話框就是你必須單擊OK或者Cancel按鈕,使對話框返回一個值。當用戶單擊對話框上的按鈕OK時,返回True,單擊Cancel按鈕返回False。用戶可以根據返回值的不同進行不同的處理。

              非模式的對話框使你在響應對話框之前可以完成其他的工作,不必非要首先響應對話框。這類對話框有:FindDialog,ReplaceDialog等。

              98)問:能更細點的說明對話框組件的用法嗎?

              答:我們就編制一個文本閱讀器來說明如何使用文件打開對話框。

              打開一個新的窗體,我們放上一個按鈕組件和一個Memo組件,將Memo的ScrollBars屬性設置為ssBoth,使得Memo能夠顯示垂直和水平的滾動條。

              選中Lines屬性,刪除里面的文本。

              在窗體上放置OpenDialog組件。

              選中OpenDialog組件,可以看出,OpenDialog有這樣一些主要的特性

              FilrerIndex屬性用來指定每次打開對話框所用的缺省過濾器。

              DefaultExt屬性是一個擴展名,當用戶在文件編輯框中輸入的文件名沒有帶擴展名時,對話框會用它作為文件缺省的擴展名。

              InitialDir屬性用來設置對話框打開時顯示的目錄。

              FileName屬性用來返回最近一次選中的文件的完整路徑名。

              Filter屬性,這個屬性用來設計在對話框的文件列表中將列出哪些類型的文件。

              OpenDialog對話框提供了一個專門的編輯器來編輯屬性filter,單擊屬性Filter的value列中的省略好按鈕就可以打開這個編輯器。

              左邊用來輸入過濾器的名稱,右邊用來輸入文件擴展名。

            現在,我們輸入文本文件和C++文件的過濾器。這樣,在每次打開對話框時候,在文件類型下拉列表中將顯示過濾器的名稱。

              雙擊文打開按鈕,輸入這樣一段代碼:

              //------------------------------------------

              #include <vcl.h>

              #pragma hdrstop

              #include "Unit1.h"

              //------------------------------------------

              #pragma package(smart_init)

              #pragma resource "*.dfm"

              TForm1 *Form1;

              //-----------------------------------------

              __fastcall TForm1::TForm1(TComponent* Owner)

              : TForm(Owner)

              {

              }

              //-------------------------------------------------

              void __fastcall TForm1::Button1Click(TObject *Sender)

              {

              if(OpenDialog1->Execute())//首先執行打開文件對話框函數,這時,打開文件對話框才顯示出來。如果執行成功,這個函數返回true,否則返回false

              {

              Memo1->Lines->Clear();//把Memo中的內容清掉
              Caption=OpenDialog1->FileName; //獲得用戶選擇的文件的路徑名,并將它設置成窗體的標題。注意,因為是在Form1窗口(容器)中進行的操作,所以Caption前省了Form1,當然你可以加上Memo1->Lines->LoadFromFile(OpenDialog1->FileName);// 調用文本裝入函數從文件中裝入文本,并顯示在編輯框中。

              }

              }

              //--------------------------------------------------

              99)問:其它對話框的各有什么重要屬性?

              答:保存對話框SaveDialog與打開對話框非常相似,至于OpenPictureDialog、SavePictureDialog就不用多說了。其它象字體對話框FontDialog的Font屬性;顏色對話框ColorDialog的Color屬性;查找對話框FindDialog的FindText。這里就不用多說了,看一下就明白了。

              100)問:對話框組難道就只能用上面說的那些組件嗎?要是有,能介紹一下嗎?

              答:在C++ Builder集成開發環境的可視化組件中庫中,給應用程序開發員提供了一系列的標準的對話框函數。我們可以直接調用這些函數來顯示一些標準的對話框。

              這類函數還真不少,但我們只要掌握以下五個就足夠了J

              extern PACKAGE int _fastcall MessageDlg(const AnsiString Msg,TmsgDlgType DlgType,TmsgDlgButtons Buttons,int HelpCtx):用來在計算機屏幕中央顯示對話框。

              其中,參數Msg是指定要對話框中顯示的字符串。

              參數DlgType是TMsgDlgType類的變量,它用來指定對話框的顯示特征。TmsgDlgType是一個集合,它可以取以下的值:

              mtWarning:對話框中包含黃色的驚嘆符號;

              mtError:對話框中包含紅色的驚嘆符號;

              mtInformation:對話框中包含藍色的“I”符號;

              mtConfirmation:對話框中包含綠色的問號;

              mtCustom:對話框中不包含位圖符號,標題名稱為應用程序名稱。

              參數Buttons是用來指定對話框中包含的按鈕的類型,它是一個集合,可以是以下若干個元素的組合:

              mbYes:對話框含有“Yes”按鈕;

              mbNo :對話框含有“No”按鈕;

              mbOK:對話框含有“OK”按鈕;

              mbCancel :對話框含有“Cancel”按鈕;

              mbAbort :對話框含有“Abort”按鈕;

              mbRetry :對話框含有“Retry”按鈕;

            mbIgnore :對話框含有“Ignore”按鈕;

              mbAll :對話框含有“All”按鈕;

              mbNoToAll :對話框含有“NoToAll”按鈕;

              mbYesToAll :對話框含有“YesToAll”按鈕;

              mbHelp :對話框含有“Help”按鈕.

              C++ Builder還專門定義了三個常用的按鈕組合:

              mbYesNoCancel:包含了mbYes、mbNo和mbCancel元素;

              mbOKCancel:包含了mbOK和mbCancel元素;

              mbAbortRetryIgnore:包含了mbAbort、mbRetry和mbIgnore元素。

              參數HelpCtx用來指定當用戶選擇幫助時,幫助系統中的上下文編號。這個函數根據用戶選擇的按鈕,將返回相應的值,它有以下返回值:mrNone、mrAbort、mrOK、mrRetry、mrNo、mrCancel、mrIgnore、mrAll。

              extern PACKAGE void _fastcall ShowMessage(const AnsiString Msg):這個函數用來顯示一個對話框,這個對話框中包含一個“OK”按鈕。其中對話框中顯示的內容由參數Msg來確定。

              extern PACKAGE AnsiString _fastcall InputBox(const AnsiString Acaption, const AnsiString Aprompt, const AnsiString Adefault):這個函數用來在計算機屏幕上顯示一個對話框,這個對話框有一個文本編輯框,可以用來接收用戶輸入的字符串信息。

              Acaption:用來指定對話框的標題;

              Aprompt:用來指定對話框中顯示的內容;

              Adefault:用來指定對話框打開時在編輯框中顯示的內容。

              extern PACKAGE bool _fastcall LoginDialog(const AnsiString Acaption, AnsiString &AuserName, AnsiString &AuserName):這個函數用來顯示一個標準的登錄對話框,用來連接一個數據庫服務器,其參數分別為對話框中數據庫的名字、用戶輸入的用戶名和密碼

            extern PACKAGE bool _fastcall SelectDirectory(const AnsiString Caption,const WideString Root,AnsiString &Directory)或extern PACKAGE bool _fastcall SelectDirectory(AnsiString &Directory,TselectDirOpts Options,int HelpCtx):這個函數用來顯示一個讓用戶輸入目錄名稱的對話框。其中:

              第一種語法的參數Caption用來指定對話框的標題;Root用來指定從哪個根目錄開始瀏覽;參數Dircetory用來確定用戶選擇的目錄。這個語法不能改變當前的目錄。

              第二種語法的參數Options是一個集合,它可以由以下幾個元素組合而成:

              sdAllowCreate:允許用戶輸入一個不存在的目錄名字,但并不創建這個新目錄;

              sdPerformCreate:它必須和sdAllowCreate配合使用,當用戶輸入一個不存在的目錄名時,對話框將創建這個目錄;

              sdPrompt:它必須和sdAllowCreate配合使用,當用戶輸入一個不存在的目錄名時,將出現消息對話框,詢問用戶是否創建這個新目錄。若用戶選擇是,在包含sdPerformCreate元素時將創建這個新目錄,若沒有包含sdPerformCreate元素,將不創建目錄。

              《基礎入門》100問與答到這就結束了,本文所有例程均在XP系統、BCB6下編譯通過。

            第二部分:快速提高

              好久以來有不少朋友問我,《C++ Builder問與答》為什么不繼續寫了?我也一直在思考還應該寫下去不?CBX的推出,加之寶蘭宣布不在出新的CB版本,讓我們這些一直喜愛CB的人不清楚下一個方向到底在何處?當然真的希望CB會繼續,而不要倒下,但對于我們來說這只能是一種期盼L
              CB的優點我不想多說了,否則就不會有這么多的喜歡者,而一些入門的朋友還是選擇CB做為進入C/C++的工具,這使我覺得這篇文章還是值得寫下去的,因為還是有那么的朋友在期待著的她的下一篇。這里對這些朋友表示感謝!

            不在多說了,讓我開始新的篇章吧,在這里你將進一步了解CB的特色,更希望我們CB的陣營越來越強大,更希望我們都成為真正意義上的好朋友,互勉互進J

              由于時間有限,加之作者水平有限,文中難免有些錯誤,還及時請指出J這里先表示感謝!

              15.菜單

              1)問:C++Builder的菜單項有很多,它們各有什么作用呢?

              答:好吧,讓我們在新的篇章中首先來了解這方面的知識。下圖就是C++Builder集成開發環境中的菜單項名稱。

              (1)首先是File菜單。通過File菜單,我們可以打開、保存、關閉以及打印新的或已經存在的工程和文件。在這個菜單中,包含了這樣一些菜單項:

              “New”菜單項打開一個新的項目對話框,這個對話框包含了儲藏在對象儲藏里的模板。在此我們可以復制模板對象、從模板繼承得到一個新的對象,或者是修改模板對象。

              “New Application”菜單項將根據對象儲藏里設定的缺省工程模板生成一個新的工程,缺省情況下為包含有一個空窗體的新工程。

              “New Form”菜單項創建并加入一個新的窗體到工程中,這個窗體根據對象儲藏里的缺省Form模板建立。

              “Open”用來載入一個已經存在的工程、窗體、單元或者是文本文件到代碼編輯器。

              “Open Project”菜單項用來載入一個已經存在的工程。

              “Reopen”菜單項用于列出最近關閉的工程和模塊,供用戶選擇、打開。  

              “Save”菜單項用于使用當前的文件名保存當前的文件。

              “Save As”菜單項用于當前文件的換名保存。

              “Save Project As”菜單項用于將當前工程文件換名保存。

              “Save All”菜單項用于保存所有打開的文件,這些文件包括工程文件和模塊文件等。

              “Close”菜單項用于關閉工程里的窗口、單元或關閉當前工程等。

              “Close All”菜單項用于關閉所有打開的文件。

              “Include Unit Hdr”菜單項將一個選定的包含文件用#include語句加入到活動的模塊中。從而建立模塊間的程序聯系。這一項還是很有用處的。

              “Print”菜單項用于將當前活動的文件送到打印機。

              “Exit”菜單項用于關閉打開的工程,并退出C++Builder集成開發環境。

              (2)Edit菜單用于管理設計時的文本和組件。

              其中菜單項“Undo/Undelete”用于撤消最后一個動作。

              “Redo”用于恢復被Undo撤消的動作。

              “Cut”用于將選定的項目刪除,并且將這個項目放到剪切板上。

              “Copy” 用于將選定項目的拷貝到剪切板上。

              “Paste”用于將剪切板上的內容插入到代碼編輯器窗口或者窗口里。

              “Delete”用于將選定的內容刪除。

              “Select All”菜單項用于選定窗口中所有的組件。

              “Align to Grid”菜單項將選定的組件按最*近網格點對齊的原則進行排列。

              “Bring to Front”菜單項用于移動選定的組件到最前面層,這樣,當他和其他組件重疊時,就不可能被其他組件擋住。

              “Send to Back”菜單項用于移動選定的組件到最后面一層。

              “Align”用于排列組件。

              “Size”菜單項用于設置組件的大小。

              “Scale”菜單項用于按比例縮放窗體上組件的大小。

              “Tab Order”菜單項用于修改當前活動窗口在運行時,按Tab鍵后,焦點在所有組件中切換的順序。

              “Creation Order”菜單項用于修改窗口中不可視組件用Tab鍵切換焦點的順序。

              “Lock Controls”菜單項用于將窗口中所有的組件固定在當前的位置。這可以防止你誤修改。

              (3)Search菜單命令用于定位文本、錯誤、單元、變量以及代碼編輯器中的符號等。

              “Find”菜單項用于在當前文件中查找指定的文本。

              “Find In Files”菜單項用于在多個文件中查找指定的文本,并將文本找到的信息顯示在代碼編輯器底部的信息窗口。

              “Replace”菜單項用于查找指定的文本,并將這個指定的文本用指定的新的文本來代替。

              “Search Again”菜單項用于重復查找。

              “Incremental Search”菜單項用于按照我們鍵入過程中輸入的不完整的字符串查找。這樣,不需輸入全部文本就可以找到需要的文本。

              “Go to Line Number”菜單項用于將光標移動到指定的行。

              “Go to Address”菜單項用于跳到指定的地址。

            4)利用C++Builder集成開發環境中的視圖“View”菜單,可以顯示或隱藏C++Builder集成開發環境中的不同的部分,也可以用于打開屬于集成調試器的窗口。

            “Project Manager”菜單項用于顯示工程管理器。

              “Object Inspector”菜單項用于顯示對象監視器窗口。

              “Alignment Palette”菜單項用于顯示排版窗口。

              “Component List”菜單可以彈出一個包含所有組件列表的窗口,在這個窗口中可以很方便的根據組件名字找到組件,并放置到窗體上。

              “Window List”菜單彈出一個包含所有打開窗口的對話框,從這個對話框可以方便的激活任意C++Builder的窗口。

              “Debug Windows”菜單包含一些有關調試的子菜單。他有以下幾個子菜單項:

              ①“Breakpoints”菜單項用于列表顯示斷點對話框。

              ②“Call Stack”菜單項用于顯示調用堆棧對話框。

              ③“Watches”菜單項用于顯示觀察列表對話框。

              ④“Local Variables”菜單項用來監視局部變量。

              ⑤“Threads”菜單項用于顯示線程狀態框。

            ⑥“Modules”菜單項用于顯示模塊窗口。

              ⑦“Event log”用于顯示事件的記錄。

              ⑧“CPU”用于顯示CPU窗口。

              “Toggle Form/Unit”菜單項用于在窗體和單元之間來回切換活動狀態。

              “Units”菜單項用于顯示查看單元對話框。

              “Forms”菜單項用于顯示查看窗體對話框。

              “Type Library”菜單項用于顯示類型庫編輯器窗口。

              “New Edit Window”菜單項用于在代碼編輯器中打開一個新的頁。

              “Toolbar”菜單項用于顯示/隱藏工具欄。

              (5)在C++Builder集成開發環境中,利用工程(Project)菜單可以編譯、建立應用程序,當然,這些工作的進行必須首先要打開一個工程文件。


              “Add to Project”菜單項用于向工程文件中加入一個文件。

              “Remove from Project”菜單項用于從工程文件中刪除一個文件。

              “Import Type Library”菜單項用于向工程中引入一個類型庫。

              “Add To Repository”菜單項用于將一個工程加入到對象儲藏中。

            “View Source”菜單項用于在代碼編輯器中打開工程源文件。

              “View Makefile”菜單項用于在代碼編輯器中打開擴展名為.BPR的工程Make文件。

              “Add New Project”菜單項用于打開新項目(New Items)對話框,這個對話框中包含有新對象和儲藏在對象儲藏中的對象。

              “Add Existing Project”菜單項用于添加一個已經存在的工程。

              “Compile Unit”菜單項用于編譯上次編譯后任何經過修改了的源代碼程序。

              “Make project”菜單項對當前工程中從上一次編譯后又已經修改的文件進行編譯,并生成最終的應用程序。

              “Build project”菜單項重新編譯工程中所有的文件,而不管文件是否修改。

              “Information for project”菜單項顯示工程所有有關構造工程的信息和狀態。

              “Make All Projects”菜單項構造工程組中所有已經改變的工程。

              “Build All Projects”菜單項重新創建工程組中所有的工程,而不管工程是否改變。

              “Web Deployment Options”菜單項對完成配置的ActiveX控制或活動窗體到網絡服務器進行設置。

              “Web Deploy”菜單項用于在設置了網絡配置選項,并編譯了工程以后,配置最終的ActiveX控制或活動窗體。

              “Options”菜單項用于修改工程的連接、編譯版本等配置。

              (6)C++Builder集成開發環境中的Run菜單包含了C++Builder集成調試的一些菜單命令。這些菜單命令形成了集成調試器的核心功能。


              “Run”菜單項用于編譯并運行應用程序。

            Attatch to Process”菜單項用來調試一個當前正在運行的進程。

              “Parameters”菜單項用于指定應用程序運行時的初始參數。

              “Register ActiveX Server”菜單項用于將ActiveX控制加入到窗口登記表中。

              “Unregister ActiveX Server”菜單項用于將ActiveX控制從窗口登記表中刪除。

              “Install COM+ Objects”菜單項用來安裝微軟的COM+對象。

              “Step Over”菜單項用于一次執行應用程序中的一行,而忽略程序行中的函數調用等。

              “Trace Into”菜單項用于一次執行應用程序中的一行,但是,遇到程序行中的函數調用時,程序的運行則轉移到函數的內部運行,這樣,便于程序調試人員跟蹤程序的運行。

              “Trace To Next Source Line”菜單項執行應用程序,在下一個可執行的程序代碼中停止運行。

              “Run To Cursor”菜單項運行載入的程序,在程序運行到代碼編輯器窗口中的光標所在位置時停下來。

              “Show Execution Point”菜單項將光標放在一個編輯窗口的可執行點上。

              “Program Pause”菜單項用于暫時停止一個正在運行的應用程序。

              “Program Reset”菜單項用于結束當前運行的程序,并將應用程序從內存中釋放,重新載入這個應用程序,然后將光標放在程序運行的起始點上。

              “Inspect”菜單項打開監視對話框,在這個監視對話框中,調試人員可以監視、檢查、核對變量和表達式的值。

              “Evaluate/Modify”菜單項打開評估/修改(Evaluate/Modify)對話框,在這個對話框中,可以評估,也可以修改表達式的值。

              “Add Watch”菜單項用于打開觀察屬性對話框,在這個觀察對話框中,調試人員可以加入、刪除觀察項。

              “Add Breakpoint”菜單項用于設置斷點,通過它下面的菜單項,我們可以用很多種方式設置斷點。

            (7)在C++Builder集成開發環境中,還有Component菜單。在組件菜單下的菜單命令是有關建立、安裝、重建組件的菜單項。其中:

            New Component”菜單項打開組件向導建立新組件。

              “Install Component”菜單項安裝新的組件。

              “Import ActiveX Control”菜單項將ActiveX控制的類型庫加入到C++Builder的工程中。

              “Create Component Template”菜單項定制一個組件,并用新的名字、組件板頁和圖標保存這個組件作為組件模板。

              “Install Packages”菜單項指定工程所需要的程序包。

              “Configure Palette”菜單項用于打開組件板對話框。

              (8)在開發數據庫方面的應用程序的時候,C++Builder集成開發環境中的Database菜單就會發揮作用,在數據庫菜單下包含的菜單項允許程序人員創建、修改、跟蹤、查看數據庫。


              “Explore”菜單項打開結構查詢語言/數據庫瀏覽器,打開的瀏覽器保持著應用程序與遠程數據庫服務之間的連接,同時,也允許程序人員創建、編輯BDE別名和元數據對象。

              “SQL Monitor”菜單項打開SQL監視器,在這個監視器中,我們可以看到實際的、通過SQL連接到遠程數據服務器或者是通過ODBC連接到ODBC數據源的調用語句。

              “Form Wizard”菜單項使用數據庫窗體向導創建一個包含有顯示從一個局部或者遠程數據庫獲取數據的窗體。

              (9)工具(Tools)菜單在C++ Builder集成開發環境中也占據著重要的地位。通過工具菜單,我們可以查看、修改集成環境的設置,可以修改工具菜單中的程序列表,也可以創建、編輯映像。



              “Environment Options”菜單項用于定制編輯器、瀏覽器,配置環境的優先性,以及定制組件板的外形等。

              “Debugger Options”菜單項用來對調試環境進行設置。

              “Repository”菜單項用于維護對象儲藏對話框。

              “Import RC Scripts”菜單項將資源文件轉換成C++ Builder的形式,并將轉化后的資源加入到C++ Builder當前工程中。

              “Configure Tools”菜單項顯示工具選項對話框,通過這個對話框,我們可以加入、刪除、編輯工具菜單,從而將常用工具集成到這個菜單中。

              “DataBase Desktop”菜單項顯示數據庫平臺(database desktop),在數據庫平臺上,可以創建和重構數據庫表,或者瀏覽、編輯表中的數據等等。

              “Visual C++ Project Conversition Utility”菜單項用來將Visual C++的工程轉換成C++Builder的工程文件。

              “Image Editor”菜單項啟動映像編輯器(Image editor),在這個映像編輯器中,我們可以創建、編輯資源文件、圖標、位圖以及光標文件。

            (10)Window菜單項是C++ Builder6新提供的一個菜單單元。



              “Form1”在多窗口時切換到第一個窗口。

              “Object Inspector”切換到對象檢查器,方便查看與何改屬性及事件。

              “Object TreeView”使當前的對象樹狀窗口成為焦點。

              “Unit1.cpp,Editor”切換到代碼編輯器中,進行代碼查看與修改。

              “Next Window”多窗口時顯示下一個窗口。窗口通常按創建順序。

              (11)在C++Builder集成開發環境中,最后一個菜單為Help。利用這個幫助菜單,我們可以獲得在線幫助。


              “Contents”菜單項顯示所有C++Builder幫助文件總內容的列表。

              “Index”菜單項顯示使用幫助索引。

              “Inprise Home Page”菜單項用于跳轉到Inprise公司的主頁。

              “C++Builder Home Page”菜單項用于跳轉到Inprise公司的C++Builder主頁。

              “Inprise Programs and Services”菜單項用于跳轉到Inprise公司的產品和服務主頁中。

              “C++Builder Direct”用于通過瀏覽器引導用戶訪問C++Builder相關網站。

              “customize”菜單項用于自定義包含在主幫助內容和索引中的幫助文件。

              “About”菜單項用于顯示C++Builder的版權和版本號。

             

            16.C/C++語言在CB中的一些特定用法

            2)AnsiString是從Delphi中引進來的嗎?

              答:CB的核心組件VCL是用Object Pascal語言寫出的,所以CB的VCL組件的屬性有很多都是使用long string,例如:Text、 Name、Caption等屬性都是使用Object Pascal的long string。基于此關系,CB只好建立了和Object Pascal的long string相應的類別,我們將它稱為AnsiString。

              3)AnsiString與String有什么區別?

              答: C++ Builder在Sysdefs.h頭文件中有這樣的定義:

              typedef  AnsiString String;

              從這一點在看他二者是完全一樣的,只是書寫起來后者更方便一些,前者是意圖更明了一些。

              4)能介紹一下AnsiString類的一些常見函數及其用法嗎?

              答:當然可以了,下面就常見函數做一下簡單介紹:

              

            成員函數

            語法

            功能

            c_str

            char *_fastcall c_str() const

            返回字符串數據的指針

            Delete

            void _fastcall Delete(int index,int count)

            由index處開始刪除count個字符

            Insert

            void _fastcall Insert(const AnsiString& str,int index)

            由index處開始插入字符str到原字符串中

            IsEmpty

            bool _fastcall IsEmpty() const

            返回字符串是否為空,true表示空字符串

            Length

            int _fastcall Length() const

            返回字符串長度

            LowerCase

            AnsiString _fastcall LowerCase() const

            將字符串中的大寫字母改寫成小寫

            UpperCase

            AnsiString _fastcall UpperCase() const

            將字符串中的小寫字母改寫成大寫

            Pos

            int _fastcall Pos(cont AnsiString& substr)const;

            找出子字符串在原字符串中由第幾個位置開始

            SubString

            AnsiString _fastcall SubString(int index,int count)const

            返回由index處向后取count個字符

            ToDouble

            double _fastcall ToDouble() const

            將字符轉成雙精度數值

            ToInt

            int _fastcall ToInt() const

            將字符轉成整形

            IntToStr

            AnsiString _fastcall IntToStr(int Value)

            將整形轉成字符串

            Trim

            AnstString _fastcall Trim() const

            返回一個新的字符串,它會將原字符串前后空白或控制字符清除后再返回

            WideChar

            wchar_t fastcall WideChar(wchart* dest,int destsize)const

            轉換AnsiString到一個寬字符數組(COM中常用)

            5)AnstString成員函數與傳統字符串函數有何不同之處?

              答:我們可以通過二者的一個對照表來查看他們的之間的不同之處:
              

            AnsiString成員函數

            功能

            傳統字符串函數

            =

            字符串拷貝

            strcpy

            +=

            字符串合并

            strcat

            +

            字符串連接

            ==,!+=,<,<=,>,>=

            字符串比較

            strcmp

            c_str()

            相互轉換

            無,但可以利用指針實現

            Delete

            刪除子字符串

            Insert

            插入子字符串

            Length

            求字符串長度

            strlen

            LowerCase

            字母轉成小寫

            strlwr

            Pos

            找出子字符串

            strstr

            SetLength

            設置字符串長度

            ToInt

            轉成整形

            ToDouble

            轉成雙精度

            sprintf

            UpperCase

            字母轉成大寫

            strupr


              6)如何實現傳統字符串與AnsiString字符串的相互轉換?

              答:傳統的C語言是使用字符來組成字符串的(字符串末尾必須有’\0’做為結束標志),其格式和AnsiString并不相同。由于在CB中我大量使用AnsiString格式,所以有時也難免要進行一些轉換,我們可以通過下列三種方法來實現:

              方法1:AnsiString字符串轉換成字符串數組:

              先利用AnsiString類別中的c_str()方法轉換成傳統字符串數組,再用strcpy拷貝,將它拷貝到字符數組中去:

              char s1[20];

              strcpy(s1,Edit1->Text.c_str());

              方法2:AnsiString轉換成傳統字符串可以利用字符指針來實現:

              可以通過字符指針來實現:

              char *s;

              s=Edit->Text.c_str();

              方法3:利用字符指針實現傳統字符串轉換成AnsiString:

              char *s=”試一試,看看能不能成功!”;

              Edit->Text=s;

            7)Set類如何用?

              答:嚴格來說,CB的集合(Set)并不是一個類,而是一個類模板(Class Template)。它用來實現集合這個抽象數據類型。

              使用它可以定義一個實際的集合類型,它的一般聲明模式是這樣的:

              typedef Set<type,minval,maxval>ClassName;

              其中type用來指定集合元素的類型;minval指定集合元素的最小值;maxval指定集合元素的最大值。

              舉個例子來說,若是我們定義一個以TupperSet為名的集合類,這個集合類的可能元素為26個大寫字母,我們可以這樣定義:

              typedef Set<char,’A’,’Z’>TupperSet;


              應用時我們可以使用這個集合類聲明一個具體的集合對象,如:

              TupperSet UpperSet;


              8)能不能告訴我一下Set類有哪些常見的使用方法或操作符?

              答:當然可以了,以下是它的一些常見操作符和方法:

              Clear方法:清除集合對象內的所有元素,使集合成為空集;

              Contains方法:查詢集合中是否包含指定的元素,其聲明為:

              bool _fastcall Contains(const T el)const;
              operator-:兩個集合進行求差運算,結果集合包含兩個集合中不相同的元素;
              operator*:求兩個集合的交集;
              operator+:求兩個集合的并集;
              operator<<:添加一個元素到指定集合;
              operator>>:從集合中刪除一個指定元素。
              其實Set類的應該比較廣泛,比如判斷我們是否按下鼠標左鍵,可以用如下的語句:
              if(Shift.Contains(ssLeft))。

              
              9)聽說在CB中有一個可以定時觸發的組件,能否介紹一下它的屬性和事件嗎?

              答:你說的是Timer組件,它位于組件欄的System組件頁中。使用它并不難,因為他的屬性、事件特別少:

              Enabled屬性:布爾類型。缺省時為true,這時定時器將經過一段時間就觸發OnTimer事件。在這個屬性從false變為true時,時鐘將重新開始計時。

              Interval屬性:這個屬性用來設置每隔多長時間就觸發一次OnTimer事件,以毫秒為單位。缺省為1000毫秒。

              OnTimer事件:這個事件在Enabled屬性設置為true時,每隔Interval屬性指定的時間觸發一次。
              
              10)原來Timer組件如此簡單,但我還有些不懂為什么說它是一個可找替循環語句,能否舉一個例子說明下OnTimer事件?

              答:它不能取替循環語句的,當然在特定條件下,他比循環語句更有效,尤其是在涉及到按時循環時。在我編寫的春輝網絡電視里有一段OnTimer事件代碼,可供大家參考:

              void __fastcall TForm1::Timer1Timer(TObject *Sender)
              {
              String s1="春輝(CH)軟件   作者:董維春  王巖   CH工作室";
              if(i<=54)
              {
              Label1->Caption=s1.SubString(i,18);
              i+=2;
              }
              else
              {
              i=1;
              }
              }
              (未完待續)

            posted on 2007-06-29 11:22 東東會會 閱讀(3352) 評論(0)  編輯 收藏 引用 所屬分類: C++Builder 基礎

            久久亚洲高清综合| 久久国产精品77777| 日本加勒比久久精品| 亚洲国产香蕉人人爽成AV片久久 | 大蕉久久伊人中文字幕| 久久精品无码一区二区三区免费| 亚洲欧洲中文日韩久久AV乱码| 亚洲AV无码久久寂寞少妇| 久久免费精品一区二区| 一本久久综合亚洲鲁鲁五月天| 久久发布国产伦子伦精品| 色欲综合久久躁天天躁| 97久久超碰成人精品网站| 久久影视综合亚洲| 97精品伊人久久大香线蕉app| 久久频这里精品99香蕉久| 青青青青久久精品国产 | 无码人妻少妇久久中文字幕| 亚洲国产天堂久久综合| 欧美日韩中文字幕久久伊人| 少妇久久久久久被弄高潮| 久久综合偷偷噜噜噜色| 办公室久久精品| 久久亚洲国产欧洲精品一| 久久久久久国产精品无码超碰| 久久午夜免费视频| 久久精品国产黑森林| 91精品国产高清久久久久久91| 久久亚洲欧美国产精品| 久久精品中文字幕一区| 亚洲国产成人精品无码久久久久久综合| 国内精品久久国产大陆| 精品久久久久久国产| 久久久无码一区二区三区| 99久久国产精品免费一区二区| 一本久久免费视频| 久久精品国产亚洲αv忘忧草| 久久人人爽人人爽人人片AV东京热 | 好久久免费视频高清| 久久91综合国产91久久精品| 狠狠色丁香久久婷婷综|