




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Borland C+ Builder 程序设计基础,2009.7 ,1,主要内容:,Windows程序设计基础 Borland C+ Builder 6.0 集成开发环境 应用程序的用户界面元素 复杂窗体设计和对话框 应用程序框架设计 文件与目录处理,2,应用程序界面设计1,菜单 工具栏与状态行 对话框,菜 单,菜单设计器和菜单组件 MainMenu组件位于组件面板的Standard页上,将它放入一个应用程序的窗体,然后我们就可以利用菜单设计器(Menu Designer)设计菜单了。,菜单设计器是BCB提供的一个可视化工具,使用起来直观简便。右击窗体中的MainMenu组件,出现该组件的快捷
2、菜单,其中第一项就是“Menu Designer”。选择该项就打开了菜单设计器,如图3-1所示。BCB提供的另一种菜单组件是下拉菜单(PopupMenu),它也可以用Menu Designer来设计。两种菜单中的各个菜单项都是TMenuItem类的对象,它们是由Menu Designer在设计过程中添入到菜单组件中去的,如图3-2所示。,图3-1 MainMenu 的快捷菜单,图3-2 在Menu Designer中设计,在Menu Designer中的操作主要用鼠标。当选中某个菜单项时,Object Inspector会切换到对应该项的MenuItem对象,此时可输入它的Caption属性,
3、也就是菜单项的名称。 若要删除某菜单项,可在Menu Designer内选中该项后按Delete键,也可右击该菜单项打开它的MenuItem快捷菜单,再选该菜单上的Delete项。 若要插入菜单项,可在选中插入位置后按Insert键,也可右击该菜单项打开它的MenuItem快捷菜单,再选该菜单上的Insert项。若要移动菜单项的位置可以用鼠标进行拖曳完成。,此外,还可用MenuItem的快捷菜单上的Create SubMenu选项为菜单项增加一个子菜单,这样就可构建任意层数的菜单系统。如果要在程序运行中动态地增减菜单项,则可在程序中调用TMenuItem对象的Add 和Delete方法。 根据
4、菜单在应用程序中的作用,它的选项常被指派执行某项功能或操作。BCB中的MenuItem对象都有OnClick事件,为该事件编写的代码即被指派到菜单项对应的操作中。在Menu Designer中双击菜单项即可打开对应的OnClick事件代码段;在窗体设计区中单击菜单项也能打开OnClick事件代码段。当然,还可以在Object Inspector中打开MenuItem的OnClick事件。,下面是菜单组件的常用属性。 1AutoMerge属性 AutoMerge属性用于菜单的合并,当子窗体上菜单的该属性为true时,则在执行程序中会将子窗体上的菜单自动合并到它的父窗体的菜单上。在该属性不为tru
5、e时,用户仍可执行Merge方法将两个菜单合并。UnMerge方法则将已合并的菜单拆分。,2Caption 属性 菜单项上的文字就是该菜单项的Caption属性值。缺省的BCB会将该Caption作为菜单项的Name,但如果Caption中有汉字,则菜单项的Name被缺省设置为N1、N2等。 如果在Caption的某个字母前加上一个 /- void _fastcall TForm1:ToolBar1Click(TObject *Sender) /当选择“ToolBar”时能切换该项的Checked属性 ToolBar1-Checked = ! (ToolBar1-Checked); /使该菜单
6、项的Checked属性值取反 /-,void _fastcall TForm1:FileEnabled1Click(TObject *Sender) /当选择 “File Enabled”时使“File”下拉菜单有效,并使“File Enabled”菜单项失效以及“File Disabled”菜单项有效 File1-Enabled = true; FileEnabled1-Enabled = false; FileDisabled1-Enabled = true; /- void _fastcall TForm1:FileDisabled1Click(TObject *Sender) /当选择
7、 “File Disabled”时使“File”下拉菜单失效,并使“File Disabled”菜单项失效以及“File Enabled”菜单项有效 File1-Enabled = false; FileEnabled1-Enabled = true; FileDisabled1-Enabled = false;, /- void _fastcall TForm1:HideHelp1Click(TObject *Sender) /当选择 “Hide Help”时使“Help”项不可见 Help1-Visible = false; ShowHelp1-Enabled = true; HideHe
8、lp1-Enabled = false; /-,void _fastcall TForm1:ShowHelp1Click(TObject *Sender) /当选择“Show Help”时使“Help”恢复为可见 Help1-Visible = true; ShowHelp1-Enabled = false; HideHelp1-Enabled = true; /- void _fastcall TForm1:New1Click(TObject *Sender) /当选择 “New”、“Open”或“Save”时分别出现一个对话框提示相应的功能“Not Completed” ShowMessa
9、ge (New Has Not Completed); /调用通用函数ShowMessage输出信息 ,/- void _fastcall TForm1:Open1Click(TObject *Sender) ShowMessage (Open Has Not Completed); /调用通用函数ShowMessage输出信息 ,/- void _fastcall TForm1:Save1Click(TObject *Sender) ShowMessage (Save Has Not Completed); /调用通用函数ShowMessage输出信息 ,运行该程序,选择File Disab
10、led后的画面如图3-4所示,选择Hide Help后的画面如图3-5所示,选择ToolBar后的画面如图3-6所示,再次选择ToolBar后的画面如图3-7所示。在选择了FileNew后弹出的消息框如图3-8所示。,图3-4 选择File Disabled,图3-5 选择Hide Help,图3-6 选择ToolBars使Checked被勾选,图3-7 再次选择ToolBars取消Checked勾选,图3-8 选择FileNew 弹出消息框,工具栏与状态行,大部分Windows应用程序都有一个工具栏,利用工具栏上的图形按钮可加快操作速度,一般工具栏位于窗体的顶部。在BCB中有许多方法可设计出
11、不同风格的工具栏,其中较简单直接的方法是使用Panel和SpeedButton控件进行的。,面板和加速按钮 1面板 面板(Panel)控件位于组件面板的Standard页上的倒数第二个位置,它是一个容器组件,即可以将其它组件放入面板。它的主要功能就是制作工具栏和状态栏。以下是面板的常用属性。 1) Align属性 为设置面板在窗体上的位置,可以使用它的Align属性。该属性取值范围为alTop、alRight、alBottom、alLeft、alClient和alNone。,缺省值为alNone,此时可用鼠标操作确定其位置和尺寸。当作为工具栏使用时,面板常被放置在窗体顶部位于菜单条之下,我们可
12、以用alTop指定该位置。这样,即使窗体尺寸改变,面板也能准确定位,而且能自动改变宽度以保持横贯整个窗体。alRight、alLeft、alBottom和alTop类似,分别适合将面板定位到窗体的右、左和底部。alClient则定位在整个窗体的客户区。,2) BevelInner和BevelOuter属性 BevelInner和BevelOuter这两个属性决定了面板的外观,适当搭配二者的值可以产生不同的三维效果。它们的取值范围为bvLowered、bvNone、bvRaised和bvSpace。缺省值BevelInner=None, BevelOuter=Raised。 3) Caption
13、属性 面板也有Caption属性,因此可在面板上显示文字。此时,它的功能类似于Label组件,但可以制作出三维效果,简单的状态栏就是利用面板的Caption制作的。在用作工具栏时,一般应将Caption置为空白。 4) Visible属性 Visible属性为false时,可隐藏面板及面板上的组件。,2加速按钮 加速按钮(SpeedButton)是位于Additional页上第二个位置的组件。它与按钮类似,但可以在表面上放置图形。与按钮或位图按钮(BitButton)相比,它没有窗口句柄,不消耗Windows资源,绘制速度也更快一点。所以,非常适合用作工具栏上的工具按钮。加速按钮有以下主要属性
14、。,1) Glyph属性 Glyph属性指定一个图像文件放到加速按钮的表面。点击Object Inspector中该属性右侧的“.”按钮就打开Picture Editor对话框,可选“Load.”按钮指定一个图片文件,按“OK”完成装入,如图3-9所示。一般应装入小型位图或图标(2020像素左右),位图文件既可通过各种途径收集得到,也可利用BCB的Image Editor工具自行绘制。在BCB的目录C:Program FilesCommon FilesBorland SharedImagesButtons下就有许多按钮图标。,图3-9 输入Glyph属性时选择位图,2) NumGlyphs属性
15、 NumGlyphs属性可输入数字14,缺省值为1,它表示加速按钮中包含的位图的数目。当该数目为2时,第一个位图为按钮的标准状态,第二个位图用于按钮失效时。当该数目为4时,第一、二个位图作用同前,第三个位图用于单击按钮时,第四个位图用于按钮持续保持按下状态时。前面提到Buttons目录下有许多按钮的位图,如果打开这些位图观察可以发现它们都是“两位一体”的,即图片中横向并排着两个同样尺寸的类似图形。,其实这些图形就是专门被定制成可以用作NumGlyphs等于2时的按钮表面贴图。类似地,如果用于NumGlyphs等于4时的贴图,图片中必须包含从左到右排列的四个同样尺寸的小图形。,3) Hint 和
16、ShowHint属性 Hint 和ShowHint属性用于产生提示,该两个属性并非加速按钮专有。但由于仅靠一幅简单的位图难以表达复杂的意义,加速按钮更加需要有自我提示的功能。Hint是字符串类型的属性,应输入提示的内容;ShowHint则是bool型,当它为true时组件具有提示功能。,工具栏设计范例 下面给出一个工具栏程序范例。 【例3-2】 在前面例3-1的基础上,保留主菜单上的“File”、“Edit”和“Tools”三个下拉菜单,删去其余菜单项。往该程序窗体内放入一个由面板Panel1和三个加速按钮组成的工具栏。Panel1的Align设置为alTop;三个加速按钮的Glyph中分别装
17、入三个位图,它们的ShowHint都设置为true, Hint属性分别输入“New”、“Open”和“Save”。,再将菜单项“ToolBar”的Checked属性设置为true,表示程序在初始状态下显示工具栏。各菜单项的OnClick基本上与例3-1中相同,但“ToolBar”的OnClick事件中应增加改变Panel1的Visible属性的语句。,程序中,工具栏上三个加速按钮的功能应分别等同于菜单上的“New”、“Open”和“Save”,即它们可以分别与三个菜单项的OnClick事件分享代码。因此,可按如下方式定义三个按钮的OnClick事件:选中第一个按钮,在Object Inspec
18、tor中选Events页,在OnClick事件右面组合框中选择New1Click (即菜单项“New”的OnClick事件的名称),然后对第二、三个按钮进行类似操作,如图3-10所示。,图3-10 为加速按钮选择OnClick,下面是该范例中惟一需要修改的代码段: void _fastcall TForm1:ToolBar1Click(TObject *Sender) ToolBar1-Checked = ! ToolBar1-Checked; if (ToolBar1-Checked) Panel1-Visible = true; else Panel1-Visible = false; ,
19、程序运行开始时的画面如图3-11所示。若把鼠标靠近加速按钮并停留,就会看到提示信息。选择ToolBar菜单项,能打开或关闭工具栏,图3-12为工具栏已被关闭。当点击三个加速按钮时,与点击菜单项“New”、“Open”和“Save”时一样,会出现一个显示“XXX Has Not Completed”的信息框。我们也可以把组合框、微调按钮(UpDown)等控件放到面板组件上,做出一个像Word中那样有更加复杂功能的工具栏,如图3-13 所示。,图 3-11 程序初始画面 图 3-12 工具栏已关闭,图3-13 一个复杂的工具栏,StatusBar组件 通常在Windows应用程序的底部有一个状态行
20、,用以提供一些系统信息和提示。C+ Builder中我们可以利用面板组件制作状态行,但效果较差。本节中将介绍StatusBar组件,它位于Win32页上,是非常适合用作状态行的。 StatusBar 可以看作是面板的容器,它可包含有若干面板,从左向右排列。其中每个面板都能被独立控制,用于显示一项信息。图3-14为含有五个面板的StatusBar组件。,下面简单介绍一下StatusBar的主要属性。 1Align属性 用法与面板的Align一样,但作为状态行组件,其缺省值被设置为alBottom。 2Font属性 Font属性可设置状态行中使用的字体,但必须同时设置UseSystemFont为f
21、alse,否则状态行使用系统定义的字体。,图 3-14 StatusBar组件,3SimplePanel属性 SimplePanel属性为true时,StatusBar具有一个简单面板(Panel)的一切特征,而不能作为面板容器使用。一般,应设置SimplePanel为false。 4Panels属性 Panels属性是StatusBar最主要的属性,它是一个数组,其中的每个元素代表一个面板。当SimplePanel为false时,可点击Panels属性值右侧的“.”按钮打开一个面板设置对话框,如图3-15所示。打开该对话框的另一个办法是右击StatusBar,当出现快捷菜单后,再选择“Pan
22、els Editor”。,图3-15 使用Panels Editor,Panels Editor是一个小窗口,开始时为空,每次点击工具栏上的“New”(左面第一个)按钮就在窗口中增加一个项,相应地StatusBar中也增加了一个面板。当在Panel Editor中选中某项时,Object Inspector中会切换到与其对应的面板,我们就能设置该面板的Width、Bevel和Alignment等属性。Bevel属性与面板的外观有关,一个状态行组件的各个面板可分别有不同的Bevel值。Alignment的可选值为taCenter、taLeftJustify和taRightJustify,分别表示
23、显示文字的位置为居中、靠左和靠右。,状态行设计范例 下面给出一个状态行设计的范例。 【例3-3】 程序的主菜单上有“File”和“Edit”两项,窗体中间放了一个TMemo控件,可输入文本,窗口底部有一个被分隔为五个部分的状态行,如图3-16所示。这五部分显示的信息分别为: (1) 时间,显示为XX:XX:XX; (2) Memo控件中当前插入点的位置,它用Y行、X列形式表示,Y、X起始值都是0; (3) Memo中文本的字数;,(4) 键盘上Insert键的状态,显示为INS 或空白; (5) 键盘上NumLock键的状态,显示为NUM 或空白。 我们让前三项居中显示,后两项靠左显示,如图3
24、-16所示。,图3-16 程序运行时状态行中显示有关信息,(操作要点将StatusBar控件放入窗体,设置其Align 为alBottom,SimplePanel 和UseSystemFont为false,并选择适当的字体和颜色。右击StatusBar打开Panel Editor,五次点击New工具按钮添加面板,将五个面板的Width分别设置为100、100、100、50和50,并将前三项Alignment设置为taCenter,后两项设置为taLeftJustify。,为了能实时显示动态信息,我们需要每隔一小段时间将状态行刷新一遍,因此要在Form1中加入一个定时器组件Timer1(位于组件
25、面板上System页)。我们将该Timer的Interval设为100,Enabled设为true,并为Timer1编写OnTimer事件的代码如下: void _fastcall TForm1:Timer1Timer(TObject *Sender), AnsiString str1; /显示时间 TDateTime DateTime =Time ( ); StatusBar1-Panels-Items0 -Text = 时间:+TimeToStr (DateTime); /显示插入点位置 str1=位置:; str1=str1+IntToStr (Memo1-CaretPos.y)+行;
26、str1=str1+IntToStr (Memo1-CaretPos.x)+列; StatusBar1-Panels-Items1 -Text = str1; /显示字数,str1= Memo1-Lines-Text; StatusBar1-Panels-Items2 -Text = 字数:+IntToStr (str1.Length ( ); /显示NUM状态 if (GetKeyState (VK_NUMLOCK) StatusBar1-Panels-Items3-Text =NUM; else StatusBar1-Panels-Items3-Text = ; /显示INS状态,if (
27、GetKeyState (VK_INSERT) StatusBar1-Panels-Items4-Text =INS; else StatusBar1-Panels-Items4-Text = ; ,【评析】 (1) StatusBar1-Panels-Itemsi-Text 属性代表状态行中第i个面板上的文本,(i=0,1,2,3,4),我们只要将有关信息放入相应的Text属性即可。 (2) 可用Time函数取得TDateTime类型的时间信息,再用函数TimeToStr把它转换为 AnsiString字符串类型。 (3) Memo1-CaretPos.y和Memo1-CaretPos.x为
28、当前插入位置。str1=Memo1-Lines-Text取得Memo1中的文本,再用AnsiString 的Length方法求出它的长度,即文本中的字数。,注意:计算字数时每次回车会增加两个字(回车符和换行符)。 (4) GetKeyState 是一个API函数,可取到键盘上各个键的状态。 (5) 本例中使用了Timer组件,该组件起到定时控制的作用。它的Interval属性指定时间间隔,本例中设置为100,表示每间隔100毫秒(0.1秒)调用一次时控过程(由OnTimer事件确定)。 注意:设置Timer的Enabled为true,以启动Timer的时控功能。,(6) 本例中为了能显示一些有
29、意义的信息,使用了若干Windows API函数(在本书提高篇中将较系统地介绍Windows API)。对初学者来说,如何在各种场合取得所需的状态信息,可以是一个逐渐积累的过程。,对 话 框,对话框与模态窗口 设计对话框与设计普通的窗体没什么本质区别,但对话框一般具有如下特征: (1) 在程序中不作为主窗体,通常被缺省命名为Form2或Form3等。在BCB中为了给应用程序加入第二个窗体(或第三个窗体等),可选FileNewForm菜单项或点击相应的工具按钮。,对于有两个以上(含两个)窗体的程序,在与主窗体Form1对应的Unit1.h(或Unit1.cpp)中一般要加入 #include U
30、nit2.h语句(或执行FileInclude Unit Hdr.命令),否则,在Form1中就不能识别Form2中定义的对象。至于是否要在uint2.h中加入 #include Unit1.h,则应看具体情况。 (2) 窗口标题一般应为对话框名称,窗口内没有主菜单。边框上无控制按钮,也不能改变窗口尺寸。要做到这一点,较简单的方法是设置BorderStyle属性为bsDialog。,(3) 窗口往往以模态方式打开,Windows的窗口可定义为模态窗口或非模态窗口。当应用程序打开一个模态窗口后,只要该窗口未关闭,就不能对程序中的其它窗口进行任何操作,以此方式强制用户对该模态窗口作出响应。所谓以模
31、态方式打开即指使打开的窗口成为模态窗口。 在BCB中一个窗口是否为模态一般并非取决于其设计阶段,而是由打开该窗口时使用的方法所确定。如果一个窗口是被Show方法打开的,那么它就是非模态方式的;如果用ShowModal方法打开窗口,那么该窗口就是模态的。,信息框 C+Builder中使用ShowMessage和MessageDlg函数产生标准的Windows信息框,这种信息框是一个模态窗口。 ShowMessage使用方便但功能较弱,只能显示一个带有OK 按钮的信息框。在例3-1中我们已经用过该函数。 MessageDlg函数适用范围更广。它有四个参数,BCB 对该函数声明如下: int_fas
32、tcall MessageDlg(const AnsiString Msg, TMsgDlgType DlgType, TMsgDlgButtons Buttons, int HelpCtx);,Msg参数指定了显示的信息。DlgType参数可指定信息框的类型,该参数为TmsgDlgType类型,它的取值范围及含义如表3-1所示。Buttons参数指定了信息框所包含的按钮,类型为TmsgDlgButtons,它的取值范围及含义如表3-2所示。HelpCtx参数可指定当用户单击Help按钮或按F1键时所弹出的帮助主题的帮助上下文ID。MessageDlg函数返回一个整数,代表用户在对话框中所选的
33、按钮,该值必定为以下预定义常数之一:mrNone、mrAbort、mrYes、mrOk、mrRetry、mrNo、mrCancel、mrIgnore、mrAll。,表3-1 DlgType 参数的取值,表3-2 Buttons 参数的取值,下面一段代码出现一个信息框询问用户是否退出程序,若选择Yes,则关闭Form1,使程序结束。代码运行时的画面如图3-17所示。 if (MessageDlg (是否退出程序?, mtConfirmation, TMsgDlgButtons ( ) Close ( );,图3-17 使用MessageDlg 函数,通用对话框组件 在组件面板的Dialog页上有
34、一组共10个通用对话框组件可供使用。这些对话框实际上是由Windows提供的,BCB把它们包装了一下,使用更加方便了。其中,最常用的是OpenDialog(打开文件)、SaveDialog(保存文件)、FontDialog(字体)和ColorDialog(颜色)对话框,图3-18图3-21为这四个对话框的画面。另外几个是OpenPictureDialog(打开图形)、SavePictureDialog(保存图形)、PrintDialog(打印)、PrinterSetupDialog(打印机设置)、FindDialog(查找)和ReplaceDialog(替换)对话框。,图3-18 OpenDi
35、alog,图3-19 SaveDialog,图3-20 FontDialog,图3-21 ColorDialog,这些对话框的用法是类似的:先调用组件的Execute方法打开对话框供用户操作,当操作完成对话框被关闭后,用户选定的对象被存放在该组件的相应属性内。如操作OpenDialog和SaveDialog对话框所选定的文件名被存放在FileName属性内,FontDialog中选定的字体被存放在Font属性内,ColorDialog中选定的颜色则被存放在Color属性内。,【例3-4】 在窗体Form1中放入一个TColorDialog组件ColorDialog1,再放入一个按钮组件Butt
36、on1。为Button1的OnClick事件编写如下代码: void_fastcall TForm1:Button1Click (TObject *Sender) if (ColorDialog1-Execute ( ) Form1-Color = ColorDialog1-Color; ,程序运行时,点击Button1弹出颜色对话框,在对话框中选定颜色并点击“确定”后,程序使Form1的颜色改变为所选颜色。 注意:ColorDialog1-Execute ( ) 函数返回一个整型值,若用户在对话框中选定后按“确定”退出则该值为1,若按“取消”退出则为0。因此,根据用户是否选中了某种颜色,程序中用if 语句来判定是否需要设置窗体的颜色。具体设置窗体颜色则是通过“Form1-Color = ColorDialog1-Color;”语句完成的。,习 题,1. 试按
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 行政管理师试题难易程度解读及答案
- 包头课题立项申报书
- 课题获奖申报书
- 2025注册会计师复习路径规划试题及答案
- 微生物抗药性检测的流程试题及答案
- 课题申报书怎么汇报
- 劳动教育模式课题申报书
- 2025年广东省东莞市南开实验学校高三第三次测评语文试卷含解析
- 江苏省南京师范大学苏州实验学校2025年高三下学期第六次检测语文试卷含解析
- 2025年注册会计师考试思维导图复习法试题及答案
- 精细化工产品公司企业经营战略方案
- 缺血缺氧性脑病详解课件
- 自动打铃控制器plc课程设计
- 最新司法鉴定程序通则课件来源于司法部司法鉴定局
- 北师大版一年级英语下册期中测试卷
- 冠状动脉CT解剖详解
- 档案学概论重点知识梳理
- 地下连续墙钢筋笼起重吊装专项施工方案
- 单值和移动极差X-MR控制图
- 进口产品委托代理合同协议书范本
- 变压器容量与母排选型配合表81035
评论
0/150
提交评论