1 / 49

Delphi 实用教程

Delphi 实用教程. 第 4 章 菜单类组件和工具栏. 4.1 Delphi 7 的菜单类组件简介. 菜单分为 下拉式菜单 下拉式菜单的主菜单栏显示在窗体的标题栏之下,在下拉菜 单中排列各菜单选项。 快捷菜单 快捷菜单通过单击鼠标右键可以出现在用户区的任何地方。. 4.2 主菜单组件 MainMenu.

yaakov
Download Presentation

Delphi 实用教程

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Delphi实用教程 第4章 菜单类组件和工具栏 第4章 菜单类组件和工具栏

  2. 4.1 Delphi 7的菜单类组件简介 菜单分为 • 下拉式菜单 下拉式菜单的主菜单栏显示在窗体的标题栏之下,在下拉菜 单中排列各菜单选项。 • 快捷菜单 快捷菜单通过单击鼠标右键可以出现在用户区的任何地方。 第4章 菜单类组件和工具栏

  3. 4.2主菜单组件MainMenu • Delphi7通过MainMenu组件来创建主菜单,MainMenu组件为非可视组件。在设计阶段,为窗体添加菜单后,MainMenu组件也显示在窗体上,而运行时主菜单将自动显示在菜单栏的位置。MainMenu组件位于组件面板Standard选项卡上(图标为 )。 创建主菜单时,将该组件拖 放到当前窗体中(MainMenu组件不 能改变大小),这时对象查看器中 会显示出MainMenu的属性。 MainMenu组件 MainMenu组件的属性 第4章 菜单类组件和工具栏

  4. 4.2.1 MainMenu组件的主要属性 1. AutoMerge属性 AutoMerge属性属性决定在多窗口的应用程序中。非主窗体 的主菜单是否和主窗体中的主菜单合并。 2. Images属性 Images属性是通过指定一组Bitmap或Icon的文件,在 MenuItem中指定Images的索引,这样可以实现在菜单项中 加入图标。 3. Items属性 Items属性用于存储主菜单中各菜单项的内容。在菜单编辑 器中编辑菜单,编辑好后该项会自动设置。 第4章 菜单类组件和工具栏

  5. 4.2.2 菜单编辑器 • 双击窗体中的MainMenu组件或者在对象查看器中单击MainMenu组件的Items属性右侧的省略号将进入菜单编辑器。 在对象查看器中的Caption属性中输入“文件”后按回车键,在菜单编辑器中将看到一项标题为“文件”的菜单。因为是设计主菜单,所以第一项菜单将出现在窗体标题栏下的菜单栏上。输入完成后,在菜单编辑器中,刚才输入的菜单项下会自动产生一个空白菜单项,同时右侧出现一个虚框(当设计完一个子菜单后,单击该虚框将进入下一个子菜单的设计)。用鼠标单击菜单编辑器中的“文件”菜单,将在“文件”菜单下出现一个新的空白菜单,在Caption属性中输入“新建”,则该空白条上将出现“新建”的标题。 菜单编辑器 第4章 菜单类组件和工具栏

  6. 4.2.2 菜单编辑器 菜单项(MemuItem)中几个重要的属性: 1. Caption属性 Caption属性决定了菜单的标题。 2. Name属性 Name属性是菜单项对象的标志,在代码设计过程中通过 Name对菜单进行引用。 3. Checked属性 Checked属性可以标记菜单项是否是选中状态。 4. Enable属性 该属性确定菜单项是否有效。 5. ShortCut属性 该属性给菜单项定义快捷键,可以通过下拉列表选择。 6. Visible属性 该属性决定菜单项是否可见。 第4章 菜单类组件和工具栏

  7. 4.2.2 菜单编辑器 7. Break属性 该属性可以把一个菜单分成几列来显示。它有下面3种设置方式: lmbNone:在该菜单处不折行。 lmbBarBreak:在该菜单处折行,并且两列之间有一竖线分隔。 lmbBreak:在该菜单处折行,两列之间没有竖线分隔。 在菜单栏的Caption属性中输入“一”即可实现分隔线 第4章 菜单类组件和工具栏

  8. 4.3快捷菜单组件PopupMenu4.3.1 快捷菜单 • 在菜单编辑区中单击鼠标右键将打开快捷菜单。 在当前高亮显示的菜单项前插入一个菜单项。 删除当前高亮显示的菜单项 菜单编辑的快捷菜单 第4章 菜单类组件和工具栏

  9. 4.3.1 快捷菜单 • 菜单项加上相应的菜单OnClick事件代码有下面3种方法: 方法1: 通过在菜单编辑器中双击某一菜单项,Delphi 7将自动定位 到光标在代码编辑器相应菜单项的OnClick事件代码处。 Procedure Tform1.File1Click(Sender:Tobject); Begin {用户可以在此编写OnClick事件响应内容} end; 这时就可以在代码编辑区内编写正确的OnClick事件代码。 双击主窗体中的菜单项,也可以进入菜单项的事件代码编辑 区。 第4章 菜单类组件和工具栏

  10. 4.3.1 快捷菜单 方法2: 通过对象查看器,在对象查看器中选择Event选项卡,在想 要 加入的事件右侧的输入区内双击即可进入相应的事件代码 编辑区。 例: 想进入菜单项的OnDrawItem事件代码编辑区,可以 在对象查看器的Event选项卡中选择OnDrawItem,单 击右边的空白区,则进入如下所示的事件代码编辑 区。 ProcedureTform1.File1DrawItem(Sender:Tobject; Bcanvas:Tcanvas;Arect: rect;Selected:Boolean); Begin {可以在此编写OnDrawItem的事件代码} end; 第4章 菜单类组件和工具栏

  11. 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章 菜单类组件和工具栏

  12. 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章 菜单类组件和工具栏

  13. 4.3.1 快捷菜单 (4)Delete方法 ▲语法: Procedure Delete(Index: Integer); 菜单项索引值 第4章 菜单类组件和工具栏

  14. 4.3.2 快捷菜单设计 • 选择组件栏中Standard选项卡下的PopupMenu组件,并把它拖放到当前活动窗体中。要在应用程序中使PopupMenu有效,必须设置PupopMenu组件中的AutoPopup属性的值为True。在窗体中双击PopupMenu对象就可以进入菜单编辑器,在其中设计快捷菜单。 第4章 菜单类组件和工具栏

  15. 捷菜单设计示例 【例】设计具如图所示的PopupMenu菜单。 (1)窗体设计。 在窗体上放置一个WebBrowser组件 (位于组件面板的 Internet选项卡上)和一个PopupMenu组件。 快捷菜单设计 第4章 菜单类组件和工具栏

  16. 捷菜单设计示例 (2)组件的属性设置。 (3)编写程序代码。 procedure Tform1.N1Click(Sender:Tobject); //“复制”菜单项的OnClick事件处理 begin WebBrower1.CopyToClipboard; End; 第4章 菜单类组件和工具栏

  17. 捷菜单设计示例 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章 菜单类组件和工具栏

  18. 4.4 快捷键及热键设计 • 快捷键是指用户可以通过按下Alt键各菜单项中带下划线的字母来打开菜单。 • 热键是指用户可以通过一定键的组合,不用打开菜单就可以激活菜单。 置菜单属性中的快捷键(ShortCut)属性 在菜单项的Caption属性中输入属性值时,在要定义快捷键的字母前加“&” 具有热键的菜单项 第4章 菜单类组件和工具栏

  19. 4.5 子菜单设计 1.使用Create Submenu快捷菜单命令设计子菜单 2.通过拖放操作设计子菜单 拖动后的子菜单 拖动前的菜单 第4章 菜单类组件和工具栏

  20. 4.6 使用菜单模板4.6.1系统菜单模板 • 选择菜单编辑器快捷菜单中的Insert Form Template命令,将弹出一个Insert Template对话框,选中一个模板,然后单击OK按钮,即可在菜单编辑器中看到插入的菜单模板,并且窗体中也加入了该菜单模板。 菜单模板对话框 第4章 菜单类组件和工具栏

  21. 4.6.2 用户自定义菜单模板 • 用户自己设计的菜单也可以保存成菜单模板,选择快捷菜单中的Save as Template命令,然后在弹出的Save Template对话框键入要保存的模板名即可。 • 要删除菜单模板,可单击菜单编辑器快捷菜单中的Delete Template命令,将打开Delete Template对话框,选择要删除的菜单模板,单击OK按钮即可。 添加新模板 第4章 菜单类组件和工具栏

  22. 4.7 工具栏 • 工具栏(Toolbar)通常是一个位于主窗体的上方,在菜单栏下面的面板,其中包含了许多控制组件,尤其是按钮。工具栏可以使应用程序为用户提供一个简单、快捷的菜单命令,使用户能够选择它,并有效的使用程序。 第4章 菜单类组件和工具栏

  23. 4.7.1 工具栏组件ToolBar • 工具栏组件在组件面板的Win32选项卡上,工具栏组件可用来管理和安排可视的组件。使用工具栏组件具有下列优点: • 在工具栏组件上按钮的大小和间距自动保持一致。 • 其他的控件也自动保持它们的相对位置和高度。 • 若在一行中按钮显示不下,可以自动折行显示。 工具栏组件 ToolBar(工具栏)组件 第4章 菜单类组件和工具栏

  24. 4.7.1 工具栏组件ToolBar • ToolBar组件的常用属性: Align属性的值及其含义 第4章 菜单类组件和工具栏

  25. 4.7.2 工具栏按钮ToolButton组件 • 工具栏按钮ToolButton组件是一种特殊的按钮组件,它只配合工具栏组件使用,不能放置在其他窗口组件上。要在工具栏组件上添加工具按钮,右单击工具栏组件在弹出的快捷菜单中选择NewButton菜单命令即可生成一个空白的工具栏按钮。 • 主要属性有: 1. Grouped属性 该属性为布尔型,当它为True并且Style属性的值为tbsCheck 时,同一组中的按钮一次只能选定一个。对按钮分组单击工 具栏组件,在弹出的快捷菜单中选择“New Separator”菜单命 令即可。 2. ImageIndex属性 该属性为整型,用来确定出现在工具栏按钮上的图标。若其值为0,则工具栏按钮显示工具栏组件Images属性所确定的图标列表中的第1个图标。 第4章 菜单类组件和工具栏

  26. 4.7.2 工具栏按钮ToolButton组件 3. Down属性 该属性为布尔型,当它为True时,工具栏按钮被选定,这时按 钮为按下的。当按钮不选定时,按钮为弹起的。 4. Style属性 确定工具按钮的显示风格。 Style属性的值及其含义 第4章 菜单类组件和工具栏

  27. 4.7.3 快捷按钮操作模式 • 快捷菜单有三种操作模式: • 菜单项的有效和无效 菜单项的Enabled属性用于设置其是否有效。 • 复选标记 菜单项的Checked属性进行设置。 • 单选菜单项 将几个相关的菜单项的RadioItem的属性值设置为True,然后将 它们的GroupIndex属性设置为相同的值,并设置其中的一个菜单 项的Checked属性为True即可。 第4章 菜单类组件和工具栏

  28. 4.7.4 工具栏的制作 • 制作步骤: • 设置图表列表。在Win32页标签中选择图表列表组件,将其放到窗体上。双击窗体的图标列表组件,打开“图标列表编辑框”。 • 设置工具栏。在窗体上添加工具栏按钮组件,并设置其属性。 • 设置工具栏按钮。在工具栏组件上添加工具栏按钮,并设置其属性。 • 编写按钮事件的处理程序。 • 运行程序,查看设置后的效果。 第4章 菜单类组件和工具栏

  29. 菜单及工具栏组件示例 【例】设计一个Web浏览器,主要使用菜单及工具栏组件。 (1)创建窗体和菜单: 建立一个新项目添加Form添加WebBrowser组件菜单。 主菜单和快捷菜单 第4章 菜单类组件和工具栏

  30. 菜单及工具栏组件示例 (2)设置工具栏组件: 向窗体添加一个TCoolBar组件(该组件在Win32页上), 并为其Bitmap属性指定一幅图。再向该TCoolBar组件中 添加两个工具条组件ToolBar(ToolBar1、ToolBar2), 将每一个工具条的EdgeBorder属性设置为[], ShowCaption设置为True。 (3)添加按钮: 右击工具条,选择 New Button命令为 每一工具条添加四 个工具按钮。 (4)添加其他组件如图: 第4章 菜单类组件和工具栏

  31. 菜单及工具栏组件示例 (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章 菜单类组件和工具栏

  32. 菜单及工具栏组件示例 procedure TMainForm.About1Click(Sender: TObject); begin ShowAboutBox; end; procedure TMainForm.StopClick(Sender: TObject); begin WebBrowser1.Stop; // 停止当前操作 end; 第4章 菜单类组件和工具栏

  33. 菜单及工具栏组件示例 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章 菜单类组件和工具栏

  34. 菜单及工具栏组件示例 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章 菜单类组件和工具栏

  35. 菜单及工具栏组件示例 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章 菜单类组件和工具栏

  36. 菜单及工具栏组件示例 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章 菜单类组件和工具栏

  37. 菜单及工具栏组件示例 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章 菜单类组件和工具栏

  38. 菜单及工具栏组件示例 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章 菜单类组件和工具栏

  39. 菜单及工具栏组件示例 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章 菜单类组件和工具栏

  40. 菜单及工具栏组件示例 procedure TMainForm.ForwardActionUpdate(Sender: TObject); {在做了前进操作后,根据历史记录设置前进按钮的状态} begin if HistoryList.Count > 0 then ForwardAction.Enabled := HistoryIndex < HistoryList.Count - 1 else ForwardAction.Enabled := False; end; 第4章 菜单类组件和工具栏

  41. 菜单及工具栏组件示例 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章 菜单类组件和工具栏

  42. 菜单及工具栏组件示例 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章 菜单类组件和工具栏

  43. 菜单及工具栏组件示例 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章 菜单类组件和工具栏

  44. 菜单及工具栏组件示例 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章 菜单类组件和工具栏

  45. 4.8 状态栏4.8.1 状态栏组件StatusBar • 状态栏组件位于Win32页标签中 • 状态栏组件的主要属性: 1. Align属性 Align属性用来确定该组件与窗体的对齐方式,也就是在窗体 的位置。 2. SimplePanel属性 该属性为布尔型,控制状态上只有单个面板或有多个面板。 3. SimpleText属性 该属性为字符串型.单个面板的状态栏上显示的内容。 状态栏组件 StatusBar组件 第4章 菜单类组件和工具栏

  46. 4.8.1 状态栏组件StatusBar 4. SizeGrip属性 该属性为布尔型,当其值为True时,可在运行时改变状态栏的 大小。 5. Canvas属性 该属性为只读型,在运行时提供对状态栏上绘图的存取。 6. Panels属性 该属性包含了状态栏的各个显示面板的信息。每一个面板对 应于一个StatusPanel组件对象,选择该属性后单击右边的“...” 按 钮将弹出面板项编辑对话框 ,在设计时单击相应的按钮可向状态栏 组件添加、删除、修改面板。 面板编辑对话框 第4章 菜单类组件和工具栏

  47. 4.8.2状态栏的制作 • 步骤如下: (1)单击状态栏组件Panel属性旁的"…"按钮,打开"Editing Status Bar1.Panels"(面板编辑器)。 (2)在"面板编辑器"窗口中添加,删除或改变面板的顺序。 (3)设置面板组件的属性。 l Bevel属性。用于确定面板的显示风格,其取值包括: Lowered(以下方式显示面板),Raesed(以上方式显示面板), None(以平面方式显示面板)。 l Algnment属性。用于确定面板中字符串的对齐方式,其取值 包括:Leftjustify(左对齐),Rightjustify(右对齐), Center(居中对齐)。 第4章 菜单类组件和工具栏

  48. 状态栏使用示例 【例】制作右图所使用的状态栏。 第4章 菜单类组件和工具栏

  49. 状态栏使用示例 (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章 菜单类组件和工具栏

More Related