490 likes | 809 Views
Delphi 实用教程. 第 4 章 菜单类组件和工具栏. 4.1 Delphi 7 的菜单类组件简介. 菜单分为 下拉式菜单 下拉式菜单的主菜单栏显示在窗体的标题栏之下,在下拉菜 单中排列各菜单选项。 快捷菜单 快捷菜单通过单击鼠标右键可以出现在用户区的任何地方。. 4.2 主菜单组件 MainMenu.
E N D
Delphi实用教程 第4章 菜单类组件和工具栏 第4章 菜单类组件和工具栏
4.1 Delphi 7的菜单类组件简介 菜单分为 • 下拉式菜单 下拉式菜单的主菜单栏显示在窗体的标题栏之下,在下拉菜 单中排列各菜单选项。 • 快捷菜单 快捷菜单通过单击鼠标右键可以出现在用户区的任何地方。 第4章 菜单类组件和工具栏
4.2主菜单组件MainMenu • Delphi7通过MainMenu组件来创建主菜单,MainMenu组件为非可视组件。在设计阶段,为窗体添加菜单后,MainMenu组件也显示在窗体上,而运行时主菜单将自动显示在菜单栏的位置。MainMenu组件位于组件面板Standard选项卡上(图标为 )。 创建主菜单时,将该组件拖 放到当前窗体中(MainMenu组件不 能改变大小),这时对象查看器中 会显示出MainMenu的属性。 MainMenu组件 MainMenu组件的属性 第4章 菜单类组件和工具栏
4.2.1 MainMenu组件的主要属性 1. AutoMerge属性 AutoMerge属性属性决定在多窗口的应用程序中。非主窗体 的主菜单是否和主窗体中的主菜单合并。 2. Images属性 Images属性是通过指定一组Bitmap或Icon的文件,在 MenuItem中指定Images的索引,这样可以实现在菜单项中 加入图标。 3. Items属性 Items属性用于存储主菜单中各菜单项的内容。在菜单编辑 器中编辑菜单,编辑好后该项会自动设置。 第4章 菜单类组件和工具栏
4.2.2 菜单编辑器 • 双击窗体中的MainMenu组件或者在对象查看器中单击MainMenu组件的Items属性右侧的省略号将进入菜单编辑器。 在对象查看器中的Caption属性中输入“文件”后按回车键,在菜单编辑器中将看到一项标题为“文件”的菜单。因为是设计主菜单,所以第一项菜单将出现在窗体标题栏下的菜单栏上。输入完成后,在菜单编辑器中,刚才输入的菜单项下会自动产生一个空白菜单项,同时右侧出现一个虚框(当设计完一个子菜单后,单击该虚框将进入下一个子菜单的设计)。用鼠标单击菜单编辑器中的“文件”菜单,将在“文件”菜单下出现一个新的空白菜单,在Caption属性中输入“新建”,则该空白条上将出现“新建”的标题。 菜单编辑器 第4章 菜单类组件和工具栏
4.2.2 菜单编辑器 菜单项(MemuItem)中几个重要的属性: 1. Caption属性 Caption属性决定了菜单的标题。 2. Name属性 Name属性是菜单项对象的标志,在代码设计过程中通过 Name对菜单进行引用。 3. Checked属性 Checked属性可以标记菜单项是否是选中状态。 4. Enable属性 该属性确定菜单项是否有效。 5. ShortCut属性 该属性给菜单项定义快捷键,可以通过下拉列表选择。 6. Visible属性 该属性决定菜单项是否可见。 第4章 菜单类组件和工具栏
4.2.2 菜单编辑器 7. Break属性 该属性可以把一个菜单分成几列来显示。它有下面3种设置方式: lmbNone:在该菜单处不折行。 lmbBarBreak:在该菜单处折行,并且两列之间有一竖线分隔。 lmbBreak:在该菜单处折行,两列之间没有竖线分隔。 在菜单栏的Caption属性中输入“一”即可实现分隔线 第4章 菜单类组件和工具栏
4.3快捷菜单组件PopupMenu4.3.1 快捷菜单 • 在菜单编辑区中单击鼠标右键将打开快捷菜单。 在当前高亮显示的菜单项前插入一个菜单项。 删除当前高亮显示的菜单项 菜单编辑的快捷菜单 第4章 菜单类组件和工具栏
4.3.1 快捷菜单 • 菜单项加上相应的菜单OnClick事件代码有下面3种方法: 方法1: 通过在菜单编辑器中双击某一菜单项,Delphi 7将自动定位 到光标在代码编辑器相应菜单项的OnClick事件代码处。 Procedure Tform1.File1Click(Sender:Tobject); Begin {用户可以在此编写OnClick事件响应内容} end; 这时就可以在代码编辑区内编写正确的OnClick事件代码。 双击主窗体中的菜单项,也可以进入菜单项的事件代码编辑 区。 第4章 菜单类组件和工具栏
4.3.1 快捷菜单 方法2: 通过对象查看器,在对象查看器中选择Event选项卡,在想 要 加入的事件右侧的输入区内双击即可进入相应的事件代码 编辑区。 例: 想进入菜单项的OnDrawItem事件代码编辑区,可以 在对象查看器的Event选项卡中选择OnDrawItem,单 击右边的空白区,则进入如下所示的事件代码编辑 区。 ProcedureTform1.File1DrawItem(Sender:Tobject; Bcanvas:Tcanvas;Arect: rect;Selected:Boolean); Begin {可以在此编写OnDrawItem的事件代码} end; 第4章 菜单类组件和工具栏
4.3.1 快捷菜单 方法3: 在应用程序代码中实现菜单设计,用TmainMenu类的方法, Create、Add、Insert和Delete。 (1)Create方法 ▲语法: Constructor Create(Aowner:TComponent);override; Create方法是一个构造函数,调用它可以创建一个菜 单项,并自动设置新建菜单项的Enabled和Visible属性。 (2)Add方法 ▲语法: Procedure Add(Item:TMenuItem); Add方法向调用它的菜单英所在的菜单中加入一项命令。 第4章 菜单类组件和工具栏
4.3.1 快捷菜单 (3)Insert方法 ▲语法: Procedure Insert(Index:Integer;Item:TMenuItem); 例向窗体的主菜单中加入一条菜单项: Procedure Tform1.Button1Click(S ender:Tobject); Var NewItem:TmenuItem; begin NewItem:=TmenuItem.Create(FileMenu); try NewItem.Caption:={要加入的菜单项名}; FileMenu.Insert(1,NewItem); except NewItem.Free; Raise; end; end; 第4章 菜单类组件和工具栏
4.3.1 快捷菜单 (4)Delete方法 ▲语法: Procedure Delete(Index: Integer); 菜单项索引值 第4章 菜单类组件和工具栏
4.3.2 快捷菜单设计 • 选择组件栏中Standard选项卡下的PopupMenu组件,并把它拖放到当前活动窗体中。要在应用程序中使PopupMenu有效,必须设置PupopMenu组件中的AutoPopup属性的值为True。在窗体中双击PopupMenu对象就可以进入菜单编辑器,在其中设计快捷菜单。 第4章 菜单类组件和工具栏
捷菜单设计示例 【例】设计具如图所示的PopupMenu菜单。 (1)窗体设计。 在窗体上放置一个WebBrowser组件 (位于组件面板的 Internet选项卡上)和一个PopupMenu组件。 快捷菜单设计 第4章 菜单类组件和工具栏
捷菜单设计示例 (2)组件的属性设置。 (3)编写程序代码。 procedure Tform1.N1Click(Sender:Tobject); //“复制”菜单项的OnClick事件处理 begin WebBrower1.CopyToClipboard; End; 第4章 菜单类组件和工具栏
捷菜单设计示例 procedure Tform1.N2Click(Sender:Tobject); //“剪切”菜单项的OnClick事件处理 begin WebBrower1.CutToClipboard; End; procedure Tform1.N3Click(Sender:Tobject); //“粘贴”菜单项的OnClick事件处理 begin WebBrower1.PasteToClipboard; End; procedure Tform1.N4Click(Sender:Tobject); //“删除”菜单项的OnClick事件处理 begin WebBrower1.Clear; End; 第4章 菜单类组件和工具栏
4.4 快捷键及热键设计 • 快捷键是指用户可以通过按下Alt键各菜单项中带下划线的字母来打开菜单。 • 热键是指用户可以通过一定键的组合,不用打开菜单就可以激活菜单。 置菜单属性中的快捷键(ShortCut)属性 在菜单项的Caption属性中输入属性值时,在要定义快捷键的字母前加“&” 具有热键的菜单项 第4章 菜单类组件和工具栏
4.5 子菜单设计 1.使用Create Submenu快捷菜单命令设计子菜单 2.通过拖放操作设计子菜单 拖动后的子菜单 拖动前的菜单 第4章 菜单类组件和工具栏
4.6 使用菜单模板4.6.1系统菜单模板 • 选择菜单编辑器快捷菜单中的Insert Form Template命令,将弹出一个Insert Template对话框,选中一个模板,然后单击OK按钮,即可在菜单编辑器中看到插入的菜单模板,并且窗体中也加入了该菜单模板。 菜单模板对话框 第4章 菜单类组件和工具栏
4.6.2 用户自定义菜单模板 • 用户自己设计的菜单也可以保存成菜单模板,选择快捷菜单中的Save as Template命令,然后在弹出的Save Template对话框键入要保存的模板名即可。 • 要删除菜单模板,可单击菜单编辑器快捷菜单中的Delete Template命令,将打开Delete Template对话框,选择要删除的菜单模板,单击OK按钮即可。 添加新模板 第4章 菜单类组件和工具栏
4.7 工具栏 • 工具栏(Toolbar)通常是一个位于主窗体的上方,在菜单栏下面的面板,其中包含了许多控制组件,尤其是按钮。工具栏可以使应用程序为用户提供一个简单、快捷的菜单命令,使用户能够选择它,并有效的使用程序。 第4章 菜单类组件和工具栏
4.7.1 工具栏组件ToolBar • 工具栏组件在组件面板的Win32选项卡上,工具栏组件可用来管理和安排可视的组件。使用工具栏组件具有下列优点: • 在工具栏组件上按钮的大小和间距自动保持一致。 • 其他的控件也自动保持它们的相对位置和高度。 • 若在一行中按钮显示不下,可以自动折行显示。 工具栏组件 ToolBar(工具栏)组件 第4章 菜单类组件和工具栏
4.7.1 工具栏组件ToolBar • ToolBar组件的常用属性: Align属性的值及其含义 第4章 菜单类组件和工具栏
4.7.2 工具栏按钮ToolButton组件 • 工具栏按钮ToolButton组件是一种特殊的按钮组件,它只配合工具栏组件使用,不能放置在其他窗口组件上。要在工具栏组件上添加工具按钮,右单击工具栏组件在弹出的快捷菜单中选择NewButton菜单命令即可生成一个空白的工具栏按钮。 • 主要属性有: 1. Grouped属性 该属性为布尔型,当它为True并且Style属性的值为tbsCheck 时,同一组中的按钮一次只能选定一个。对按钮分组单击工 具栏组件,在弹出的快捷菜单中选择“New Separator”菜单命 令即可。 2. ImageIndex属性 该属性为整型,用来确定出现在工具栏按钮上的图标。若其值为0,则工具栏按钮显示工具栏组件Images属性所确定的图标列表中的第1个图标。 第4章 菜单类组件和工具栏
4.7.2 工具栏按钮ToolButton组件 3. Down属性 该属性为布尔型,当它为True时,工具栏按钮被选定,这时按 钮为按下的。当按钮不选定时,按钮为弹起的。 4. Style属性 确定工具按钮的显示风格。 Style属性的值及其含义 第4章 菜单类组件和工具栏
4.7.3 快捷按钮操作模式 • 快捷菜单有三种操作模式: • 菜单项的有效和无效 菜单项的Enabled属性用于设置其是否有效。 • 复选标记 菜单项的Checked属性进行设置。 • 单选菜单项 将几个相关的菜单项的RadioItem的属性值设置为True,然后将 它们的GroupIndex属性设置为相同的值,并设置其中的一个菜单 项的Checked属性为True即可。 第4章 菜单类组件和工具栏
4.7.4 工具栏的制作 • 制作步骤: • 设置图表列表。在Win32页标签中选择图表列表组件,将其放到窗体上。双击窗体的图标列表组件,打开“图标列表编辑框”。 • 设置工具栏。在窗体上添加工具栏按钮组件,并设置其属性。 • 设置工具栏按钮。在工具栏组件上添加工具栏按钮,并设置其属性。 • 编写按钮事件的处理程序。 • 运行程序,查看设置后的效果。 第4章 菜单类组件和工具栏
菜单及工具栏组件示例 【例】设计一个Web浏览器,主要使用菜单及工具栏组件。 (1)创建窗体和菜单: 建立一个新项目添加Form添加WebBrowser组件菜单。 主菜单和快捷菜单 第4章 菜单类组件和工具栏
菜单及工具栏组件示例 (2)设置工具栏组件: 向窗体添加一个TCoolBar组件(该组件在Win32页上), 并为其Bitmap属性指定一幅图。再向该TCoolBar组件中 添加两个工具条组件ToolBar(ToolBar1、ToolBar2), 将每一个工具条的EdgeBorder属性设置为[], ShowCaption设置为True。 (3)添加按钮: 右击工具条,选择 New Button命令为 每一工具条添加四 个工具按钮。 (4)添加其他组件如图: 第4章 菜单类组件和工具栏
菜单及工具栏组件示例 (5)编写程序代码: procedure TMainForm.Exit1Click(Sender: TObject); begin Close; end; procedure TMainForm.FindAddress; {导航到地址框中键入的URL地址} var Flags: OLEVariant; begin Flags := 0; UpdateCombo := True; // 更新地址框中的URL显示 // 导航到指定URL地址 WebBrowser1.Navigate(WideString(Urls.Text), Flags, Flags, Flags, Flags); end; 第4章 菜单类组件和工具栏
菜单及工具栏组件示例 procedure TMainForm.About1Click(Sender: TObject); begin ShowAboutBox; end; procedure TMainForm.StopClick(Sender: TObject); begin WebBrowser1.Stop; // 停止当前操作 end; 第4章 菜单类组件和工具栏
菜单及工具栏组件示例 procedure TMainForm.URLsKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); {如果用户在地址框中按下回车键,则导航到用户键入的URL地址上} begin if Key = VK_Return then begin FindAddress; end; end; procedure TMainForm.URLsClick(Sender: TObject); begin FindAddress; end; 第4章 菜单类组件和工具栏
菜单及工具栏组件示例 procedure TMainForm.LinksClick(Sender: TObject); {如果用户单击了一个链接,则导航到该链接所指的URL} begin if (Sender as TToolButton).Hint = '' then Exit; // 从工具按钮的Hint属性中取得URL URLs.Text := (Sender as TToolButton).Hint; FindAddress; end; procedure TMainForm.RefreshClick(Sender: TObject); // 刷新页面 begin FindAddress; end; 第4章 菜单类组件和工具栏
菜单及工具栏组件示例 procedure TMainForm.BackClick(Sender: TObject); {返回到历史列表中的上一个页面} begin URLs.Text := HistoryList[HistoryIndex - 1]; FindAddress; end; procedure TMainForm.ForwardClick(Sender: TObject); {前进到历史列表中的下一个页面} begin URLs.Text := HistoryList[HistoryIndex + 1]; FindAddress; end; 第4章 菜单类组件和工具栏
菜单及工具栏组件示例 procedure TMainForm.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); {利用键盘进行导航操作} begin if Shift = [ssAlt] then if (Key = VK_RIGHT) and ForwardBtn.Enabled then ForwardBtn.Click else if (Key = VK_LEFT) and BackBtn.Enabled then BackBtn.Click; end; procedure TMainForm.Toolbar3Click(Sender: TObject); begin with Sender as TMenuItem do begin Checked := not Checked; Coolbar1.Visible := Checked; end; end; 第4章 菜单类组件和工具栏
菜单及工具栏组件示例 procedure TMainForm.Statusbar2Click(Sender: TObject); begin with Sender as TMenuItem do begin Checked := not Checked; StatusBar1.Visible := Checked; end; end; procedure TMainForm.HomePageRequest(var Message: TMessage); begin URLs.Text := 'http://www.sina.com.cn';// 设置主页URL FindAddress; end; 第4章 菜单类组件和工具栏
菜单及工具栏组件示例 procedure TMainForm.FormCreate(Sender: TObject); begin HistoryIndex := -1; // 初始化历史记录索引 HistoryList := TStringList.Create; { 加载AVI文件到窗口中,以便显示一个小动画} Animate1.FileName := ExtractFilePath(Application.ExeName) + 'cool.avi'; { 发送一个CM_HOMEPAGEREQUEST消息,让浏览器显示主页URL, 这是因为我们设置的主页URL没有注册的缘故} PostMessage(Handle, CM_HOMEPAGEREQUEST, 0, 0); end; 第4章 菜单类组件和工具栏
菜单及工具栏组件示例 procedure TMainForm.FormDestroy(Sender: TObject); { 窗口关闭后,释放历史记录} begin HistoryList.Free; end; procedure TMainForm.BackActionUpdate(Sender: TObject); {在做了后退操作后,根据历史记录设置后退按钮的状态} begin if HistoryList.Count > 0 then BackAction.Enabled := HistoryIndex > 0 else BackAction.Enabled := False; end; 第4章 菜单类组件和工具栏
菜单及工具栏组件示例 procedure TMainForm.ForwardActionUpdate(Sender: TObject); {在做了前进操作后,根据历史记录设置前进按钮的状态} begin if HistoryList.Count > 0 then ForwardAction.Enabled := HistoryIndex < HistoryList.Count - 1 else ForwardAction.Enabled := False; end; 第4章 菜单类组件和工具栏
菜单及工具栏组件示例 procedure TMainForm.WebBrowser1BeforeNavigate2(Sender: TObject;const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData, Headers: OleVariant; var Cancel: WordBool); {当Web浏览器导航到一个新的URL之前,检查URL} var NewIndex: Integer; begin // 在历史列表中查看是否有当前要浏览的URL NewIndex := HistoryList.IndexOf(URL); if NewIndex = -1 then // 如果为新的URL begin if (HistoryIndex >= 0) and (HistoryIndex < HistoryList.Count - 1) then while HistoryList.Count > HistoryIndex do HistoryList.Delete(HistoryIndex);// 移去最前面的一个URL HistoryIndex := HistoryList.Add(URL); // 将新URL加入到历史列表中 end else 第4章 菜单类组件和工具栏
菜单及工具栏组件示例 HistoryIndex := NewIndex; if UpdateCombo then begin UpdateCombo := False; NewIndex := URLs.Items.IndexOf(URL); if NewIndex = -1 then URLs.Items.Insert(0, URL) else URLs.Items.Move(NewIndex, 0); end; URLs.Text := URL; Statusbar1.Panels[0].Text := URL; // 在状态栏显示当前URL end; 第4章 菜单类组件和工具栏
菜单及工具栏组件示例 procedure TMainForm.WebBrowser1DownloadBegin(Sender: TObject); {在开始下载页面时,让停止按钮变红,并播放avi动画文件} begin StopBtn.ImageIndex := 4; Animate1.Active := True; end; procedureTMainForm.WebBrowser1DownloadComplete(Sender:Object); {在页面下载完毕后,让停止按钮变灰,并停止播放avi动画文件} begin StopBtn.ImageIndex := 2; Animate1.Active := False; end; 第4章 菜单类组件和工具栏
菜单及工具栏组件示例 procedure TMainForm.ToolButton1Click(Sender: TObject); begin if (Sender as TToolButton).Hint = '' then Exit; // 从工具按钮的Hint属性中取得URL URLs.Text := (Sender as TToolButton).Hint; FindAddress; end; end. (6)运行: Web浏览器运行实例 第4章 菜单类组件和工具栏
4.8 状态栏4.8.1 状态栏组件StatusBar • 状态栏组件位于Win32页标签中 • 状态栏组件的主要属性: 1. Align属性 Align属性用来确定该组件与窗体的对齐方式,也就是在窗体 的位置。 2. SimplePanel属性 该属性为布尔型,控制状态上只有单个面板或有多个面板。 3. SimpleText属性 该属性为字符串型.单个面板的状态栏上显示的内容。 状态栏组件 StatusBar组件 第4章 菜单类组件和工具栏
4.8.1 状态栏组件StatusBar 4. SizeGrip属性 该属性为布尔型,当其值为True时,可在运行时改变状态栏的 大小。 5. Canvas属性 该属性为只读型,在运行时提供对状态栏上绘图的存取。 6. Panels属性 该属性包含了状态栏的各个显示面板的信息。每一个面板对 应于一个StatusPanel组件对象,选择该属性后单击右边的“...” 按 钮将弹出面板项编辑对话框 ,在设计时单击相应的按钮可向状态栏 组件添加、删除、修改面板。 面板编辑对话框 第4章 菜单类组件和工具栏
4.8.2状态栏的制作 • 步骤如下: (1)单击状态栏组件Panel属性旁的"…"按钮,打开"Editing Status Bar1.Panels"(面板编辑器)。 (2)在"面板编辑器"窗口中添加,删除或改变面板的顺序。 (3)设置面板组件的属性。 l Bevel属性。用于确定面板的显示风格,其取值包括: Lowered(以下方式显示面板),Raesed(以上方式显示面板), None(以平面方式显示面板)。 l Algnment属性。用于确定面板中字符串的对齐方式,其取值 包括:Leftjustify(左对齐),Rightjustify(右对齐), Center(居中对齐)。 第4章 菜单类组件和工具栏
状态栏使用示例 【例】制作右图所使用的状态栏。 第4章 菜单类组件和工具栏
状态栏使用示例 (1)在Form窗体中添加一个StatusBar组件(在Win32选项卡里), 并将Align属性设置为alBottom,为Panels属性添加一个面板, 用于显示网络的地址。 (2)编写程序代码: procedure TMainForm.ToolButton1Click(Sender: TObject); begin if (Sender as TToolButton).Hint = '' then Exit; // 从工具按钮的Hint属性中取得URL URLs.Text := (Sender as TToolButton).Hint; FindAddress; end; (3)运行程序。 第4章 菜单类组件和工具栏