delphi下实现ribbon界面的方法(一)

delphi下实现ribbon界面的方法(一)

office 2007和2010是现在大多数人经常使用的办公软件,几乎每天都在使用。因此,在软件中如果使用类office的界面样式,客户用着非常习惯,而且学习曲线低,office界面特有的可以收起工具栏的性质,也增大了用户的界面内容,因此,非常受广大用户的喜欢。

      那么我们能不能也作出这么好的界面呢?答案当然是肯定的。这种界面的样式叫ribbon,中文名称叫丝带。在VS2010中,VC++和wcf都给ribbon的开发提供了非常好的支持,vc++下更是提供了一个完整的向导,可以作出非常漂亮的界面。但是由于。net下开发的应用程序,因为发布时需要,net框架,因此发布时应用程序非常庞大,而且win XP下没有sp3的支持,还安装不上,对客户的机器环境要求比较高,所以推广面临困难。   

      在winform开发一直非常优秀的delphi,能否实现呢?答案当然也是肯定的,而且开发方法非常多。delphi开发的ribbon程序,不需要任何附带的环境支持,软件发布时,只把exe文件拷贝过去就可以使用,而且delphi优秀的编译器编译出来的应用程序运行速度快、占用内存小。

      那么delphi下有几种开发ribbon的方式呢?我最近查阅了一些国内外的资料,主要有三种方式,这三种方式各有所长,但是都能做出非常漂亮的ribbon程序。

      今天,我就跟大家分享第一种ribbon开发方式,利用delphi2010自带的tribbon控件的开发ribbon。这种方式开发出来的程序没有office那么绚丽,但是这种方式不利用第三方组件,是免费的,因此,如果项目运行比较紧张,利用这种方式也是非常不错的选择,并且界面经过美化后,也没有想象的那么难看。

      下面言归正传,我们开始开发过程。首先,建立一个vcl application。在tool palette选择TRibbon控件,如下图:

放在form上,如下图:

  

 

   Tribbon组件是一个容器,可以把应用程序的所有操作都集成到这个Tribbon控件中,并且所有的设计都是可视的非常直观,在开发时,还可以参考office的样式,当然,最好是有自己的风格。容器中可以建立应用程序菜单(Application menu)、快速访问工具栏(Quick Access ToolBar)、多个tab,每个tab下,可以建立多个组(group),每个组里面可以放多个相关联的控件。

    一般情况在,与文件或者系统相关的操作都会放在应用程序菜单下,例如软件的备份恢复,换名登录,打印等等。鼠标右键tribbon,可以添加application menu,ribbon左上角会增加一个圆形图标 。(在添加application时,必须先指定tribbon组件的action manager属性,也就是在窗体中增加action manager控件,这是一个神奇的控件,整个软件的调动都是通过action manager来控制的)

    经常使用的功能可以放在快速访问工具栏中,无论程序切换到那个tab,都可以通过鼠标直接点击进行操作。例如保存、撤销等等。鼠标右键Tribbon,可以天剑Quick Access ToolBar。

    tab的数量要根据自己的需要,鼠标右键Tribbon就可以添加 。然后再在tab中建立功能组(group)。

    例如我下面的例子,因为我要做一个文本编辑器,所以我要建立主页和样式两个tab,建立一个application menu,一个Quick Access ToolBar。主页中建立剪贴板(clipboard),段落(paragraph),字体(font),编辑(edit)、查找(find)五个group,样式中建立一个ribbon style group,delphi2010默认提供了三种ribbon的样式,分别是蓝色,黑色和银色。

    Tribbon组件还有一个重要的属性,就是showhelp,如果设置为true,则会在ribbon的右上角显示帮助图标,可以把帮助连接到这个图标上。

    增加了这内容后,form的样式是这样的:

