0524《可视化程序设计》2018年6月期末考试指导
发布时间:2023-11-21 12:11:23浏览次数:32《可视化程序设计》 年 月期末考试指导一、考试说明(一)说明满分为 100 分,考试时间为 90 分钟, 考试形式为开卷。(二)题型及各题型所占分数和相应的答题技巧.单项选择题答题技巧:选择与题干相匹配的答案。可以考虑排除法等选择技巧。.判断题答题技巧:需要答出与问题相关的重要知识点,如需要,可对相关内容展开阐述。.填空题答题技巧:填写与题干相匹配的答案。对已学知识需要适度的理解与记忆。.程序填空题答题技巧:填写与题干相匹配的答案。对已学知识需要适度的理解与记忆。.问答题答题技巧:需要答出与问题相关的重要知识点,如需要,可对相关内容展开阐述。6. 编程题答题技巧:理解题意,注意输入输出,并编写相应的代码。二、复习重点内容第 1 章 Delphi 的基础知识 1、 Delphi 简介 是由 (现 )公司于 年推出的快速应用软件开发工具()。Delphi 的特点和优点:可视化的集成开发环境真正的面向对象可扩充的 VCL 库高效的、完全的编译器强大的数据库开发功能支持分布式数据库开发Web 技术扩展对开发 Linux 平台应用程序提供更强大的支持2、Delphi 可视化编程的基本概念 “可视化编程”就是使用 Delphi 的 ObjectPascal 语言,利用它所提供的可视“控件”来创建“对象”。这是一种编程方法的新概念。1)对象的属性、事件和方法对象的属性:属性(Property)是对象的一项描述内容,用以描述对象的一个特性,不同的对象有不同的属性,而每个对象都由若干属性来描述。在可视化编程中,常见的属性有标题(Caption)、名称(Name)、字体(Font)、是否可见(Visible)等。在程序中设置属性的一般格式是:〈对象名〉.〈属性名〉:=〈属性值〉;对象的事件:
(1)Release 方法从内存释放窗体(2)Show 方法显示窗体(3)Hide 方法隐藏窗体。(4)Close 方法关闭窗体2、 与输入∕输出有关的控件 Label 控件常用属性:(1)Caption 属性(2)AutoSize 属性(3)Alignment 属性(4)Layout 属性(5)WordWrap 属性(6)Transparent 属性(7)FocusControl 属性使用标签Label 控件显示的文本用户不能直接修改。有些没有自己的标题(Caption)属性的控件(如 Edit 等)可以用 Label 标识。在 Label 中显示的文本是由 Caption 属性控制的,该属性可以在设计时通过“属性”窗口设置或在运行时用代码赋值。Edit 控件编辑框(Edit)是一种通用控件,既可以输入文本,又可以显示文本,是应用程序中最常用的控件之一。编辑框在 Delphi 中用TEdit 类处理。常用属性(1)Text 属性(2)AutoSelect 属性(3)Enabled 属性(4)ReadOnly 属性(5)SelStart 属性(6)SelLength 属性(7)SelText 属性(8)CharCase 属性(9)HideSelection 属性(10)PasswordChar 属性Edit 控件的方法(1)SetFocus:设置焦点。(2)SelectAll:选定所有文本。Edit 控件的主要事件(1)OnChange 事件:编辑框的内容发生改变。(2)OnEnter 事件:编辑框得到焦点。(3)OnExit 事件:编辑框失去焦点。(4)OnKeyPress 事件:按键事件,参数 Key 表示所按下的字符,它返回的是一个字符。
(5)OnKeyDown 事件:键盘按下事件,Key 为返回的按键(如’A’和’a’的 Key 都是65),还可以通过参数 Shift 检测 Shift、Ctrl、Alt 等键是否被按下。当在 Edit1 中按下‘A’键时触发的事件和事件顺序是 OnKeyPress->OnKeyDown(6)OnKeyUp 事件:键盘松开事件。参数与 OnKeyDown 类似。使用编辑框编辑框中显示的文本是受 Text 属性控制的。Text 属性可以用三种方式设置:设计时在“属性”窗口输入、运行时通过代码设置或在运行时由用户输入。通过读 Text 属性能在运行时检索编辑框的当前内容。Memo 控件要处理多行文本就要用到备注框(Memo)控件。常用属性备注框在 Delphi 中用 TMemo 类处理,TMemo 类是 TEdit 类的衍生类,因此,TEdit 类所具有的属性、事件和方法在 TMemo 类中都有。另外,为了处理多行文本,TMemo 类还增加了一些新的属性:(1)要处理多行文本就要用到备注框(Memo)控件。(2)WantReturns 属性(3)WantTabs 属性(4)ScrollBars 属性(5)Modied 属性MaskEdit 控件掩码编辑框(MaskEdit)控件属于“附加(Additional)组件板”。MaskEdit 控件是格式化的编辑框,它限制用户在所定义的位置输入要求输入的符号。常用属性MaskEdit 控件在 Delphi 中用 TMaskEdit 类处理,TMaskEdit 类也是 TEdit 类的子类,因此,TEdit 类所具有的属性、事件和方法在 TMaskEdit 类中都有。另外,TMaskEdit 类还增加了一些新的属性:掩码字符串 EditMask 属性:分为三个部分,用分号分隔。第一部分是掩码字符串的主要部分,它确定了数据的格式;第二部分决定是否将掩码中的字符串作为数据的一部分,0 表示不作为数据的一部分,1 表示作为数据的一部分,它将影响 Text 属性中的值;第三部分指出在掩码中用来代表未输入数据的字符。3、 使用对话框函数与对话框过程 对话框是用户与应用程序之间交换信息的最佳途径之一。使用对话框函数或过程可以得到 Delphi 的内部对话框,这种方法具有操作简单及快速的特点。Delphi 提供的内部对话框有两种:(1)信息对话框使用过程 ShowMessage、ShowMessageFmt、函数 MessageDlg、MessageDlgPos、CreateMessageDialog。(2)输入对话框使用函数 InputBox、InputQuery。1.1 信息对话框过程(1)ShowMessage 过程ShowMessage 过程显示一个最简单的对话框,其语法格式为:ShowMessage(〈信息内容〉);显示的对话框以应用程序的执行文件名为标题,只含有一个“OK”按钮。对话框的宽度和高度随着<信息内容>的增加而增加。(2)ShowMessageFmt 过程
ShowMessageFmt 过程的语法格式为:ShowMessageFmt(〈信息内容〉,〈参数组〉);showmessagefmt(‘%s 已进球%d 个!’,[‘公牛队’,11]);1.2MessageDlg 与 MessageDlgPos 函数MessageDlg 与 MessageDlgPos 函数可以显示一个信息对话框,并等待用户的响应。(1)MessageDlg 函数调用 MessageDlg 函数,可以在屏幕的中心处显示信息对话框,其语法格式为:〈变量〉:=MessageDlg(〈信息内容〉,〈类型〉,〈按钮组〉,HelpCtx);(2)MessageDlgPos 函数调用 MessageDlgPos 函数,可以在屏幕的指定位置显示信息对话框,其语法格式为:〈变量〉:=MessageDlgPos(〈信息内容〉,〈类型〉,〈按钮组〉,HelpCtx,X,Y);说明:MessageDlgPos 函数只比 MessageDlg 函数多一项功能,即它可以指定对话框的显示位置坐标:X,Y。1.3CreateMessageDialog 函数CreateMessageDialog 函数生成一个信息框窗体,可以在程序中多次使用 ShowModal 方法调用。其语法格式为:窗体名称:=CreateMessageDialog(〈信息内容〉,〈类型〉,〈按钮组〉);窗体名称.ShowModal;1.4InputBox 与 InputQuery 函数InputBox 与 InputQuery 函数可以显示一个供用户输入的对话框。(1)InputBox 函数InputBox 函数显示一个能接受用户输入的对话框,并返回用户输入的信息。〈变量〉:=InputBox(〈对话框标题〉,〈信息内容〉,〈默认内容〉)(2)InputQuery 函数如果希望对单击 Cancel 按钮(退出事件)另作处理,可以选用 InputQuery 函数。该函数与 InputBox 函数相似,只是返回值是一个布尔值。其语法格式为:〈变量〉:=InputQuery(〈对话框标题〉,〈信息内容〉,〈字符串变量〉)4、 使用焦点 焦点(Focus)就是光标,当对象具有“焦点”时才能响应用户的输入,因此也是对象接收用户鼠标单击或键盘输入的能力。在 Windows 环境中,在同一时间只有一个窗口、窗体或控件具有这种能力。具有焦点的对象通常会以突出显示标题或标题栏来表示。当编辑框具有焦点时,用户输入的数据才会出现在编辑框中。可以用 SetFocus 方法在代码中设置焦点。编写窗体的 OnActivate 事件代码,其中调用 SetFocus 方法,使得程序开始时光标(焦点)位于编辑框 Edit1 中:procedureTForm1.FormActivate(Sender:TObject);beginedit1.SetFocus;end;5、 用于分组的控件 面板(Panel)与组框(GroupBox)控件用于对其他控件进行分组。它们都属于“容器”型控件,即可以在其中包含其他的控件。所包含的控件称为是容器控件的“子控件”,而容器控件则是其子控件的“父控件”。当父控件的位置、可视性(Visible)以及有效性(Enabled)属性发生改变时,其中的子控件也发生同样的变化。
5.1Panel 组件Panel 面板是一个以多种三维效果显示的矩形区域。它可以将窗体分成规则的几块,为窗体中的组件提供可视化的分组。Panel 组件位于 Standard 选项卡中。Panel 的基本属性如下:(1)Caption 属性:面板上显示的标题文字。(2)Alignment 属性:Panel 的对齐方式:居左、居右或居中对齐。(3)Anchors 属性:Panel 组件与 Parent 的大小和位置关系,说明组件与 Parent 的哪条边相连,其值是一个集合类型。5.2GroupBox 控件组框(GroupBox)是一个带有标题的类似面板的控件。但是其 Caption 显示在边框上,这点与面板 Panel 有些不同。作为容器控件,它可以为一组相关的控件提供分组,并使这些控件在组标题下显得更有条理;作为分组控件,它可以管理其中的相关控件,使之更好地协调工作,因此 GroupBox 在单选框和复选框中用得很多。6、Button 控件 (1)Button 的主要属性:Caption 属性、Default 属性、Cancel 属性(2)Button 的主要事件:主要事件有 OnClick 等事件,下列情形之一会触发 OnClick 事件:a 单击按钮。b 按钮获得焦点的时候按回车键或者空格键。c 执行语句 Button 对象.Click。7、 BitBtn 控件 BitBtn 控件也是最常见的控件之一,位于 Additional 组件面板中。该控件可以在按钮中显示一幅格式为 bmp 的图片,使得按钮更加美观和形象。(1)主要属性:除了有 Caption、Default、Cancel 等属性之外,BitBtn 还有如下一些主要属性:Glyph 属性:为按钮指定一个图标文件(扩展名为 bmp),该图标显示在按钮表面,Tbitmap 型。Kind 属性:枚举型,决定按钮的类型。8、 CheckBox 控件 复选框(CheckBox)是一个旁边带有文本说明的小方框。具有选中和未被选中两种状态,选中时方框中具有选中标志。在运行时,使用鼠标单击复选框可以改变它的状态。复选框还有一种不确定状态,表示既非选中,又非未选中。(1)常用属性:Checked 属性State 属性AllowGrayed 属性(2)主要事件:OnClick 事件,下列情况发生 OnClick 事件:单击 CheckBox 控件(Checked 属性的值也会自动改变)。用代码改变 Checked 属性的值。CheckBox 控件的特点是每次单击都会改变 Checked 属性的值,并触发 OnClick 事件。9、 RadioButton 控件 单选按钮(RadioButton)又称选项按钮,一般总是作为一个组(单选按钮组)的组成部分工作的。单选按钮组是一组相互排斥的单选按钮,选择一个单选按钮就会立即清除该组中的其他按钮。(1)属性:Checked 属性用于表示单选按钮是否被选中。Checked 属性值为 True,表示被选中,Checked属性值为 False,表示未被选中,默认值为 False。(2)事件:RaidoButton 的事件主要有 OnClick 事件,下列情况下触发 OnClick 事件:
单击 RadioButton 组件使得其 Checked 属性值从 False 变为 True。通过代码使得其 Checked 属性值从 False 变为 True。RadioButton 控件的特点是只有单击未被选中的按钮才会触发 OnClick 事件,并将 RadioButton 的 Checked 属性值从 False 改变为 True。10、 RadioGroup 控件 按钮组(RadioGroup)控件巧妙地将一个 GroupBox 与一组 RadioButton 组合在一起,可以使用统一的索引号(ItemIndex),为编程提供了方便。(1)主要属性:Colums 属性、Items 属性、ItemIndex 属性11、 SpeedButton 控件 快速按钮(SpeedButton)是一种可以成组工作的按钮,具有与位图按钮一样将位图显示在按钮表面的功能;还具有与单选按钮组一样允许其中一个按钮被选中(按下)的功能;当它单独使用的时候可以像复选框一样具有开关的功能。(1)主要属性与 Button 类似,特殊属性:Down 属性、Flat 属性、GroupIndex 属性、Glyph 属性12、 列表框与组合框 (1)ListBox 控件ListBox 控件以列表的形式显示多项供用户选择。如果不能显示全部项,还可以添加滚动条使用户通过上下滚动条来查阅所有项。常用属性:Items 属性:列表选项的集合ItemsIndex 属性:选定项的索引值,值为 i 时表示选定了第 i+1 项,值为-1 表示未选定任何项。Sorted 属性:Boolean 型,值为 True时表示选项排序,值为 False 时表示选项不排序。Columns 属性:Imteger 型,列表的列数。MultiSelect 属性:Boolean 型,是否允许选择多项。Selected 属性:用来设置或者返回某项是否被选中了。主要方法:Clear 方法:清除 ListBox 中的所有项数。主要事件:OnClick 事件:选择某项时触发该事件OnEnter 事件:得到焦点时触发该事件OnExit 事件:失去焦点时触发该事件(2)ComboBox 控件组合框 ComboBox 控件兼有 EditBox 和 ListBox 两者的功能,用户可以通过键入文本或选择列表中的项目来进行选择。特殊属性:DropDownCount 属性:下拉部分可以显示的项数,如果不能显示全部项数,可以通过滚动条来显示其它选项。默认值是 8。SelText 属性:编辑区选择的文本。SelLength 属性:编辑区选定文本的长度。SelStart 属性:编辑区选定文字的起点,编辑区第一个字符位置是 0。Style 属性:ComboBox 的风格。Style 属性对应三种 ComboBox 控件:下拉列表框、简单组合框、下拉组合框方法:
Clear 方法SelectAll 方法:选定编辑框中所有内容。SetFocus 方法:ComboBox 得到焦点事件:OnClick 事件:鼠标单击事件,鼠标单击选择某项。OnChange 事件:编辑框内容被改变。OnKeyPress 事件:按键事件,参数与 Edit 的按键事件相同。OnKeyUp 事件和 OnKeyDown 事件:类似 Edit 的相应事件。OnDropDown 事件:当用户单击右边箭头按钮即打开下拉列表,此时触发该事件。13、 计时器控件 计时器(Timer)控件可以在应用中以重复的时间间隔产生一个事件。常用属性:Enabled 属性Interval 属性:控制 OnTimer 事件发生的时间间隔事件:OnTimer 事件:当 Timer 组件有效时,它每隔 Interval 毫秒触发 OnTimer 事件,执行相应的程序。14、 滚动条控件 滚动条控件 ScrollBar:如果窗体或者其他组件中的内容一次显示不完,可以考虑使用滚动条组件,滚动条还可以用来改变一些量。属性:Kind 属性:用于决定滚动条是水平放置还是垂直放置,其值有 sbHorizontal 和 sbVertical之分,前者表示滚动条是水平放置的,后者表示滚动条是垂直放置的。Max 属性和 Min 属性:用来决定滚动条表示数值的范围,即滚动条的最大值和最小值。Position 属性:滚动条的值,也就是滚动条滑块的位置。它在 Min 和 Max 之间。SmallChange 属性:鼠标单击滚动条两边的箭头,滚动条每次移动的距离。LargeChange 属性:鼠标在滚动条(但不是滑块)上单击一次,滑块滚动的距离。按 PgDn或者 PgUp 滚动条改变的量也是 LargeChange。事件:OnChage 事件:滚动条 Position 值的改变就会触发 OnChange 事件,比如拖动滚动条的箭头或者单击滚动条滑块和滚动条空白处。也可以使用代码改变滚动条 Position 的值。OnScroll 事件:使用鼠标操作改变滚动条 Position 的值触发该事件。此时 OnChange 事件也发生了。但是通过代码改变 Position 的值是不会触发 OnScroll 事件的。15、 多选项卡控件 有时候窗体上的内容太多,一个窗体无法显示出来,此时可以考虑使用多个窗体,但是在每个窗体之间切换非常不方便属性:Style 属性:选项卡的样式。Images 属性:指定从哪个图像列表选择选项卡的图标。MultiSelect 属性:可否选择多个选项页面。值为 True 时可以选定多页,值为 False 时不能够选定多页。ActivePage 属性:显示当前选中的选项卡,用于切换选项卡。PageCount 属性:选项卡有多少页面,只读属性。Pages 属性:数组,Pages[n],表示第 n+1 个页面,n=0 表示第一个页面。
控件的每一页是一个 TtabSheet 控件,该控件的属性如下:ImageIndex 属性:该选项卡在 ImageList 中选择的图标的序号。TabVisible 属性:控制或者返回该选项卡是否显示。PageIndex 属性:该选项卡在 PageControl中的索引号。TabIndex 属性:该选项卡在所有可见选项卡中的序号。PageControl 属性:返回该选项卡所在的 PageControl。第 4 章 基本语句结构 1、顺序结构 如果没有使用控制流程语句,程序便从左至右、自顶向下地顺序执行这些语句,即顺序结构。顺序结构是一种线性结构,也是程序设计中最简单、最常用的基本结构。其特点是:在该结构中,各语句按照各自出现的先后顺序,依次逐块执行。一个程序通常可分为三个部分:输入、处理和输出。2、选择结构 选择结构通过执行条件判断进行不同的操作。① 条件表达式根据“条件”的简单或复杂程度,条件表达式可以分为两类:关系表达式与布尔表达式。关系表达式的格式为:〈表达式 1〉〈关系运算符〉〈表达式 2〉[〈关系运算符〉〈表达式 3〉…]对于较为复杂的条件,必须使用布尔表达式。布尔表达式是指用布尔运算符连接若干关系表达式或布尔值而成的式子。如不等式:a≤x≤b 可以表示为:a<=xAndx<=b。布尔表达式的值也是一个布尔值。Delphi 提供的布尔运算符有:And、Or、Not、Xor 等 4 种。② 运算符的优先顺序在一个表达式中进行多种操作时,Delphi 会按一定的顺序进行求值,这个顺序称为运算符的优先顺序。(1)同级运算按照它们从左到右出现的顺序进行计算。(2)可以用括号改变优先顺序,强令表达式的某些部分优先运行。(3)括号内的运算总是优先于括号外的运算,在括号之内,运算符的优先顺序不变。③ 求值方式对象 Pascal 中对由 And 和 Or 组成的表达式支持两种求值方式:完全求值和部分求值。完全求值就是对表达式中每一个运算对象都进行运算,不管是不是已经获得了结果。部分求值则是严格按照从左到右进行运算,如果已经判明了表达式的结果就立刻终止运算。④If 语句1.If 语句的语法格式If 语句又称为条件语句,是最常用的单条件选择结构。If 语句的语法格式为:If〈条件〉Then[〈语句 1〉][Else〈语句 2〉];复合条件语句如在 If 语句格式中的〈语句 1〉或〈语句 2〉本身又是一个 If 语句,则称为 If 语句的嵌套。嵌套的 If 语句又被称为复合条件语句。⑤Case 语句多分支选择结构的特点是:从多个选择结构中,选择第一个条件为真的路线作为执行的路线。即〈常量表 1〉成立时,执行〈语句序列 1〉;如果为假则继续检查下一个条件。如果条件都不为真,就执行〈其他语句序列〉,如果没有〈其他语句序列〉,则不作任何操作就结束
选择。Case 语句的语法格式Case 语句专门来实现多分支选择结构。Case 语句的语法格式为:Case〈选择器表达式〉of〈情况常量表 1〉:〈语句 1〉;...〈情况常量表 n〉:〈语句 n〉;[Else〈其他语句列〉;]End;应注意的问题:(1)〈选择器表达式〉的值必须是顺序类型(如整型、字符型、布尔型、子界型等)。(2)〈情况常量表〉中的值应该是〈选择器表达式〉可能具有的值,各常量之间用逗号分隔。所有常量表中的值必须互不相同。(3)〈语句〉可以是简单语句,也可以是复合语句。1、循环结构Delphi 中使用 3 种循环语句,While 语句、Repeat 语句以及 For 语句。①While 语句While 语句属于前测型循环结构。首先判断条件,根据条件决定是否执行循环,执行循环的最少次数为 0。While 语句的语法格式为:While〈条件〉Do[〈循环体〉];如Whilen<100dos=s*n;说明:(1)〈条件〉是一个具有 Boolean 值的条件表达式,为循环的条件。(2)〈循环体〉可以是简单语句、复合语句和其他结构语句。(3)While 循环的执行过程(4)Break 语句来强制终止 While 循环随时跳出 While 循环。Break 语句通常用于 If 语句之后。(5)可以在循环体中的任何位置放置 Continue 语句,在整个循环体没有执行完就重新判断〈条件〉,以决定是否开始新的循环。②Repeat 语句Repeat 语句属于后测型循环结构。首先执行循环体,然后判断条件,根据条件决定是否继续执行循环,因此执行循环的最少次数为 1。Repeat 语句的语法格式为:Repeat[〈循环体〉]Until〈条件〉;③For 语句在不知道需要执行多少次循环时,应该用 While 或 Repeat 循环。但是,若知道要执行多少次循环时,则最好使用 For 循环结构。与前两种循环不同,For 循环使用一个循环变量,每
重复一次循环之后,循环变量的值就会自动增加或者减少。For 语句的语法格式为:For〈循环变量〉=〈初值〉{To|DownTo}〈终值〉Do[〈循环体〉];④ 循环的嵌套前面介绍的三种类型的循环可以互相嵌套。在循环体中嵌套的称为内循环(相对的),外部的循环称为外循环。多重循环嵌套的层数几乎可以是任意的,根据循环结构嵌套的层数可以分为二重循环、三重循环等在设计和编写多重循环的程序时,应注意以下两个问题:(1)内、外层循环体只能嵌套,不能交叉。(2)不同层的循环变量不能同名,但同一层并列循环的循环变量可以同名。第 5 章 过程与函数 根据是否有返回值,Delphi 的子程序分为过程(Procedure)和函数(Function)两种形式。过程与函数实现一定功能的语句块,可以在程序的其他地方被调用,也可以进行递归调用。过程与函数的区别是:过程没有返回值,而函数有返回值。1、 过程① 事件过程的创建:1)在对象观察器(ObjectInspector)中选择指定对象(控件),然后在事件(Events)选项卡中选择指定的事件名称,并用鼠标双击其右边的空白区域,Delphi 将自动产生一个默认的事件过程。2)可以手动添加事件过程。在事件选项卡中添加,在单元文件中编程。一个事件过程也可以被多个对象、多个事件共享。其方法是:首先为其中的一个对象事件建立事件过程,然后在创建其他对象的事件过程时,从事件名称右边的下拉列表中选择已经建立的事件过程名即可。② 事件过程的调用:可以在过程代码中调用已经创建的事件过程。③ 通用过程的语法格式:过程的定义包括过程原型、过程体的定义Procedure〈过程名〉[(〈形参表〉)];[〈局部声明〉]begin[〈语句列〉];end;形参说明的格式为:[Var|Const]〈形参名〉:〈类型〉其中保留字 Var 表示实参(变量)按传址方式传递到形参,形参在过程中所作的改变,退出过程后将影响实参的值,因此又称为变参。保留字 Const 表示该形参在过程中的值被当作常量而不能改变。省略时实参按传值方式传递到形参,形参改变不影响实参,称为值参。其中过程体是一个程序段,由〈局部声明〉部分与可执行部分组成。2、 函数 函数是子程序的另一种形式,当子程序的执行返回一个值时,使用函数就比较简单。Delphi提供了许多内部函数,如 Sqrt、Cos 或 Format。用户在编写程序时,只需写出函数名并给定参数就能得到函数值。当在程序中需要多次用到某一公式或要处理某一函数关系,而又没
有现成的内部函数可以使用时,Delphi 允许编写用户自定义的函数。① 函数的语法格式Function〈函数名〉[(〈形参表〉)]:〈返回类型〉;[〈局部声明〉]begin[〈语句列〉];end;函数首部:多一个类型,函数的返回值通过函数名或预定义的 Result(隐含变量)带回。函数体:函数体与过程体相仿,也是一个程序段,由〈局部声明〉部分与可执行部分组成。② 函数的创建与调用在“代码”编辑窗口中,把光标定位在已有过程或函数的前面,即可输入函数的声明。3、 向子程序传递参数调用子程序的目的,就是在一定的条件下完成某一工作或计算某一函数值。外界要把条件告诉子程序,或者反过来,子程序要把某些结果报告给外界,这就是子程序与外界的通讯。① 形式参数与实际参数形式参数是指在定义过程或函数时,出现在过程或函数首部中的变量名,表示用于接收数据的变量。实际参数是指在调用过程或函数时,传送给过程或函数的常量、变量或表达式。〈实参表〉和〈形参表〉中对应的变量名不必相同,但是变量的个数必须相等,而且各实际参数的书写顺序必须与相应形式参数的类型相符。所谓类型相符,对于变量参数就是类型相同;对于值参数则要求实际参数对形式参数赋值相容。② 参数传递方式按照参数传递方式的不同,Delphi 中函数或过程的参数可分为变量参数、常量参数、值参数和外部(out)参数。a.变量参数变量参数的传递方式为“按地址传递”,即将实参变量的地址传递给形参,这样形参与实参表示同一个存储单元。如果在过程或函数中改变形参变量的值,将同时影响实参变量的值。b.常量参数在过程或函数首部〈形参表〉中的参数前面如果使用保留字 Const,则表示该参数为常量参数。无论实参是否变量,常量参数在过程中总是被当作常量,其值不能被改变。c.值参数在过程或函数首部〈形参表〉中的参数前面如果没有保留字,系统缺省该参数为值参数。值参数的传递方式为“按值传递”,即将实参的值传递给形参,如果在过程或函数中改变形参变量的值,则所作变动不会影响实参变量。d.外部参数在过程或函数首部〈形参表〉中的参数前面如果使用保留字 out,则表示该参数为外部参数。③ 使用缺省参数在声明过程或函数时,可以给形参指定一个缺省值,指定缺省值的方法是:在形参的类型后面使用“=”,并给出一个具体的值(常量)。如:%&'(%& )*+(*,!-./0.1.end;
所谓事件(Event),是由 Delphi 预先定义好的、能够被对象识别的动作,如单击(OnClick)事件、双击(OnDblClick)事件、移动鼠标(OnMouseMove)事件等,不同的对象能识别的事件也不相同。对象的事件是固定的,用户不能建立新的事件。为此,Delphi 提供了丰富的内部事件,这些事件足以应付 Windows 中的绝大部分操作需要。对象的方法:方法(Method)是与对象相关联的过程与函数的统称,即在对象中说明的并且用户可以调用的公共函数和过程,由 Delphi 系统内部定义,而不用编写代码。方法用于完成某种特定的功能而不能响应某一事件,如对象移动(Move)、画线(Line)、显示(Show)等。Delphi 提供了大量的方法供不同的对象调用。选中对象,按〈F1〉键激活帮助,选择 Methods,就能看到可以调用的方法列表2)控件Delphi 的控件由可视化组件库VisualComponentLibrary(VCL)提供。这个组件库是一个类库,其中定义了众多的类。VCL 中的有些类被可视化地安排在组件板上,称之为组件(components);有些则是不可见的,如 Tstream 类。VCL 的所有类都是从 TObject 派生出来的。因此 Tobject 又叫做基类。而可视化类(组件)是从 TComponent 类派生出来的,如 Tbutton、TLabel(不可以由用户输入编辑文本)、Tedit 等等.组件是建立程序界面的基本元素,是可视化编程的基础。正因为有了组件才使得编写 Delphi应用程序极为方便。组件是具有相同特性的事物的抽象,包括事物静态的特性和动态的特性的描述,是创建对象的模板。为让控件显示弹出式提示框文字,需在控件的 Hint 属性中填写想显示的文字。3、Delphi 可视化编程的环境 Delphi 的 IDE(IntegratedDevelopmentEnvironment,集成开发环境)是进行设计、运行和测试等可视化编程的理想环境。1)进入 Delphi 环境启动 Windows,并从“开始”菜单选择“BorlandDelphi7”→“Delphi7”,以启动 Delphi。首次加载 Delphi7,屏幕上会出现 5 个窗口。2)Delphi 集成开发环境组成Delphi 集成开发环境由 6 个部分构成:主窗口、窗体设计器、对象监视器、对象浏览器、代码编辑器和代码浏览器。集成开发环境的各个部分是一个有机体,它们协同工作。4、 控件的画法 (1)选定控件① 活动控件对控件的操作首先要选定控件,选定的控件又称为活动的控件。刚添加到窗体上的控件,其边框上有 8 个黑色小方块,表明该控件是“活动”的,活动控件也称“当前控件”。当窗体上有多个控件时,一般只有一个控件是活动的(除非进行了多重选定),对控件的所有操作都是针对活动控件进行的。② 多重选定使一组控件同时被选定称为多重选定。经多重选定的控件才可调整其相互之间的位置。进行多重选定时,先按下〈Shift〉键不放,再用鼠标单击所要选择的控件。或者直接用鼠标在窗体上拉出一个矩形,凡是与此矩形相交的控件均被选定。被多重选定的控件其 4 个角上都有一个灰色的小方块。(2)控件的缩放和移动
④ 函数与过程的重载在 Delphi 中,允许有名字相同而参数不同的过程或函数,这就是过程和函数的重载(Overload)。注意:在定义有默认参数的重载函数和过程时,必须让系统能从参数中区分出应该调用哪一个函数或过程,否则该定义是非法的。4、 子程序的嵌套与递归 在一个子程序(过程或函数)中包含另外一个子程序(过程或函数),称为子程序的嵌套。递归调用在处理阶乘运算、级数运算、幂指数运算等方面特别有效。在间接递归调用中,子程序必须进行超前引用,即在子程序的首部后面加上保留字 forword。① 子程序的嵌套嵌套层次:在 Delphi 中,程序具有一定的层次结构。允许子程序的内部再定义新的子程序,即子程序可以嵌套定义。为了准确地表达嵌套层次,通常将嵌套从外向内进行编号,并把相应子程序的层号称为子程序的嵌套深度。② 子程序的递归递归函数论是现代数学的一个重要分支,数学上常常采用递归的办法来定义一些概念,例如,自然数 n 的阶乘可以递归定义为:当 n=0 时,n!=1;当 n>0 时,n!=n*(n-1)!5、变量的作用域 作用域是指一个过程、函数和变量能被编译器识别的范围。① 公有变量与私有变量在单元的接口部分声明的变量属于公有变量,可以被其他单元引用。单元的接口 interface 决定了本单元对其他任何单元或程序的可见部分,在 interface 中的声明对要使用这些声明的单元或应用程序是可见的。一个单元在需要引用其他单元的变量时,只要在 uses 语句中指明该单元即可。在单元的实现(implementation)部分声明的变量属于私有变量,不能被其他单元引用。② 全程变量与局部变量在单元中的过程或函数中声明的变量,其有效范围仅限于该子程序本身,属于局部变量。而在子程序之前,implementation 之后声明的变量可以为本单元中的所有子程序(过程或函数)引用,因此又属于全程变量。在 interface 中声明的公有变量也属于全程变量。全程变量的作用域是整个程序,而局部变量的作用域是定义它的子程序。③ 全程变量的声明在 implementation 之后声明全程变量的方法:(1)按〈F12〉键切换到代码编辑器窗口。将光标移到 implementation 的下一行,{$R*.DFM}的上一行。(2)输入如下变量声明的代码:varn,m:integer;即可声明在本单元使用的整数类型的全程变量 n,m。6、 Delphi 的程序结构 一个 Delphi 应用程序对应一个工程,从程序结构的角度来看,它由一个主程序与若干个单元组成,而程序段则是构成主程序和单元的基本结构要素。Delphi 工程文件中的代码即为 Delphi 应用程序的主程序。主程序的结构为:program工程文件名;
uses 语句{$R*.RES}执行部分① 单元与作用域Delphi 编程强调单元或模块的使用。在引入类之前,单元是模块化编程的基础,而类也是建立在单元概念基础上的。在 Delphi7 的应用程序中,单元文件可以用来定义一个窗体,也可以用来定义程序中所使用的子程序、全程变量和常量等。② 单元的结构单元文件的结构如下所示:unit单元名//单元首部interface//接口部分implementation//实现部分end.//单元结束③ 作用域在单元的接口部分声明的标识符(类型、常量、变量、函数和过程等)在整个单元内(自声明处起至单元结束)有效。其他单元(客户单元)引用该单元时,则在客户单元内有效。在实现部分隐含声明的标识符,不能在单元外使用,即它们在客户单元中不可见。这些标识符在本单元的实现部分自声明处起至实现部分结束的任何程序段中有效。程序段与作用域:一个程序段是由声明部分和语句部分构成的结构,其一般结构为:声明部分begin语句end;第 6 章 枚举、子界与集合类型 1、类型定义语句 ObjectPascal 语言的高级数据类型在使用之前必须首先使用类型定义语句进行定义。类型定义语句的语法格式为:type〈标识符 1〉=〈类型 1〉;〈标识符 2〉=〈类型 2〉;其中保留字 type 表示类型定义段的开始。〈标识符〉是用户为自定义类型取的名称,〈类型〉是用户定义的数据类型名,既可以是 ObjectPascal 语言的标准数据类型,也可以是 ObjectPascal 语言的高级数据类型。2、枚举类型 2.1 枚举类型定义与变量的声明枚举类型的定义格式如下:type〈类型名称〉=(〈标识符 1〉,〈标识符 2〉,…,〈标识符 n〉);说明:例如,下面代码定义了一个具有 6 个元素的枚举类型 Color:typeColor=(Red,Blue,Green,Yellow,White,Black);
枚举类型变量的声明枚举类型变量的声明与其他类型变量的声明完全相同,如下面的代码声明了一个上述枚举类型 Color 的变量 C1 和 C2:varC1,C2:Color;2.2 枚举类型的运算(1)使用函数对于一个具有 n 个值的枚举类型,其中的枚举常量从左到右依次对应序数 0~n-1。使用函数Ord 可以得到枚举常量所对应的序数,函数 Pred 和 Succ 可以分别得到枚举常量的“前趋值”和“后继值”,函数 Low 和 High 则可分别得到第一个枚举常量和最末一个枚举常量。例如,在下面的定义中:typeweek=(Sun,Mon,Tue,Wed,Thu,Fri,Sat);枚举常量的序数依次为:0、1、2、3、4、5、6,ord(Fri)的值为 5,Pred(Fri)的值为 Thu,Succ(Fri)的值为 Sat。Low(week)的值为 Sun,High(week)的值为 Sat。注意:枚举类型的第一个枚举常量没有前趋值,最末一个枚举常量没有后继值。(2)关系运算由于每个枚举常量对应一个唯一的序数,因此可以在枚举常量之间进行关系运算。如在上述定义中,Sun<Wed 的值为真(True),Fri>=Sat 的值为假(False)。3、子界类型在 ObjectPascal 中,具有确定的数据类型(称为基类型),且其取值范围确定的数据可以定义为“子界类型”。3.1 子界类型定义与变量的声明子界类型的定义格式如下:type〈类型名称〉=〈常量 1〉..〈常量 2〉;例如:typemonth=1..12;week=(Sun,Mon,Tue,Wed,Thu,Fri,Sat);workday=Mon..Fri;子界类型变量的声明varm1:month;w1:workday;也可以不经过类型定义,而直接声明子界类型的变量:varm1,m2:1..12;3、集合类型 1.1 集合与集合类型集合是指具有相同性质且可以相互区分的对象的全体。(1)集合中的元素是互异的,即相同的元素视为是同一个元素。(2)集合中的元素是无序的,即{1,2,3,4}与{2,3,1,4}是同一个集合。(3)集合中的元素个数可以是有限的,也可以是无限的。(4)元素与集合的关系是“属于”或“不属于”,二者必取其一且仅取其一。
集合类型为了表示集合,在 Pascal 中引入了集合类型。集合类型属于构造类型,是由其他的数据类型按照一定的规则构造而成。1.2 集合类型定义与变量声明在使用集合类型之前,必须进行类型定义与变量声明。(1)集合类型的定义格式如下:type〈类型名称〉=setof〈基类型〉;typeLchar=setof'a'..'z';(2)集合类型变量的声明(1)使用类型定义:varL1:Lchar;直接声明集合类型的变量:varL1:setof'a'..'z';C1:setof(Red,Blue,Green,Yellow,White,Black);集合变量的取值集合变量的取值称为集合值,它是基类型元素的一个集合,取值范围是包括空集合在内的全体子集。集合值的一般表示形式为方括号括起来的元素序列,元素之间用逗号隔开:[〈元素 1〉,〈元素 2〉,…,〈元素 n〉]1.3 集合类型数据的运算在 ObjectPascal 中,集合类型数据的运算包括两大类,一类是集合的并、交、差运算,其运算结果仍为集合类型值;一类是集合的关系运算,其运算结果是布尔类型值。(1)集合的并、交、差运算(2)集合的关系运算(3)集合运算符的优先级第 7 章 数组与记录类型 1、 数组及其应用 1.1 静态数组静态数组在程序初始化时必须分配内存单元,明确其固定的大小和元素的数据类型。1.1.1一维静态数组数组通常可分为一维、二维和多维数组,在 ObjectPascal 中,定义一个一维数组类型,其声明格式为:Type〈数组类型标识符〉=array[〈下标类型〉]of〈基类型〉;1.1.2 二维静态数组二维数组是指一个一维数组中的元素类型本身又是一个一维数组,其一般形式为;Type〈数组标识符〉=Array[〈下标类型 1〉]ofArray[〈下标类型 2〉]of〈元素类型〉;也可以把上述形式简写成下面的形式:Type
〈数组标识符〉=Array[〈下标类型 1〉,〈下标类型 2〉]of〈元素类型〉;1.1.3多维静态数组多维静态数组的一般格式为:Type〈数组类型标识符〉=array[〈下标类型 1〉,〈下标类型 2〉,…,〈下标类型 n〉]of〈基类型〉;TypeTest1=array[1..10,1..10,1..30]ofinteger;VarArray1:Test1;Myarray:array[0..5,0..6,0..8]ofreal;1.1.4使用静态数组的注意事项(1)零基准数组。所谓零基准数组,就是下标从零开始的数组,例如:array[0..5]ofchar(2)数组的整体赋值。有两个数组 array1 和 array2,其变量定义如下:Vararray1,array2:[1..10]ofchar;如果要把 array2 中每一个元素的值相应赋值给 array1 中的元素,一般是使用 For 语句。(3)把数组作为过程或函数的形参ProcedureMyProc(VarArray1:Array[1..10]ofInteger);Begin…End;上述程序中,数组的定义和传递并在一起进行,并且 Array1 是作为变参传递的。1.2 动态数组1.2.1 一维动态数组一维动态数组的声明格式为:Type〈数组类型标识符〉=arrayof〈基类型〉;也可在变量声明中直接声明动态数组,其格式为:Var〈变量名〉:arrayof〈基类型〉;1.2.2多维动态数组Type〈数组类型标识符〉=arrayofarrayof…arrayof〈基类型〉;Var〈变量名〉:〈动态数组类型标识符〉;或Var〈动态数组变量名〉:arrayofarrayof…arrayof〈基类型〉;例如,声明一个二维动态数组变量TypeTMessageGrid=arrayofarrayofstring;VarMsGS:TMessageGrid;动态数组的大小通过标准过程 SetLength 来明确。SetLength(array1,10);设定 10 个元素的数组
SetLength(array2,2,3);设定两行三列的数组SetLength(array2,10);设定行数 10,列数不定 SetLength(array2[1],5);设定第二行列数为52、 记录类型 2.1 记录类型的声明声明一个记录类型的一般格式为:Type〈记录类型标识符〉=Record〈域名表 1〉:〈类型 1〉;〈域名表 2〉:〈类型 2〉;…〈域名表 n〉:〈类型 n〉;End;2.2 访问记录域与 With 语句2.2.1限定访问记录中的字段在 ObjectPascal 中,限定访问记录中某个字段的格式是:〈记录变量名〉.〈字段名〉;TypeCustomer=RecordCustid:Integer;Name:String[20];Cpsl:Real;Addr:String;IfPay:Boolean;end;(1)记录的整体赋值尽管记录中的每一个字段可以进行各种合法的运算,但记录作为一个整体,只能进行赋值运算,即把一个记录整体赋给另一个类型一致的记录。(2)记录与数组记录和数组的相同点是:两者都是构造类型,是多个相关数据的集合,都可以整体赋值。记录和数组的不同点是:1)数组中元素的类型是相同的,而记录中的字段可以是不同类型。2)数组中元素的个数在一定范围内是可变的,而记录中字段的数量是固定的。3)数组的元素是通过数组变量名加方括号和下标来访问的,而记录中的字段是通过记录变量名加一个小圆点和字段名来访问的。2.2.2 使用 With 语句ObjectPascal 提供了一个 With 语句,其格式是:With〈记录变量名〉Do〈语句〉WithCust1DoBeginCustid:=2;Name:='ZHANG':Cpsl:=78.967;End;
With 语句中还可以有 With 语句,这称为 With 嵌套。第 8 章 指针类型 1、 指针类型的声明声明指针类型的语法如下:Type〈指针类型标识符〉=^〈基类型〉;其中,指针类型标识符即是指针类型名,基类型可以是简单类型,如整型、实型、字节型等,也可以是结构类型,如数组、记录、集合等类型。2、 指针的运算 2.1New 过程New 是 ObjectPascal 中的标准例程(在 System 单元声明),用于在应用程序中为动态变量分配一块区域,并把该区域的地址赋给指针变量。所分配区域的大小由指针所指的类型决定。New 过程的声明如下:ProcedureNew(varP:Pointer);2.2@操作符@操作符是个一元操作符,用于获得操作数的地址,@后面的操作数可以是变量、过程、函数或类类型中的方法。程序示例如下:&203& 4*0!-.3.%*50-./0.%*,64-.7 %5!-.%5*,-.-.88PTR 函数Ptr 函数是 Pascal 中的标准例程(在 System 单元声明),用于把一个指定的地址转换为指针。Ptr 函数的语法为:functionPtr(Address:Integer):Pointer;其中 Address 是一个整数,用于表示一个 32 位地址,函数执行的结果是把 32 位地址转化为指针。2.4.GetMem 过程GetMem 过程也是 Pascal 中的标准例程(在 System 单元声明),类似于 New,用于在应用程序堆栈中为动态变量申请一块指定大小的区域,并把该区域的地址赋予指针变量。GetMem 函数的语法为:procedureGetMem(varP:Pointer;Size:Integer);3、 无类型指针 无类型的指针是指指针变量在声明时没有指明基类型。无类型指针在声明中只使用 Pointer。例如:varpAnyPoint:Pointer;4、 字符指针类型 字符指针类型即 PChar 数据类型,是一个指向以 NULL(不是零)字符结尾的字符(Char)串的指针。
5、 动态存储结构的实现 指针常用来描述动态存储结构的实现。动态存储结构中较常用的有链表、堆栈、队列等存储结构。可以把堆栈和队列看成特殊的链表。链表是一组元素的序列,链表中的元素通常称为节点,第一个节点称为表头,最后一个节点称为表尾。指向表头的指针称为头指针,在这个头指针中存放着表头的地址。节点一般用记录来描述,描述节点的记录至少含有两个域,一个域用来存放数据,另一个存放下一个节点的地址,表尾不指向任何节点,设为 NIL。9(...:,.......*2-.......:)*5:-...;;3....<*5:-第 9 章 菜单与多选项卡 1、 菜单 1.1 主菜单主菜单一般称为菜单栏,其中包括一个或多个选择项称为菜单项。当单击一个菜单项时,包含子菜单项的列表即被打开。(1)菜单编辑器打开一个新窗体,单击组件栏中 standard 页的 mainmenu 组件,并将其放在容器 form1 中,即可产生主菜单项。双击 mainmenu 组件或右键单击 mainmenu,在弹出的快捷菜单中选取 menudesigner 项;再或单击 mainmenu 组件,并在对象监视器中选 item 属性,鼠标点击按钮,即可出现菜单编辑器,并自动产生一个空菜单项。(2)菜单项改进方法a.设置热键。b.添加复选标记。c.设置单选菜单项。d.使用菜单模板。在 Delphi 中提供一些已经设计好的菜单模板,并且可以建立自己的菜单模板。这样可节省编程时间,减少错误,方便了用户的使用。在打开菜单编辑器后,单击鼠标右键,在出现的快捷菜单中选择“InsertfromTemplate”命令,将出现对话框,其中列出了 Delphi 所提供的 7 种菜单模板。1.2 弹出式菜单弹出式菜单能以更加灵活的方式为用户提供更加便利的操作,当用户在不同位置单击鼠标右键,则将显示一组不同的菜单项。popupmenu 组件在组件栏中 standard 标签中,其设计方法与 mainmenu 基本相同。2、 工具栏 工具栏用于实现具体的功能实现,一般是通过工具按钮实现。2.1 如何设置工具栏在 Delphi 中工具栏(toolbar)组件和工具按钮(toolbutton)组件位于 Win32 页中,工具栏按钮组件不能和其他窗口组件连用,只能放在工具栏组件上。2.2 工具栏的改进(1)工具栏的显示与隐藏
有时,会要求隐藏某些工具栏以提供较多的空间,可以通过设置 toolbar 组件的 visible 属性来实现。(2)工具栏按钮的分组设置工具栏按钮的 group 属性为 true,可将相邻的 group 属性为 true 的按钮组成一组,右键单击工具栏组件,弹出快捷菜单,选择“NewSeparator”项,则可添加分隔符,将 group 属性为 true 的按钮分为两组。3、 PageControl 控件 在使用多个窗体的情况下,可以使用菜单或按钮等完成多个窗体之间的切换。该组件位于 WIN32 组件板上,适用于每一个选项卡显示一个独立的信息,该控件的每一个选项卡都是一个TabSheet 控件。在新的工程的窗体中添加一个 PageControl 控件,选择该控件,单击鼠标右键,在弹出的快捷菜单中选择“NewPage”选项,就可以在控件中添加选项卡,多次使用“NewPage”命令可以添加多个选项卡。用户可以分别在每一选项卡中进行设计,各个选项卡之间互不干涉,每个选项卡可以根据用户的需要来设计。三、重点习题(一)单项选择题1、在RadioGroup组件中有4个单选框,当选中第2个单选框时,RadioGroup组件中的ItemIndex属性值应为()。A.0B.1C.2D.32、Typeaarrays=[1…8,1…5]ofinteger,该类型定义了多少个下标元素()。A.45B.54C.48D.403、Delphi的所有类都是从什么类继承下来的()。A.TcomponentB.TobjectC.TstreamD.Tnull4、下列组件中属于可视组件的是哪一个()。A.TdatasourceB.TopendialogC.TtableD.Tscrollbar5、设有过程procedurepro(VARx,y:integer);变量a,b为整型变量,其值分别为5、6,则合法的过程调用语句是()。A.Pro(5,6)B.pro(5,b)C.pro(a,6)D.pro(a,b)6、用户开发程序时需要经常在窗体和编辑器窗口之间来回切换,可使用快捷键()。A.F12 和 F11B.F12 和 F13C.F12 和 Ctrl+F12D.F12 和 Alt+F127、某函数如下:Functioncheck(n,k:Integer):Integer;Varm:Integer;BeginRepeatm:=nmod10;n:=ndiv10;k:=k-1;Untilk=0;Check:=mEnd;若调用语句 y:=check(3725,3);则运行后 y 的值为()。
A.7B.5C.2D.08、已知Vara:array[1..10]ofinteger;k,I:integer;程序段:k:=1;fori:=1to10doifa[i]>a[k]thenk:=i;writeln(a[k]);执行后输出的是()。A.数组中的平均值B.数组中的最大值C.数组中的最小值D.数组中的总和9、以下语句的循环执行次数是()。x:=35;y:=4;whiley<=xdoy:=y+y;A.3B.4C.5D.610、下列哪个不属于可视类的组件?()A.TbuttonB.TimageC.TlabelD.TopenDialog.(二)判断题1、粘贴时,如果作为容器的组件已被选择,则剪贴板中的组件会被当作容器组件的子组件来进行粘贴操作。()2、在由 Delphi管理的窗体类声明段中加进任何代码都会引起程序出错。()3、大多数组件的属性可以在运行时改变,而且,有些只能在运行时刻改变。()(三)填空题1、用于建立菜单项的下划线快捷方式的字符是。2、Delphi 有三种控制循环的语句:语句,语句,语句。(四)程序填空题、定义一个函数 =,传递整型参数 ,其返回值为 >: 的和。()=(*0)-+?*0-0=*, ! !?*, !- !*,?-;-(五)问答题、在一个单元中,全局变量和局部变量的含义是什 么?说明在单元文件中如何定义这两种变量(可举例说明)。(六)编程题、利用数组求出任意 个数的最大值和最小值。要求 个数据利用随机数函数生成,范围是在 之间。在 ; 中显示原始的这任意 个数,在 ; 中显示最大值,
用鼠标拖拉活动控件边框上的小方块可以使控件在相应的方向放大与缩小。按下〈Shift〉键,用左右方向键可以调整控件的宽度,用上下方向键可以调整控件的高度。当控件为活动控件时,按下〈Ctrl〉键不放,用方向键可以使控件向相应的方向移动。也可以把鼠标指向控件内部,按下鼠标左键,拖动控件到窗体的任何位置。(3)控件的复制与删除选择菜单“Edit”→“Align...”,可以打开“Alignment”(对齐)对话框。选择菜单“View”→“AlignmentPalette”,则可以打开“Align”(对齐)板。5、 创建 Delphi 应用程序 (1)应用程序所包含的文件① 单元文件单元是扩展名为 pas 的源程序代码,单元中可以定义或者声明常量、变量、函数、过程、对象、组件等等。设计单元的好处是,单元可供其它应用程序共享。单元还可以独立编译为扩展名为 dcu 的文件,编译后的 dcu 文件可以连接到可执行文件中。单元文件不能够独立运行。单元文件分为如下几种。与窗体相关的单元文件,这种单元文件与窗体一一对应。用于存储公用函数、过程、常量、变量的单元文件,例如 math。组件文件,该单元提供组件开发接口。单元文件是有一定结构的,一般一个单元文件由名称、接口、实现和初始化 4 个部分组成。② 窗体描述文件每个窗体都包含一个扩展名为 dfm 的窗体描述文件,该窗体描述文件用于描述窗体及窗体内组件的属性。鼠标右键单击窗体选择“ViewasText”菜单可以显示窗体描述文件。③ 项目文件项目文件的扩展名为 dpr。项目文件是应用程序的宏观框架,它管理着应用程序的多个单元。(2)创建控制台应用程序Delphi 应用程序包括控制台应用程序和 Windows 应用程序。前者是基于 Dos 环境的,在 Windows 之前的程序都是基于 Dos 环境的。虽然现在大多数情况下使用基于 Windows 环境的应用程序,但是有时候也使用基于 Dos 环境下的控制台程序。(3)创建 Windows 应用程序与控制台应用程序相比,Windows 应用程序需要使用窗体、组件等界面元素,因此 Windows 应用程序需要设计界面,与面向过程的程序设计相比,Delphi 面向对象的应用程序采用事件驱动,系统完成事件过程框架,其余的程序代码还需要用户自己完成。(4)Delphi 可视化编程的步骤① 设计界面。利用控件在窗体上创建各种对象。② 设置属性。设置窗体和控件等对象的属性。③ 编写代码。在 Delphi 所提供的程序框架中加入完成功能的代码。④ 运行程序。保存并测试程序运行结果。当然,也可以在创建对象的同时,一边设置对象的属性,一边编写事件的过程代码。用户开发程序时需要经常在窗体和编辑器窗口之间来回切换,可使用快捷键 F12 和 F11 6、 窗体介绍由标题栏、工作区和边界组成,通常标题栏中还有控制菜单、最大化/复原按钮、最小化按钮、关闭按钮等。用鼠标左键按下标题栏可以拖动窗体,用鼠标指向窗体的边界,如果出现双向的箭头,拖动鼠标可以改变窗体的大小。第 2 章 Delphi 的语法基础
; 中显示最小值。四、重点习题参考答案(开卷考试仅提供客观题答案,仅供参考)(一)单项选择题1.B 2.D 3.B 4.D 5.D 6.A 7.A 8.B 9.B 10.D(一)判断题1 对,2 错,3 对考试指导使用说明: 本考试指导只适用于 201803 学期 6 月期末考试使用,包括正考和重修内容。指导中的章节知识点涵盖考试所有内容,给出的习题为考试类型题,习题答案要点只作为参考,详见课程讲义或笔记。如果在复习中有疑难问题请到课程答疑区提问。最后祝大家考试顺利!
1、 语言成分 (1)程序结构ObjectPascal 语言的程序结构(以控制台应用程序为例),包括程序名称、说明部分(包括单元引用、函数、过程、类型、变量、常量的说明或定义)和程序体。(2)关键字和标识符关键字(KeyWord)又叫做保留字(ReservedWord)是系统事先定义好了的有特殊含义并规定不得重新定义的词汇。ObjectPascal 定义了 65 个关键字。标识符是用来表示变量、常量、类型、函数、过程、对象等名称的符号,Pascal 标识符分为标准标识符和自定义标识符。(3)分隔符和注释分隔符:用于分隔两个语法单位,ObjectPascal 语言的分隔符分为两种:分号:用于分隔语句。逗号:用于分隔数据。注释:是程序中用于解释或者说明的部分,在程序运行中注释不被执行。Pascal 语言提供两种注释:单行注释:注释号“//”之后的内容就是注释。多行注释:注释号“{”和“}”之间就是注释,也可以用“(*”和“*)”来注释多行。2、 数据类型 (1)数值型数据ObjectPascal 数值型数据类型又分为整型和实型。整型的数据类型有正整型、零、负整型。整型数据类型是顺序类型。实型的数据有整数部分和小数部分。实型数(简称实数)不是顺序类型。实数有两种表示方法,小数表示方法和科学计数表示方法。(2)字符型数据ObjectPascal 字符型数据类型又分为字符型和字符串型。字符型(char)也是顺序类型,表示单一的一个字符。注意:两个单引号不表示空字符。字符串类型由多个字符组成的字符序列就是字符串。例如'abc'就是一个字符串。ObjectPascal 包含 4种类型的字符串。string 使用最为广泛。Delphi 中 Text 属性、Caption 属性都是 string 类型。(3)布尔型数据布尔型数据用于逻辑计算,表示事件的真假,它只有两个值真(true)和假(false)。它是顺序类型,false 的序号是 0,true 的序号是 1。3、 常量和变量(1)常量(constant)数值常量就是在程序中直接引用的常数,如整型的常数、实型的常数、布尔型的常数,字符型常数、字符串型常数等等。符号常量以标识符形式出现的常量。如果在程序中某个常数经常出现,就可以定义一个标识符来代替这些常数,这个标识符就是符号常量。(2)变量(variable)是指在程序执行过程中其值可以改变的量,变量其实就是某个内存地址的标识符。在 ObjectPascal 中变量要先定义,才能使用。变量的定义格式为:var
<变量名 1>:<类型名 1>;<变量名 2>:<类型名 2>;……<变量名 n>:<类型名 n>;当多个变量具有相同的类型的时候,可以使用比较紧凑的格式:var<变量名 1>,<变量名 2>,<变量名 n>:<类型名>;说明:var 是关键字,表示变量定义段的开始。变量名是合法的 ObjectPascal 标识符。类型名是 ObjectPascal 的标准类型或者是其它 ObjectPasal 数据类型。同一作用范围内的变量名不能同名。4、 运算符和表达式 (1)算术运算符算术运算符有+、-、*、/、div、mod。其中+、-、*、/可以完成加、减、乘、除四则运算。而 div 和 mod 分别用于求整除的商和余数,div 和 mod 运算符要求操作数必须是整型数。优先级由高到低分别为: 取负!"#$(2)位运算符位运算符对操作数进行二进制的位运算,位运算有 and(与)、or(或)、not(非)、xor(异或)、shl(左移)、shr(右移)。位运算的对象是整数。(3)字符串运算符字符串运算符用于将多个字符串或者字符连接起来。运算符为“+”,运算格式为:<字符串表达式>|<字符表达式>+<字符串表达式>|<字符表达式>(4)关系运算符关系运算符用于数值型、布尔型、字符型、字符串型数据的比较,运算结果是布尔型,关系运算符有:=、>、>=、<、<=、<>、in 等。字符比较依据是字符 ASCII 码的大小、字符串的比较是从左到右进行的。(5)逻辑运算符又称为布尔运算符,用于对布尔类型的数据进行运算。主要有 not(非)、and(与)、or(或)、xor(异或)。布尔运算具有短路计算功能,即从左往右计算,如果表达式的值已经确定,则立即终止计算,不再继续计算其它表达式的值。(6)运算符的优先级运算符是有优先级的,优先级用于决定表达式中的运算的先后次序,优先级高的先运算,同一优先级的按照从左到右运算的顺序运算。各种运算符按照从高到低的优先级顺序列出如下:括号()、函数not、+、-(取正、负符号)乘法类:*、/、div、mod、and、shl、shr加法类:+、-、or、xor=、>、>=、<、<=、<>、in5、 常用的函数与过程 1.1数学运算函数和过程(1)绝对值函数functionAbs(X);(2)平方函数
functionSqr(X:Extended):Extended;functionSqr(X:Integer):Integer;(3)平方根函数functionSqrt(X:Extended):Extended;(4)三角函数functionSin(X:Extended):Extended;functionCos(X:Extended):Extended;functionArcTan(X:Extended):Extended;(5)取整函数functionRound(X:Extended):Int64;(说明:对 x 四舍五入取整)functionTrunc(X:Extended):Int64;(说明:返回最大的且不大于 x 本身的整数)(6)指数函数functionExp(X:Real):Real;(7)对数函数functionLn(X:Real):Real;(8)随机函数functionRandom[(Range:Integer)];(9)随机过程procedureRandomize;(10)Pi 函数functionPi:Extended;1.2字符处理函数和过程(1)大小写转换函数functionUpperCase(constS:string):string;functionLowerCase(constS:string):string;(2)比较字符串大小函数functionCompareStr(constS1,S2:string):Integer;(3)将一个或者多个字符串连接起来的函数functionConcat(s1[,s2,...,sn]:string):string;(4)查找字符串函数functionPos(Substr:string,S:string):Integer;(5)取子字符串函数functionCopy(S,Index,Count:Integer):string;(6)求字符串长度函数functionLength(S):Integer;(7)去掉字符串前置不可见字符的函数functionTrimLeft(constS:string):string;overload;functionTrimLeft(constS:WideString):WideString;overload;(8)去掉字符串前置和后面的不可见字符的函数functionTrim(constS:string):string;overload;functionTrim(constS:WideString):WideString;overload;(9)删除子字符串过程procedureDelete(varS:string,Index,Count:Integer);
(11)插入字符串过程procedureInsert(Source:string,varS:string,Index:Integer);1.3日期时间函数和过程(1)日期时间函数functionNow:TDateTime;(2)日期函数functionDate:TDateTime;(3)时间函数functionTime:TDateTime;functionGetTime:TDateTime;(4)星期函数functionDayOfWeek(Date:TDateTime):Integer;(5)日期与时间的格式的函数functionFormatDateTime(constFormat:string,DateTime:TDateTime):string;1.4类型转换函数和过程(1)日期转化为字符串functionDateToStr(Date:TDateTime):string;(2)时间转化为字符串functionTimeToStr(Time:TDateTime):string;(3)时间、日期转化为字符串functionDateTimeToStr(DateTime:TDateTime):string;(4)时、分、秒、毫秒转化为时间类型functionEncodeTime(Hour,Min,Sec,MSec:Word):TDateTime;(5)时间类型转化为时、分、秒、毫秒procedureDecodeTime(Time:TDateTime,varHour,Min,Sec,MSec:Word);(6)年、月、日转化为日期类型functionEncodeDate(Year,Month,Day:Word):TDateTime;(7)日期类型转化为年、月、日procedureDecodeDate(Date:TDateTime,varYear,Month,Day:Word);(8)字符串型转化为数值型的过程procedureVal(S,varV,varCode:Integer);(9)整型转化为字符串型functionIntToStr(Value:Integer):string;overload;functionIntToStr(Value:Int64):string;overload;(10)字符串型转化为整型functionStrToInt(constS:string):Integer;functionStrToInt64(constS:string):Int64;(11)浮点型转化为字符串型functionFloatToStr(Value:Extended):string;(12)字符串型转化为浮点型functionStrToFloat(constS:string):Extended;(13)字符串转化为布尔类型functionStrToBool(constS:string):Boolean;(14)布尔类型转化为字符串类型
functionBoolToStr(B:Boolean,UseBoolStrs:Boolean=False):string;1.5其它函数和过程(1)ASCII 码转化为字符functionChr(X:Byte):Char;(2)取序号函数functionOrd(X);(3)前导函数functionPred(X);(4)后继函数functionSucc(X);6、语句 语句是执行计算机程序的指令,计算机的各种操作都是通过计算机语句来实现的。ObjectPascal 语句主要分成基本语句和构造语句两种。语句以“;”作为结束标志,end 之前的“;”可以省略不写。基本语句分为:赋值语句、读写语句、转向语句和空语句。构造语句分为:复合语句、条件语句、循环语句和开域语句。基本语句是执行一项特定操作的简单语句,它包含赋值语句、转向语句和空语句、读写语句、注释语句等等。构造语句将在其他章节讲解,本节讲述简单语句。1)赋值语句将一个表达式的值赋给一个变量、数组元素或者对象的属性,赋值号为“:=”。2)空语句单独一个分号就是一个空语句。设计空语句的目的只是语法需要而已,空语句不会做任何操作。3)读语句读语句用于从标准设备(键盘)输入数据。它有两种格式:read(变量,变量,……);readln(变量,变量,……);其中,read 语句必须有参数,而 readln 可以没有参数,没有参数的 readln 语句不加括号,单独一个 readln 语句表示等待输入回车。4)写语句写语句用于将数据从标准设备(显示器)输出,有两种格式:write(数据项 1,数据项 2,……);writeln(数据项 1,数据项 2,……);其中数据项可以是常数、变量、函数、表达式等等。Write 语句必须有参数,write 语句和 writeln 语句用于将这些数据项输出在显示器上,writeln 表示输出后换一行。writeln 语句可以没有参数,表示输出一个空行,没有参数的 writeln 语句不需要括号。5)Goto 语句goto 语句是转向语句,与 goto 同类的转向语句还有 break、continue,这两个转向语句将在流程控制这一章讲解。Goto 语句不符合结构化程序编程的思想,建议少用,但是有时候使用 goto 语句可以使程序变得非常简单、方便。Goto 语句的格式为:Label语句标号 1,语句标号 2,……;//在定义部分定义语句标号Goto语句标号 n;//转向到语句标号 n 指向的行执行……语句标号 n:语句 x;//转到此处执行
说明:语句标号要先定义后使用。不允许用 goto 语句从构造语句(循环,分支等)外转到构造语句内6)复合语句根据语法需要,例如,如果某个条件成立则需要执行多个语句。这时候将多个语句用 begin和 end 括起来,形成复合语句。复合语句的格式为:begin<语句 1>;……<语句 n>;end;第 3 章 窗体和常用控件 1、 窗体1.1 窗体的属性窗体的属性用来描述窗体的高低、长宽、颜色、边框等特性的。Name 属性Caption 属性Height、Width、ClientHeigth、ClientWidth、Top 和 Left 属性Enabled 属性Visible 属性Color 属性Font 属性Align 属性FormStyle 属性:fsNormal fsMDIChild fsMDIForm BorderIcons 属性BorderStyle 属性WindowState 属性1.2 窗体的事件窗体的事件很多,常用的事件有:(1)OnCreate 事件建立窗体时首先触发该事件,一般把程序的初始化代码写在 OnCreate 事件过程中。(2)OnShow 事件显示窗体时,触发该事件。(3)OnPaint 事件重画窗体事件,窗体改变大小,窗体被遮盖时触发该事件。(4)OnActivate 事件激发窗体的时候(窗体得到焦点)触发该事件。(5)OnClose 事件和 OnCloseQuery 事件关闭窗体时触发这两个事件。当窗体要关闭时,首先触发 OnCloseQuery 事件,该事件处理过程中有一个 Boolean 类型的参数 CanClose,默认值为 True,表示窗体可以关闭,当 CanClose 的值为 False 时,窗体不能关闭,不会触发 OnClose 事件。如果在 OnCloseQuery 事件过程中设置 CanClose 的值为 True,则窗体可以关闭,接下来将触发 OnClose 事件。在 Onclose 事件处理过程中,有一个参数 Action,用来决定关闭窗体的实际操作。1.3 窗体的方法常用的方法主要有: