Ribbon_窗体_实现Ribbon风格的窗体

随着office2007的兴起,微软让我们看到了Ribbon风格的窗体,现在很多软件也都开始使用Ribbon风格。
那么我们如果要自己开发,应当怎么做呢?本文就是为大家解开这个疑团的。

首先,delphi本身并没有Ribbon风格的窗口可以直接拿来使用,而市面上很多类似于Ribbon的风格都是用截图法做出来的,那样做很麻烦,而且对于图片的控制要求非常高。这样无疑是增加了软件的成本,这里介绍的方法是使用第三方控件,DevExpress Bar 6 来完成Ribbon风格的界面。

首先下载并安装DevExpress Bar 6,注意必须是6,以往的版本没有Ribbon风格,然后将它安装到Delphi2007中。接下来就能够开始进入正题了。

一、拖放必要的控件

dxBarManager ,  dxBarApplicationMenu ,   dxRibbonPopupMenu  ,  dxBarScreenTipRepository  ,  dxRibbonStatusBar  

这些控件都是Ribbon必备的,将它们都拖到窗体上。

拖上后的界面如图所示,可以看到,Ribbon的Tab已经显示出来了,但还不是我们要的效果。

接下来, 继续

 a. 设置控件的属性。
  1. 设置dxRibbon的BarManager属性为DxBarManager控件,

2. 设置dxRibbonPopupMenu的Ribbon属性为dxRibbon控件。

 b. 双击dxBarManager控件,然后 新建一个ToolBar

然后在Object Inspector中会多出一个ToolBar  (Custom 1) ,名称为 dxBarManager1Bar1

c. 设置dxRibbon 的 QuickAccessToolBar.ToolBar 属性为 dxBarManager1Bar1,

马上可以看到,ApplicationMenu已经显示出来了。

d. 右键点击ApplicationMenu右边的小箭头,添加几个Button。

1. 然后再双击dxBarManager,添加ToolBar (Custom 2 ) ,

2. 在dxRibbon上点击右键,选择Tabs Editor,在弹出的窗口中选中Tab。双击Groups属性,添加一个Group,然后将新增的ToolBar关联到Group中。

得到的程序界面如图所示

现在运行一下程序,看看效果

大致已经看得到效果了,不过和office2007还有一点不同,我们得把标题栏去掉,让标题栏的文字显示在Ribbon中。这个地方需要一个小技巧。按F12切换到代码视图,在uses下添加 dxRibbonForm的引用,把窗体的基类从TForm修改为TDxRibbonForm。

把dxRibbon控件的SupportNonClientDrawing属性设为True。再次运行程序。

现在看到的效果就是Ribbon了,但是ApplicationMenu点下去还是没有东西,我们要在ApplicationMenu下加一个菜单。双击dxBarApplicationMenu控件的ItemLinks属性,在屏幕左上方会发现一个小窗口,这个窗体就是用来做ApplicationMenu的,向里面添加按钮和组即可。

Ribbon_窗体_实现Ribbon风格的窗体的更多相关文章

  1. delphi 实现Ribbon风格的窗体

    随着office2007的兴起,微软让我们看到了Ribbon风格的窗体,现在很多软件也都开始使用Ribbon风格.那么我们如果要自己开发,应当怎么做呢?本文就是为大家解开这个疑团的. 首先,Delph ...

  2. 【转】实现Ribbon风格的窗体

    随着office2007的兴起,微软让我们看到了Ribbon风格的窗体,现在很多软件也都开始使用Ribbon风格.那么我们如果要自己开发,应当怎么做呢?本文就是为大家解开这个疑团的. 首先,Delph ...

  3. 探索Popupwindow-对话框风格的窗体(

    Android中还是会经经常使用到Popupwindow.一种类似于对话框风格的窗体,当然类似于对话框风格也能够用Activity,能够參考:Android中使用Dialog风格弹出框的Activit ...

  4. Extjs 窗体居中,双重窗体弹出时清除父窗体的鼠标事件

    这个是监控窗体缩放的事件 缩放中居中主要在 'beforeshow' 和 'destroy'两个事件里面监控 var EditTempWindow; Ext.EventManager.onWindow ...

  5. Delphi实现窗体内嵌其他应用程序窗体

    实现原理是启动一个应用程序,通过ProcessID得到窗体句柄,然后对其设定父窗体句柄为本程序某控件句柄(本例是窗体内一个Panel的句柄),这样就达成了内嵌的效果. 本文实现的是内嵌一个记事本程序, ...

  6. Qt窗体关闭时,如何自动销毁窗体类对象

    Qt窗体关闭时,如何自动销毁窗体类对象     要对你的窗口设置WA_DeleteOnClose属性,默认的情况下关闭窗口仅仅意味着隐藏它 ImgWindow1->setAttribute(Qt ...

  7. Delphi MDI程序 父窗体如何调用当前活动子窗体的函数/过程

    一个MDI文本文件编辑器打开了N个子窗体子窗体的.pas文件有一些public的过程和函数我想在父窗体调用当前活动的子窗体函数我用Self.ActiveChildForm无法调用直接frmEdit.x ...

  8. [GUI]界面开发类库-Ribbon风格 [转]

    [GUI]界面开发类库 如果我们不十分清楚需要什么样的界面风格及如何实现,请按以下两个步骤操作: (1)       搞清楚这种风格叫什么名字 (2)       查现有的比较著名的GUI库是否已有相 ...

  9. DirectUI中模态对话框和菜单的原理(自己控制整个Windows消息循环。或者,用菜单模拟窗体打开时用SetCapture取得控制权,一旦窗体收到WM_CAPTURECHANGED消息就把窗体退出)

    经常有人问关于模态对话框和系统菜单内部实现原理方面的问题, 因为系统通过API隐藏了太多细节,这2个问题确实令初学者甚至是有经验的开发者困扰, 下面是我个人的一些经验总结. 先说模态对话框,外部看模态 ...

随机推荐

  1. Java设计模式-建造者模式(Builder)

    将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. [构建与表示分离,同构建不同表示] 与抽象工厂的区别:在建造者模式里,有个指导者,由指导者来管理建造者,用户是与指导者联系的,指 ...

  2. 统计"1"个数问题

    问题: 给定一个十进制整数N,求出从1到N的所有整数中出现”1”的个数. 例如:N=2时 1,2出现了1个 “1” . N=12时 1,2,3,4,5,6,7,8,9,10,11,12.出现了5个“1 ...

  3. BZOJ3246 [Ioi2013]Dreaming

    Description Serpent(水 蛇)生活的地方有N个水坑,编号为0,...,N - 1,有M条双向小路连接这些水坑.每两个水坑之间至多有一条路径(路径包含一条或多条小路)相互连接,有些水坑 ...

  4. Treap实现山寨set

    treap插入.删除.查询时间复杂度均为O(logn) treap树中每个节点有两种权值:键值和该节点优先值 如果只看优先值,这棵树又是一个堆 treap有两种平衡方法:左旋&右旋 inser ...

  5. Bzoj2705 Longge的问题

    Time Limit: 3000MS   Memory Limit: 131072KB   64bit IO Format: %lld & %llu Description Longge的数学 ...

  6. TOMOYO Linux(undone)

    目录 . TOMOYO Introduction . TOMOYO Sourcecode Analysis 1. Introduction TOMOYO是一款基于LSM Framework实现的LSM ...

  7. 压力测试工具tsung

    tsung是用erlang开发的一款简单易用的压力测试工具,可以生成成千上万的用户模拟对服务器进行访问.目前对tsung的理解也仅限于会简单的应用,其内部结构没有深入研究过. 1.安装 tsung是用 ...

  8. autofac 初步学习

    //数据处理接口 public interface IDal<T> where T : class { void Insert (T model); void Update(T model ...

  9. html5+ 获取当前设备的加速度信息

    getCurrentAcceleration 获取当前设备的加速度信息 void plus.accelerometer.getCurrentAcceleration( successCB, error ...

  10. DataTable列上多值运算

    1.从网上找了个中缀算法(也不知道什么前缀后缀,抱歉),可以对字符串表达式进行运算 2.有些时候还是会用到ASCII码表的 char c = expression[k];//expression为一字 ...