`
禹爸爸
  • 浏览: 85748 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Delphi中菜单与工具栏按钮的状态控制

阅读更多

在好多的桌面应用程序中,会使用到菜单和工具栏按钮,不同的用户登录到应用系统中会依据其权限显示相应的菜单与工具栏按钮,在显示出来的菜单与按钮中又会根据程序的状态来设置其有效性。举个简单的例子,通常保存按钮是在编辑内容发生变化后才可以使用,数据集的保存需要在编辑状态下才可以使用。

刚开始编写程序时,代码中到处都是这些状态控制代码,如在数据集的“编辑”按钮、菜单的单击事件中启用“保存”和“取消”按钮、菜单,同时要禁止“编辑”按钮、菜单,以防止用户在编辑状态下再次点击编辑按钮、菜单;同时还要在“保存”和“取消”按钮、菜单的单击事件中作相反的设置,禁用“保存”和“取消”按钮、菜单。

其实完全没有必要如此麻烦,首先我们将菜单的单击事件和工具栏按钮单击事件指向同一个事件过程上,这样代码量就可以减少一倍。如果还为客户提供其他调用方式,如上下文菜单,同样也可以将其单击事件指向这个事件过程。让多个用户调用接口都指向一处是一个很明智的做法,不仅降低了代码编写量,同时也规范了执行动作。

我们只要善加使用Delphi提供的VCL控件,就会发现有一个很好用的ActionList控件。它是若干Action的群集,每个Action对象都使用了命令模式封装了一个操作。可以让若干个菜单项或是工具栏按钮等用户控件与相应的Action对象绑定,这样当用户点击这个菜单或是按钮是就触发了Action对象的执行事件(OnExecute),很轻松地实现了上文所说的“多个用户调用接口指向同一处理过程”的设计。Action对象还有一个很不错的OnUpdate事件,我们可以利用这个事件来控件Action对象的状态与可视性(当我们设置Action对象的Enabled和Visible属性时与其关系的相关控件的对应属性也会被设置),这样就不用在多处编写状态控制代码了,实现集中管理。

假设我们有一组与数据集相关的Action对象(Delphi其实已经将这些做为标准Action提供给我们了,此处仅是为了说明如何使用)对应着数据集的导航、编辑、保存、取消、删除和新增操作。我们只需要在菜单中增加一些菜单项,并与这些Action对象绑定,如果需要也可以在工具栏上增加一些按钮并Action对象绑定,这样我们就提供了两处调用接口:菜单项与工具栏按钮。但我们的代码仅有一处,就是Action的OnExecute事件。我们需要根据数据集的状态动设的设置这些功能的能用与否,只要在ActionList控件的OnUpdate事件中编写状态控制代码即可控件与这些Action对象相绑定的菜单项与按钮的状态。

procedureTForm1ActionList1Update(Action:TBasicAction;
varHandled:Boolean);
begin
actFirst.Enabled:
=notDataSet.Bof;
actPrior.Enabled:
=notDataSet.Bof;
actNext.Enabled:
=notDataSet.Eof;
actLast.Enabled:
=notDataSet.Eof;
actInsert.Enabled:
=DataSet.Statein[dsBrowse];
actPost.Enabled:
=DataSetindsEditModes;
actCancel.Enabled:
=DataSetindsEditModes;
actDelete.Enabled:
=(DataSet.Statein[dsBrowse])and(DataSet.RecordCount>0);
end;

版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    delphi导航菜单范例

    1. **VCL组件库**:Delphi的Visual Component Library (VCL) 是一套丰富的组件集合,提供了创建用户界面所需的各种控件,如按钮、菜单、工具栏等。在范例中,我们可能会看到如何使用TMainMenu或TMenuBar组件来创建...

    delphi制作类似ie的工具栏

    以下是一些关键的知识点,用于帮助你在Delphi中创建一个与IE工具栏相似的功能性组件。 1. **TBXToolbar组件**:Delphi的TBXLibrary库中包含TBXToolbar组件,这是一个高度可定制的工具栏,可以模仿IE的样式。首先,...

    在DELPHI7中不使用任何第三方控件,实现放在工具栏上可拖动的

    ### 在DELPHI7中不使用任何第三方控件实现放在工具栏上可拖动的方法 #### 背景介绍 Delphi 是一种基于Object Pascal语言的集成开发环境(IDE),广泛应用于Windows应用程序的开发。Delphi7作为Embarcadero ...

    很不错的Delphi窗体-隐藏显示工具栏..rar

    本资源“很不错的Delphi窗体-隐藏显示工具栏”显然关注的是如何在Delphi应用程序中管理窗体的工具栏,特别是控制其可见性。在Delphi中,窗体(Form)是用户界面的基础,而工具栏(Toolbar)则是提供常用功能快捷方式...

    设计按钮时常用的工具栏图标 bmp

    在标题提到的"设计按钮时常用的工具栏图标 bmp"中,我们关注的是如何通过图形元素增强用户界面的可操作性和美观性。这些图标通常以位图(BMP)格式提供,这是一种常见的图像文件格式,支持像素级别的编辑,但在现代...

    Delphi自动滚动的工具栏.rar

    Delphi制作自动滚动的工具栏,实例演示了一个可以自动滚动的工具栏。在窗体中添加一个TImageList组件,并且为它添加几个图像文件。然后添加一个TToolBar组件,设置TToolBar组件的Images属性为TImageList组件,在...

    Delphi程序设计教程制作工具栏及状态栏PPT课件.pptx

    【Delphi程序设计教程】制作工具栏和状态栏是Delphi编程中不可或缺的部分,它们提供了用户界面中的交互功能。在Delphi中,面板(Panel)组件是一个基础元素,用于构建和定制用户界面。 1. **BevelOuter 属性**:...

    带左侧展开菜单的Delphi漂亮界面..rar

    在本文中,我们将深入探讨如何在Delphi中创建一个具有左侧展开菜单的漂亮用户界面。Delphi是一款强大的Object Pascal编程环境,它提供了丰富的组件库和工具,使得开发出美观、功能丰富的应用程序变得容易。 首先,...

    用Delphi制作动态菜单 .rar_delphi 动态菜单_delphi 菜单_delphi菜单_动态菜单

    在编程领域,Delphi是一款强大的RAD(快速应用开发)工具,尤其在Windows平台上的桌面应用程序开发中占有重要地位。本文将深入探讨如何使用Delphi来创建动态菜单,这对于提升用户体验和增强程序功能至关重要。 动态...

    漂亮的Delphi窗体菜单,下拉形式..rar

    10. **菜单栏和工具栏集成**:在Delphi中,菜单项可以映射到工具栏按钮,实现菜单和工具栏操作的一致性。这可以通过`TToolBar`和`TActionList`组件来完成。 综上所述,"漂亮的Delphi窗体菜单,下拉形式"这一资源...

    在Delphi的窗体状态栏中添加图标功能..rar

    在Delphi中,窗体(Form)的状态栏(StatusBar)是一个常见的组件,通常用于显示程序运行时的一些状态信息。在Delphi中实现状态栏添加图标的功能,可以为应用程序增添更丰富的用户界面元素,提高用户体验。以下是一...

    Delphi浮动的工具条..rar

    在Delphi编程环境中,浮动工具条(Floating Toolbar)是一种常见的用户界面元素,它允许开发者创建可自定义位置、可移动的工具栏,以提供更灵活的交互体验。本篇文章将深入探讨Delphi中浮动工具条的实现原理、设计与...

    Delphi透明按钮控件

    - 在实际项目中,透明按钮控件常用于GUI的美化,比如作为菜单项、工具栏按钮或者自定义操作区域的触发元素。 - 结合其他控件,如图片按钮、复选框或下拉列表,可以构建出复杂的交互界面。 总之,Delphi的透明按钮...

    ocx控件包含菜单,风格按钮,xp垂直工具栏

    在Windows应用程序开发中,OCX控件扮演着重要的角色,允许开发者集成各种用户界面元素,如菜单、按钮以及特定的界面风格,比如XP垂直工具栏。 菜单在用户界面设计中是非常基础且关键的组成部分,它提供了一种组织和...

    Delphi隐藏桌面图标、任务栏、开始菜单等..rar

    但如果你需要单独控制开始菜单,可能需要更复杂的操作,比如遍历任务栏子窗口并隐藏开始按钮,这通常涉及到更多Windows API的使用,如`EnumChildWindows`。 在提供的压缩包文件中,虽然没有具体的代码可供参考,但...

    delphi10.3.1-Ribbon控件

    在Delphi中,Ribbon控件提供了一系列组件,如主选项卡、工具栏、上下文菜单等,使得开发者能够快速构建符合Windows UX指南的应用。 在Delphi 10.3.1中,Ribbon控件的获取并不复杂。通过社区版的GetIt包管理器,...

    delphi实现form中无缝嵌入word,word工具栏不占用主窗口

    本教程将详细介绍如何在Delphi的Form中无缝嵌入Word,并且让Word的工具栏不占用主窗口空间,以及如何在自定义按钮中添加保存功能。 一、无缝嵌入Word到Delphi Form 要在Delphi的Form中嵌入Word,我们需要使用...

    Delphi程序设计基础与上机指导讲义.pptx

    在使用工具栏时,可以将其与菜单结合,通过设置List和ShowCaptions属性,将菜单项与工具按钮关联起来。同时,工具栏还有一些特殊的用法,如设置Flat属性使其看起来更扁平化,或者在工具栏上添加其他组件。 最后,...

    Delphi界面美化[基础]

    10. 工具栏和状态条:工具栏和状态条是指程序中的工具栏和状态条,包括如何使用 Delphi 实现工具栏和状态条。 11. 为 Windows 窗口标题栏添加新按钮:为 Windows 窗口标题栏添加新按钮是指如何使用 Delphi 在 ...

Global site tag (gtag.js) - Google Analytics