[~XCE`_`LN5R_0NUOL@93N1

 

 

 

 

 

 

 

 

 

 

 

下面,我们添加一个richedit控件(最好是WPTools组件的TWPRichtext控件,功能会更强大,因为版权的关系,我的演示程序就用richedit控件了)。为了美观和更贴近于word,最好是把richedit控件放在gridpanel下。运行程序,现在就可以输入文字了,但是,程序还是什么都干不了。

     非常可贵的是,action manager可以给ribbon增色,actionmanager中可以增加新的action,还可以选择系统提供的标准的action。大家可以只要在界面上操作一次就会了。

我们把新加的各种action直接拖放就可以放在各个分组或者application menu上面,非常方便。经过拖放后,我的界面如下:

[NG%{_~5QM0O@I33I)GV(58

 

 

 现在运行程序,一个简单的word就实现了,但是,ribbon的样式,还不能实现,需要编写代码(注意,到现在我们还没有编写一行代码!)。我们在action manager中自定义几个action,caption分别为:黑色、蓝色和银色,对action编程,代码如下:

procedure TForm11.Action1Execute(Sender: TObject);
begin
  Ribbon1.Style:=RibbonLunaStyle;
end;

procedure TForm11.Action2Execute(Sender: TObject);
begin
Ribbon1.Style := RibbonObsidianStyle;
end;

procedure TForm11.Action3Execute(Sender: TObject);
begin
  Ribbon1.Style := RibbonSilverStyle;
end;

就实现了切换不同的ribbon风格

 

})P)$H_J8[A3CE]OCZUN2@P

  但是这个软件还不行,你们发现缺少什么了吗?对,还缺少图标,没有图标指示,有时客户不知道你的功能是干什么的,尤其我的语文这么烂!O(∩_∩)O哈哈~。那么,我们就在form里面加一个imagelist,把office的图标拿下来,现在有很多软件可以做到这一点。但是,光有图标还是不行的,如果鼠标在每个图标上面的时候,都有一个非常清楚的操作提示,那么,我们的软件甚至可以没有帮助,用户一样可以很清楚的知道软件是怎么使用的,那该多好呀!delphi的ribbon组件下面专门有一个组件,就是做这个的,他的名字叫ScreenTipsManager,他的主要功能就是给各个功能按钮提供提示!设置tribbon控件的screentips属性为新添加的ScreenTipsManager,每个按钮就会显示相应的提示!默认的提示就是每个按钮的hint,我们可以修改hint,也可以在ScreenTipsManager控件中编辑,还可以显示提示窗口的图标、页眉、页脚。但是一定要设置form的showhint属性之后才能显示。

     全部编辑完以后,界面如下:

image

 

是不是感觉很漂亮?其实做这样一个程序也就是1个小时的时间,文件大小在2M多,如果是release版并且压缩的话,1M多一点,随便拷贝到任何计算机都能用,不需要乱七八糟的框架支持。

    这个程序还可以做的更好,例如加入字体字号、文字变形等,也就是word能实现的功能基本都可以实现,只是richedit控件不是很给力。要是WPTools控件就好了。

    下一章将利用devexpress实现ribbon,比delphi2010自带的功能要强大,但是devexpress是需要付费的,有购买过的大侠可以参考。

转载于:https://www.cnblogs.com/m0488/archive/2013/05/02/3054910.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433617.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Boost库之function的使用

http://www.cnblogs.com/hujian/archive/2009/06/04/1495813.html Boost库的function是一组函数对象包装类的模板,实现了一个泛型的回调机制。Boost库的function与函数指针相比,优点在于它允许用户在目标的实现上拥有更大的弹性,即目标既可以…

Web笔记——Filter过滤器

○ 概念:Filter表示过滤器,是JavaWeb三大组件(Servlet、Filter、Listener)之一。 ○ 过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。 ○ 过滤器一般完成一些通用的操作,比如:权限控制、统一编码处理、敏感…

mysql修改语句_序言:MySQL与Navicat安装Tips

一、数据库相关的基础知识1.1 数据分析师主要集中在select高效查找上,纯粹的底层运维就不需要太关注;1.2 数据库与表类比sheet是表,整个Excel文件是一个数据库;1.3 行与列1.4 主键(人的身份证)表的主键不做…

java office文件加水印_永中Office与统一操作系统UOS完成适配,开辟高效智能办公新领域...

近日,永中Office办公软件完成了与统一操作系统UOS的适配工作,此次成功适配表明信息技术应用创新操作系统与办公软件兼容性能优良、运行稳定,大幅提升用户在信创计算机上的办公体验,可为政企提供安全可靠的IT环境。永中Office是由永…

ContentType的类型

早上做了下载的功能,涉及到ContentType的类型,特地上网查了下,收集了这些类型  ".*""application/octet-stream"  ".001""application/x-001"  ".301""application/x-301"…

c3p0依赖导入失败问题

