《CBuilder应用程序界面设计.pptx》由会员分享,可在线阅读,更多相关《CBuilder应用程序界面设计.pptx(182页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、会计学1C Builder应用程序界面设计应用程序界面设计PPT课件课件第一页,共182页。3.1 菜菜 单单 n n 3.1.1 菜单设计器和菜单组件n n MainMenu组 件 位 于 组 件 面 板 的Standard页上,将它放入一个(y)应用程序的窗体,然后我们就可以利用菜单设计器(Menu Designer)设计菜单了。第1页/共182页第二页,共182页。n n 菜 单 设 计(shj)器 是BCB提供的一个可视化工具,使用起来直观简便。右击窗体中的MainMenu组件,出现该组件的快捷菜单,其中第一项就是“Menu Designer”。选择该项就打开了菜单设计(shj)器,如
2、图3-1所示。BCB提供的另一种菜单组件是下拉菜单(PopupMenu),它 也 可 以 用Menu Designer来设计(shj)。两种菜单中的各个菜单项都是TMenuItem类的对象,它们是由Menu Designer在设计(shj)过程中添入到菜单组件中去的,如图3-2所示。第2页/共182页第三页,共182页。图3-1 MainMenu 的快捷(kui ji)菜单 第3页/共182页第四页,共182页。图3-2 在Menu Designer中设计(shj)第4页/共182页第五页,共182页。n n 在Menu Designer中的操作主要用鼠标。当选中某个菜单项时,Object I
3、nspector会切换到对应该项的MenuItem对象,此时可输入它的Caption属性,也就是菜单项的名称。若要删除(shnch)某菜单项,可在Menu Designer内选中该项后按Delete键,也可右击该菜单项打开它的MenuItem快捷菜单,再选该菜单上的Delete项。若要插入菜单项,可在选中插入位置后按Insert键,也可右击该菜单项打开它的MenuItem快捷菜单,再选该菜单上的Insert项。若要移动菜单项的位置可以用鼠标进行拖曳完成。第5页/共182页第六页,共182页。n n 此外,还可用MenuItem的快捷菜单上的Create SubMenu选项为菜单项增加一个子菜单
4、,这样就可构建任意层数的菜单系统。如果要在程序运行中动态地增减菜单项,则可在程序中调用TMenuItem对象的Add 和Delete方法。n n 根据菜单在应用程序中的作用,它的选项常被指派执行某项功能或操作。BCB中的MenuItem对象都有OnClick事件,为该事件编写的代码即被指派到菜单项对应的操作中。在Menu Designer中双击菜单项即可打开(d ki)对应的OnClick事件代码段;在窗体设计区中单击菜单项也能打开(d ki)OnClick事件代码段。当然,还可以在Object Inspector中打开(d ki)MenuItem的OnClick事件。第6页/共182页第七页
5、,共182页。n n 下面是菜单组件的常用属性。n n 1AutoMerge属性n n AutoMerge属性用于菜单的合并,当子窗体上菜单的该属性为true时,则在执行程序中会将子窗体上的菜单自动合并到它的父窗体的菜单上。本章3.4.2节将给出有关菜单合并的详细讲解和范例。在该属性不为true时,用户(yngh)仍可执行Merge方法将两个菜单合并。UnMerge方法则将已合并的菜单拆分。第7页/共182页第八页,共182页。n n 2Caption 属性n n 菜单项上的文字(wnz)就是该菜单项的Caption属性值。缺省的BCB会将该Caption作为菜单项的Name,但如果Capti
6、on中有汉字,则菜单项的Name被缺省设置为N1、N2等。n n 如果在Caption的某个字母前加上一个&符号,则该字符在显示时就会有一个下划线,这一字符就被称为加速键,也就是说,当用户按下Alt键,再加上该字符时,即可选择该菜单。如果对Caption属性输入一个“-”符号(减号),则在菜单上显示为一条横线,我们可用此线对菜单项进行分组。第8页/共182页第九页,共182页。n n 3Checked 属性n n Cheched属性若为true,则会在菜单(ci dn)项左方显示一个钩,使该菜单(ci dn)项具有和一个复选按钮类似的作用。但注意,与复选按钮不同 的 是,BCB不 会 自 动
7、对Checked置值,用户必须在该菜单(ci dn)项的OnClick中写入改变Checked值 的代码。n n 4Enabled 属性n n 与其它控件的Enabled的用法属性类似,该属性为false时,对应的菜单(ci dn)项颜色变灰且不能被选择。该属性不仅可用于控制主菜单(ci dn)上的项,也可控制下拉菜单(ci dn)上的项。若要相应菜单(ci dn)项变为不可见,则可设置Visible为false。第9页/共182页第十页,共182页。n n 5GroupIndex属性n n GroupIndex属 性 是 整型值,它可控制下拉菜单在主菜单中的位置(即顺序)。一般用于在菜单合并
8、时,确定合并后菜单项的位置。n n 6ShortCut属性n n ShortCut属性定义了一个可快速访问某个菜单项的快捷键。一般地,该快捷键显示在菜单项的右边(yu bian)。在菜单中可以作为快捷键的一般都是功能键(如F1,F2,)或组合键(如Ctrl+A,Ctrl+F2,Alt+F3,)。菜单项被选中时,在Object Inspector中打开ShortCut的组合框选取或输入。第10页/共182页第十一页,共182页。n n 7Visible 属性n n Visible属性为false时,对应(duyng)的菜单项不可见(不可见的项当然也是不能被选取的)。当某一项不可见时,排列在该项之
9、后的各项位置会自动上移。第11页/共182页第十二页,共182页。n n 3.1.2 菜单设计(shj)范例n n 【例3-1】在应用程序中建立如下菜单系统:主菜单含 六 个 项,分 别 为“File”、“Edit”、“View”、“Windows”、“Tools”和“Help”。n n “File”下 拉 菜 单 有 “New”、“Open”、“Save”、“Print”、“Print Setup”和“Exit”等六项。它们被分成三个组,并对“New”和“Exit”分别定义了快捷键F10和Ctrl+E。n n “View”下拉菜单中有“File Enabled”、“File Disabled
10、”、“Hide Help”和“Show Help”等四项。第12页/共182页第十三页,共182页。n n “Tools”下拉菜单中有一项“ToolBar”。n n “Edit”、“Windows”和“Help”的下拉菜单为空。n n 图3-3为在Menu Designer 中设计(shj)该菜单。我们看到菜单中有两条将菜单项分组的横线,它们是通过在Caption中输入“-”号得到的。n n第13页/共182页第十四页,共182页。图3-3 在Menu Designer中设计(shj)菜单第14页/共182页第十五页,共182页。n n 我们希望该菜单系统能实现(shxin)以下的功能:n n
11、 当选择“Exit”时能退出程序。n n 当选择“ToolBar”时能切换该项的Checked属性。n n 当选择“File Enabled”时使“File”下拉菜单有效,并使“File Enabled”菜单项失效以及“File Disabled”菜单项有效。n n 当 选 择 “File Disabled”时使“File”下拉菜单失效,并使“File Disabled”菜单项失效以及“File Enabled”菜单项有效。第15页/共182页第十六页,共182页。n n 当选择“Hide Help”时使“Help”项不可见。n n 当选择“Show Help”时使“Help”恢复为可见。n
12、n 当 选 择 “New”、“Open”或“Save”时分别出现一个对话框提示相应的功能“Not Completed”。n n 选择其它(qt)项时程序不进行处理。n n 为 此,设 计 时 应 使“Show Help”和“File Enabled”菜单项的Enabled为false。然后为各菜单项的OnClick事件编写以下代码:第16页/共182页第十七页,共182页。n nvoid _fastcall TForm1:Exit1Click(TObject*Sender)void _fastcall TForm1:Exit1Click(TObject*Sender)n n n n Form1
13、-Close();Form1-Close();n n n n/-/-n nvoid _fastcall TForm1:ToolBar1Click(TObject*Sender)void _fastcall TForm1:ToolBar1Click(TObject*Sender)n n n n ToolBar1-Checked ToolBar1-Checked=!(ToolBar1-Checked);(ToolBar1-Checked);/使使该该菜菜单单项项的的CheckedChecked属属性性(sh(sh xng)xng)值取反值取反n n n n/-/-第17页/共182页第十八页,共1
14、82页。n nvoid _fastcall TForm1:FileEnabled1Click(TObject*Sender)void _fastcall TForm1:FileEnabled1Click(TObject*Sender)n n n n File1-Enabled=true;File1-Enabled=true;n n FileEnabled1-Enabled=false;FileEnabled1-Enabled=false;n n FileDisabled1-Enabled=true;FileDisabled1-Enabled=true;n n n n/-/-n nvoid _f
15、astcall TForm1:FileDisabled1Click(TObject*Sender)void _fastcall TForm1:FileDisabled1Click(TObject*Sender)n n n n File1-Enabled=false;File1-Enabled=false;n n FileEnabled1-Enabled=true;FileEnabled1-Enabled=true;n n FileDisabled1-Enabled=false;FileDisabled1-Enabled=false;第18页/共182页第十九页,共182页。n nn n/-n
16、nvoid _fastcall TForm1:HideHelp1Click(TObject*Sender)n nn n Help1-Visible=false;n n ShowHelp1-Enabled=true;n n HideHelp1-Enabled=false;n nn n/-第19页/共182页第二十页,共182页。n nvoid _fastcall TForm1:ShowHelp1Click(TObject*Sender)void _fastcall TForm1:ShowHelp1Click(TObject*Sender)n n n n Help1-Visible=true;He
17、lp1-Visible=true;n n ShowHelp1-Enabled=false;ShowHelp1-Enabled=false;n n HideHelp1-Enabled=true;HideHelp1-Enabled=true;n n n n/-/-n nvoid _fastcall TForm1:New1Click(TObject*Sender)void _fastcall TForm1:New1Click(TObject*Sender)n n n n ShowMessage(New Has Not Completed);ShowMessage(New Has Not Comple
18、ted);n n/调用调用(dioyng)(dioyng)通用函数通用函数ShowMessageShowMessage输出信息输出信息n n 第20页/共182页第二十一页,共182页。n n/-n nn nvoid _fastcall TForm1:Open1Click(TObject*Sender)n nn n ShowMessage(Open Has Not Completed);n n/调用通用函数(hnsh)ShowMessage输出信息n n第21页/共182页第二十二页,共182页。n n/-n nvoid _fastcall TForm1:Save1Click(TObject*
19、Sender)n nn n ShowMessage(Save Has Not Completed);n n/调用通用函数ShowMessage输出(shch)信息n nn n/-n nToolBar1-Checked=!(ToolBar1-Checked);第22页/共182页第二十三页,共182页。n n 运行该程序,选择File Disabled后的画面如图3-4所示,选择Hide Help后的画面如图3-5所示,选择ToolBar后的画面如图3-6所示,再次(zi c)选择ToolBar后的画面如图3-7所示。在选择了FileNew后弹出的消息框如图3-8所示。第23页/共182页第二十
20、四页,共182页。图3-4 选择(xunz)File Disabled 第24页/共182页第二十五页,共182页。图3-5 选择(xunz)Hide Help 第25页/共182页第二十六页,共182页。图3-6 选择(xunz)ToolBars使Checked被勾选 第26页/共182页第二十七页,共182页。图3-7 再次选择(xunz)ToolBars取消Checked勾选 第27页/共182页第二十八页,共182页。图3-8 选择(xunz)FileNew 弹出消息框第28页/共182页第二十九页,共182页。3.2 工具栏与状态工具栏与状态(zhungti)行行n n 大部分Win
21、dows应用程序都有一个工具栏,利用工具栏上的图形按钮可加快操作速度,一般(ybn)工具栏位于窗体的顶部。在BCB中有许多方法可设计出不同风格的工具栏,其中较简单直接的方法是使用Panel和SpeedButton控件进行的。第29页/共182页第三十页,共182页。n n 3.2.1 面板和加速按钮n n 1面板n n 面板(Panel)控件位于组件面板的Standard页上的倒数第二个位置,它是一个容器组件,即可以将其它(qt)组件放入面板。它的主要功能就是制作工具栏和状态栏。以下是面板的常用属性。n n 1)Align属性n n 为设置面板在窗体上的位置,可以使用它的Align属性。该属性
22、取值范围为alTop、alRight、alBottom、alLeft、alClient和alNone。第30页/共182页第三十一页,共182页。n n 缺省值为alNone,此时(c sh)可用鼠标操作确定其位置和尺寸。当作为工具栏使用时,面板常被放置在窗体顶部位于菜单条之下,我们可以用alTop指定该位置。这样,即使窗体尺寸改变,面板也能准确定位,而且能自动改变宽度以保持横贯整个窗体。alRight、alLeft、alBottom和alTop类似,分别适合将面板定位到窗体的右、左和底部。alClient则定位在整个窗体的客户区。第31页/共182页第三十二页,共182页。n n 2)Bev
23、elInner和BevelOuter属性n n BevelInner和 BevelOuter这两个属性决定(judng)了面板的外观,适当搭配二者的值可以产生不同的三维效果。它们的取值范围为bvLowered、bvNone、bvRaised和 bvSpace。缺省值BevelInner=None,BevelOuter=Raised。n n 3)Caption属性n n 面板也有Caption属性,因此可在面板上显示文字。此时,它的功能类似于Label组件,但可以制作出三维效果,简单的状态栏就是利用面板的Caption制作的。在用作工具栏时,一般应将Caption置为空白。第32页/共182页第
24、三十三页,共182页。n n 4)Visible属性n n Visible属性为false时,可隐藏面板(min bn)及面板(min bn)上的组件。我们可用来隐藏工具栏。第33页/共182页第三十四页,共182页。n n 2加速(ji s)按钮n n 加 速(ji s)按 钮(SpeedButton)是位于Additional页上第二个位置的组件。它与按钮类似,但可以在表面上放置图形。与按钮或位图按钮(BitButton)相比,它没有窗口句柄,不消耗Windows资源,绘制速度也更快一点。所以,非常适合用作工具栏上的工具按钮。加速(ji s)按钮有以下主要属性。第34页/共182页第三十五
25、页,共182页。n n 1)Glyph属性n n Glyph属性指定一个图像文件放到加速按钮的表面。点击Object Inspector中该属性右侧(yu c)的“.”按钮就打开Picture Editor对话框,可选“Load.”按钮指定一个图片文件,按“OK”完成装入,如图3-9所示。一般应装入小型位图或图标(2020像素左右),位图文件既可通过各种途径收集 得 到,也 可 利 用 BCB的Image Editor工具自行绘制。参见本书基础篇1.3.6节。在BCB的目录C:Program FilesCommon FilesBorland SharedImagesButtons下就有许多按钮
26、图标。第35页/共182页第三十六页,共182页。图3-9 输入(shr)Glyph属性时选择位图第36页/共182页第三十七页,共182页。n n 2)NumGlyphs属性n n NumGlyphs属性可输入数字14,缺省值为1,它表示加速(ji s)按钮中包含的位图的数目。当该数目为2时,第一个位图为按钮的标准状态,第二个位图用于按钮失效时。当该数目为4时,第一、二个位图作用同前,第三个位图用于单击按钮时,第四个位图用于按钮持续保持按下状态时。前面提到Buttons目录下有许多按钮的位图,如果打开这些位图观察可以发现它们都是“两位一体”的,即图片中横向并排着两个同样尺寸的类似图形。第37
27、页/共182页第三十八页,共182页。n n 其实这些图形就是专门被定制成可以用作NumGlyphs等于(dngy)2时的按钮表面贴图。类似地,如果用于NumGlyphs等于(dngy)4时的贴图,图片中必须包含从左到右排列的四个同样尺寸的小图形。第38页/共182页第三十九页,共182页。n n 3)Hint 和ShowHint属性n n Hint 和ShowHint属性用于产生(chnshng)提示,该两个属性并非加速按钮专有。但由于仅靠一幅简单的位图难以表达复杂的意义,加速按钮更加需要有自我提示的功能。Hint是字符串类型的属性,应输入提示的内容;ShowHint则是bool型,当它为t
28、rue时组件具有提示功能。第39页/共182页第四十页,共182页。n n 3.2.2 工具栏设计范例n n 下面给出一个工具栏程序范例。n n 【例3-2】我们在前面(qin mian)例3-1的基础上,保留主菜单上的“File”、“Edit”和“Tools”三个下拉菜单,删去其余菜单项。往该程序窗体内放入一个由面板Panel1和三个加速按钮组成的工具栏。Panel1的Align设置为alTop;三个加速按钮的Glyph中分别装入三个位图,它们的ShowHint都设置为true,Hint属性分别输入“New”、“Open”和“Save”。第40页/共182页第四十一页,共182页。n n 再
29、 将 菜 单 项“ToolBar”的Checked属性设置为true,表示程 序 在 初 始 状 态 下 显 示(xinsh)工具栏。各菜单项的OnClick基本上与例3-1中相同,但“ToolBar”的OnClick事件中应增加改变Panel1的Visible属性的语句。第41页/共182页第四十二页,共182页。n n 程序中,工具栏上三个加速按钮的功能(gngnng)应分别等同于菜单上的“New”、“Open”和“Save”,即它们可以分别与三个菜单项的OnClick事件分享代码。因此,可按如下 方 式 定 义 三 个 按 钮 的OnClick事件:选中第一个按钮,在 Object In
30、spector中 选Events页,在OnClick事件右面组合框中选择New1Click(即菜单项“New”的OnClick事件的名称),然后对第二、三个按钮进行类似操作,如图3-10所示。第42页/共182页第四十三页,共182页。图3-10 为加速(ji s)按钮选择OnClick 第43页/共182页第四十四页,共182页。n n下面是该范例(fnl)中惟一需要修改的代码段:n nvoid _fastcall TForm1:ToolBar1Click(TObject*Sender)n nn n ToolBar1-Checked=!ToolBar1-Checked;n n if(Tool
31、Bar1-Checked)n n Panel1-Visible=true;n n elsen n Panel1-Visible=false;n n第44页/共182页第四十五页,共182页。n n 程序运行开始时的画面如图3-11所示。若把鼠标靠近加速按钮并停留,就会看到提示信息。选择ToolBar菜单项,能打开或关闭工具栏,图3-12为工具栏已被关闭。当点击三个加速按钮时,与点击菜单项“New”、“Open”和“Save”时一样(yyng),会出现一个显示“XXX Has Not Completed”的信息框。我们也可以把组合框、微调按钮(UpDown)等控件放到面板组件上,做出一个像Wor
32、d中那样有更加复杂功能的工具栏,如图3-13 所示。第45页/共182页第四十六页,共182页。图 3-11 程序初始(ch sh)画面 图 3-12 工具栏已关闭第46页/共182页第四十七页,共182页。图3-13 一个(y)复杂的工具栏第47页/共182页第四十八页,共182页。n n 3.2.3 StatusBar组件n n 通常在Windows应用程序的底部有一个状态行,用以提供一些系统信息和提示。C+Builder中我们可以利用面板组件制作(zhzu)状态行,但效果较差。本节中将介绍StatusBar组件,它位于Win32页上,是非常适合用作状态行的。n n StatusBar 可
33、以看作是面板的容器,它可包含有若干面板,从左向右排列。其中每个面板都能被独立控制,用于显示一项信息。图3-14为含有五个面板的StatusBar组件。第48页/共182页第四十九页,共182页。图 3-14 StatusBar组件(z jin)第49页/共182页第五十页,共182页。n n 下面简单(jindn)介绍一下StatusBar的主要属性。n n 1Align属性n n 用法与面板的Align一样,但作为状态行组件,其缺省值被设置为alBottom。n n 2Font属性n n Font属性可设置状态行中使用的字体,但必须同时设置UseSystemFont为false,否则状态行使
34、用系统定义的字体。第50页/共182页第五十一页,共182页。n n 3SimplePanel属性n n SimplePanel属 性 为 true时,StatusBar具有一个简单面板(Panel)的一切特征(tzhng),而不能作为面板容器使用。一般,应设置SimplePanel为false。第51页/共182页第五十二页,共182页。n n 4Panels属性n n Panels属 性 是 StatusBar最主要的属性,它是一个数组,其中的每个元素代表一个面板(min bn)。当 SimplePanel为false时,可点击Panels属性值右侧的“.”按钮打开一个面板(min bn)
35、设置对话框,如图3-15所示。打开该对话框的另一个办法是右击StatusBar,当出现快捷菜单后,再选择“Panels Editor”。第52页/共182页第五十三页,共182页。图3-15 使用(shyng)Panels Editor第53页/共182页第五十四页,共182页。n n Panels Editor是一个小窗口,开始时为空,每次点击工具栏上的“New”(左面第一个)按钮就在窗口中增加一个项,相应地StatusBar中也增加了一个面板。当在Panel Editor中选中某项时,Object Inspector中会切换到与其(yq)对应的面板,我们就能设置该面板的Width、Beve
36、l和Alignment等属性。Bevel属性与面板的外观有关,一个状态行组件的各个面板可分别有不同的Bevel值。Alignment的可选值为taCenter、taLeftJustify和taRightJustify,分别表示显示文字的位置为居中、靠左和靠右。n n 第54页/共182页第五十五页,共182页。n n 3.2.4 状态行设计范例n n 下面给出一个状态行设计的范例。n n 【例3-3】程序的主菜单上有“File”和“Edit”两项,窗体中间放了一个TMemo控件,可输入文本,窗口底部有一个被分隔为五个部分的状态行,如图3-16所示。这五部分显示的信息分别为:n n (1)时 间
37、,显 示 为XX:XX:XX;n n (2)Memo控件中当前(dngqin)插入点的位置,它用Y行、X列形式表示,Y、X起始值都是0;第55页/共182页第五十六页,共182页。n n(3)Memo中文本的字数(z sh);n n(4)键盘上Insert键的状态,显示为INS 或空白;n n(5)键盘上NumLock键的状态,显示为NUM 或空白。n n我们让前三项居中显示,后两项靠左显示,如图3-16所示。第56页/共182页第五十七页,共182页。图3-16 程序运行时状态行中显示有关(yugun)信息 第57页/共182页第五十八页,共182页。n n (操作要点将StatusBar控
38、件放入窗体,设置其Align 为 alBottom,SimplePanel 和UseSystemFont为false,并选择适当的字体和颜色。右击StatusBar打开Panel Editor,五次点击New工具(gngj)按钮添加面板,将五个面板的Width分别设置为100、100、100、50和50,并将前三项Alignment设置为taCenter,后两项设置为taLeftJustify。第58页/共182页第五十九页,共182页。n n 为了能实时显示动态信息,我们需要每隔一小(y xio)段时间将状态行刷新一遍,因此要在Form1中加入一个定时器组件Timer1(位于组件面板 上 S
39、ystem页)。我 们 将 该Timer的 Interval设 为 100,Enabled设为true,并为Timer1编写OnTimer事件的代码如下:n n void _fastcall TForm1:Timer1Timer(TObject*Sender)n n 第59页/共182页第六十页,共182页。n n n n AnsiString str1;AnsiString str1;n n /显示显示(xi(xi nsh)nsh)时间时间n n TDateTime DateTime=Time();TDateTime DateTime=Time();n n StatusBar1-Panels
40、-Items0-Text=StatusBar1-Panels-Items0-Text=时间时间:+TimeToStr(DateTime);:+TimeToStr(DateTime);n n /显示显示(xi(xi nsh)nsh)插入点位置插入点位置n n str1=str1=位置位置:;:;n n str1=str1+IntToStr(Memo1-CaretPos.y)+str1=str1+IntToStr(Memo1-CaretPos.y)+行行;n n str1=str1+IntToStr(Memo1-CaretPos.x)+str1=str1+IntToStr(Memo1-CaretP
41、os.x)+列列;n n StatusBar1-Panels-Items1-Text=str1;StatusBar1-Panels-Items1-Text=str1;n n /显示显示(xi(xi nsh)nsh)字数字数第60页/共182页第六十一页,共182页。n n str1=Memo1-Lines-Text;n n StatusBar1-Panels-Items2-Text=字 数:+IntToStr(str1.Length();n n /显示(xinsh)NUM状态n n if(GetKeyState(VK_NUMLOCK)n n StatusBar1-Panels-Items3-T
42、ext=NUM;n n elsen n StatusBar1-Panels-Items3-Text=;n n /显示(xinsh)INS状态第61页/共182页第六十二页,共182页。n n if(GetKeyState(VK_INSERT)n n StatusBar1-Panels-Items4-Text=INS;n n elsen n StatusBar1-Panels-Items4-Text=;n n第62页/共182页第六十三页,共182页。n n 【评析】n n (1)StatusBar1-Panels-Itemsi-Text 属性代表状态行中第i个面板上的文本,(i=0,1,2,3
43、,4),我们只要将有关信息放入相应的Text属性即可。n n (2)可用Time函数取得(qd)TDateTime类型的时间信息,再用函数TimeToStr把它转换为 AnsiString字符串类型。n n (3)Memo1-CaretPos.y和 Memo1-CaretPos.x为 当 前插 入 位 置。str1=Memo1-Lines-Text取得(qd)Memo1中的文本,再用AnsiString 的Length方法求出它的长度,即文本中的字数。第63页/共182页第六十四页,共182页。n n 注意:计算字数时每次回车会增加两个字(回车符和换行符)。n n (4)GetKeyState
44、 是一个API函数,可取到键盘上各个键的状态。n n (5)本例中使用了Timer组件,该组件起到定时控制的作用(zuyng)。它的Interval属性指定时间间隔,本例中设置为100,表示每间隔100毫秒(0.1秒)调用一次时控过程(由OnTimer事件确定)。n n 注 意:设 置 Timer的Enabled为true,以启动Timer的时控功能。第64页/共182页第六十五页,共182页。n n (6)本例中为了能显示一些有意义的信息,使用了若干Windows API函数(在本书提高 篇 中 将 较 系 统 地 介 绍Windows API)。对初学者来说,如何(rh)在各种场合取得所需
45、的状态信息,可以是一个逐渐积累的过程。第65页/共182页第六十六页,共182页。3.3 对对 话话 框框n n 3.3.1 对话框与模态窗口n n 设计对话框与设计普通的窗体没什么本质区别,但对话框一般具有如下特征:n n (1)在程序中不作为主窗体,通常被缺省命名为Form2或Form3等。在BCB中为了给应用程序加入第二个窗体(或第三个窗体等),可选FileNewForm菜单项或点击(din j)相应的工具按钮。第66页/共182页第六十七页,共182页。n n 对于有两个以上(含两个)窗体的程序,在与主窗体Form1对应的Unit1.h(或Unit1.cpp)中一般要加入#includ
46、e Unit2.h语句(或执行FileInclude Unit Hdr.命令),否则,在Form1中就不能识别Form2中定义的对象。至于是否要在uint2.h中加入#include Unit1.h,则应看具体情况。n n (2)窗口标题(biot)一般应为对话框名称,窗口内没有主菜单。边框上无控制按钮,也不能改变窗口尺寸。要做到这一点,较简单的方法是设置BorderStyle属性为bsDialog。第67页/共182页第六十八页,共182页。n n (3)窗口往往以模态方式打开,Windows的窗口可定义为模态窗口或非模态窗口。当应用程序打开一个模态窗口后,只要该窗口未关闭,就不能对程序中的
47、其它窗口进行任何操作,以此方式强制用户对该模态窗口作出响应。所谓以模态方式打开即指使打开的窗口成为(chngwi)模态窗口。n n 在BCB中一个窗口是否为模态一般并非取决于其设计阶段,而是由打开该窗口时使用的方法所确定。如果一个窗口是被Show方法打开的,那么它就是非模态方式的;如果用ShowModal方法打开窗口,那么该窗口就是模态的。第68页/共182页第六十九页,共182页。n n 3.3.2 信息框n n C+Builder中使用(shyng)ShowMessage和MessageDlg函 数 产 生 标 准 的Windows信息框,这种信息框是一个模态窗口。n n ShowMess
48、age使用(shyng)方便但功能较弱,只能显示一个带有OK 按钮的信息框。在例3-1中我们已经用过该函数。n n MessageDlg函数适用范围更广。它有四个参数,BCB 对该函数声明如下:n n int_fastcall MessageDlg(const AnsiString Msg,TMsgDlgType DlgType,TMsgDlgButtons Buttons,int HelpCtx);第69页/共182页第七十页,共182页。n n Msg参数指定了显示的信息。DlgType参数可指定信息框的类型,该参数为TmsgDlgType类型,它的取值范围及含义如表3-1所示。Butto
49、ns参数指定了信息框所包含的按钮,类型为TmsgDlgButtons,它的取值范围及含义如表3-2所示。HelpCtx参数可指定当用户单击Help按钮或按F1键时所弹出的帮助主题的帮助上下文ID。MessageDlg函数返回一个整数,代表(dibio)用户在对话框中所选的按钮,该值必定为以下预定义常数之一:mrNone、mrAbort、mrYes、mrOk、mrRetry、mrNo、mrCancel、mrIgnore、mrAll。第70页/共182页第七十一页,共182页。表3-1 DlgType 参数(cnsh)的取值 取 值说 明mtWarning显示一个带有蓝色惊叹号的信息框mtErro
50、r显示一个带有红色停止符号的信息框mtInformation显示一个带有蓝色“i”标志的信息框mtConfirmation显示一个带有绿色问号的信息框mtCustom框中没有位图,对话框标题为应用程序文件名第71页/共182页第七十二页,共182页。表3-2 Buttons 参数(cnsh)的取值 取 值说 明mbYes“Yes”按钮mbNo“No”按钮mbOK“OK”按钮mbCancel“Cancel”按钮mbHelp“Help”按钮mbAbort“Abort”按钮mbRetry“Retry”按钮mbIgnore“Ignore”按钮mbAll“All”按钮第72页/共182页第七十三页,共1