今天在学习c3p0的时侯,导入依赖后变红然后去maven仓库[(https://mvnrepository.com/artifact/com.mchange/c3p0)]中找,发现是groupId的问题。 更改后正常

open函数中O_CLOEXEC标志的开关

Linux中,文件描述符有一个属性:CLOEXEC,即 当调用exec()函数成功后,文件描述符会自动关闭。在以往的内核版本(2.6.23以前)中,需要调用 fcntl(fd, F_SETFD, FD_CLOEXEC) 来…

c++ char*初始化_C开发实战-深入理解指针

Visual Studio 2019 解决方案的多项目应用在讲述变量,数据类型,运算符和表达式以及程序流程控制,数组,函数的相关内容,所有的代码都放在解决方案c-core的c-core-foundational项目下。如果你有其他编程语言经验&#xf…

java游戏服务器面试_我做游戏开发这八年

点击上方“CSDN学院精品课”,选择“置顶公众号”CSDN学院精品课 IT人的职业提升平台作者 | kakashi8841简述这篇文章并不是想教会大家如何开发游戏,更不能教大家如何成为技术总监。而是分享我一路做开发的一些经历或心得体验。与编程擦肩而过2004年&…

vb.net 与 c# 的switch ... case ...的一个重要区别

vb.net 与 c# 的switch ... case ...的一个重要区别 与vb.net中case可以写比较表达式>,<,等&#xff0c;但在c# &#xff08;3.0及以下&#xff0c;不知道以后会不会加上&#xff09;中就没有这样的功能 看以下vb.net代码&#xff0c;确是c#的switch case没有的 [vb] vie…

SSM(Spring、SpringMVC、MyBatis)框架笔记——Spring入门

一、Spring简介 Spring是分层的Java SE/EE应用full-stack 轻量级开源框架&#xff0c; 以IoC&#xff08;Inverse Of Control&#xff1a;反转控制&#xff09;和AOP&#xff08;Aspect Oriented Programming&#xff1a;面向切面编程&#xff09;为内核。提供了展现层SpringM…

c++ 字符串拼接_字符串拼接新姿势:StringJoiner

来自&#xff1a;Hollis(微信号&#xff1a;hollischuang)在为什么阿里巴巴不建议在for循环中使用””进行字符串拼接一文中&#xff0c;我们介绍了几种Java中字符串拼接的方式&#xff0c;以及优缺点。其中还有一个重要的拼接方式我没有介绍&#xff0c;那就是Java 8中提供的S…

html5 内嵌网页_如何分析并优化网页的性能?新梦想软件测试

一个网站的网页是好是坏&#xff0c;往往是体现在速度和高度两个方面&#xff0c;速度是网页所展示出来的时间&#xff0c;能否为浏览用户节约时间。高度则是一个网站网页本身的质量&#xff0c;能否为浏览用户带来真正的好体验。然而看似简单的两个点&#xff0c;但是背后要实…

A20 文件系统预装APK

1. 将需要预装的apk放入 android4.2/device/softwinner/wing-common/apk/ 或者 android4.2/device/softwinner/wing-common/preinstallapk/ 路径下 2. 如果apk有依赖的so文件&#xff0c;需要将so文件放入 android4.2/device/softwinner/wing-common/apklib/ 路径下。…

怎么修改file文件框的无文件提示_使用LativeLink时,DO文件编制步骤

大侠好&#xff0c;欢迎来到FPGA技术江湖&#xff0c;江湖偌大&#xff0c;相见即是缘分。大侠可以关注FPGA技术江湖&#xff0c;在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源&#xff0c;或者一起煮酒言欢。今天和大侠简单聊聊使用LativeLink时&#xff0c;…

Spring笔记——数据源配置

常见的数据源&#xff08;连接池&#xff09;包括&#xff1a;DBCP、C3P0、BoneCP、Druid等接下来以C3P0为例讲述一下spring配置数据源的过程数据源的开发步骤 ①导入数据源的坐标和数据库驱动坐标 ②设置数据源的基本连接数据&#xff0c;将其放入jdbc.properties文件中 ③app…

间歇性掉帧卡顿_电脑卡顿问题靠它解决,我只能帮你到这儿了

因为不可抗力的原因&#xff0c;我们都要在家里呆上一段时间&#xff0c;在这期间之中如果电脑出现问题可是一件非常糟心的事情&#xff0c;因为没有人会去给你上门维修&#xff0c;线下门店又关门大吉&#xff0c;一切只能靠自己。抢救一下电脑最常见的问题就是卡顿&#xff0…

Boost智能指针——shared_ptr

boost::scoped_ptr虽然简单易用&#xff0c;但它不能共享所有权的特性却大大限制了其使用范围&#xff0c;而boost::shared_ptr可以解决这一局限。顾名思义&#xff0c;boost::shared_ptr是可以共享所有权的智能指针&#xff0c;首先让我们通过一个例子看看它的基本用法&#x…

我和这个世界不太熟

我和这个世界不太熟。 这并非是我安静的原因。 我依旧有很多问题&#xff0c; 问他人&#xff0c;问故里&#xff0c;问希望&#xff0c;问距离。我和这个世界不太熟。 这并非是我虚假的原因。 我依旧有很多真诚&#xff0c; 离不开&#xff0c;放不下&#xff0c;活下去&#…

SpringMVC遇到的问题——GET http://localhost/spring_mvc_war_exploded/js/jquery-3.3.1.js net::ERR_ABORTED 404

学习SSM时遇到的问题GET http://localhost/spring_mvc_war_exploded/js/jquery-3.3.1.js net::ERR_ABORTED 404新建了js包&#xff0c;并在包下导入了jquery-3.3.1/js&#xff0c;发布项目后通过浏览器开发者工具 发现报错&#xff0c;信息如下&#xff1a;这个问题的解决方案&…