导航:
论坛 -> DELPHI技术
斑竹:liumazi,sephil
作者:
2018/5/27 12:10:15
标题:
Dev Ribbon窗体的按钮问题
浏览:2983
加入我的收藏
楼主:
用Dev做的Ribbon窗体,窗口右上角在最大化最小化按钮的旁边,有一个小按钮。点一下这个按钮,会弹出“Auto-Hide Ribbon”等3个选项 现在的问题是,如何隐藏这个按钮? 有大神指点一下吗
此帖子包含附件: 大小: 14.6K
----------------------------------------------
-
作者:
2018/5/27 17:47:50
1楼:
VCL版的Dev资料太少了,花了九牛二虎之力才在WinForm版的Dev资料找到这个按钮的名字 原来它叫 Ribbon Display Mode Selector 但是让人崩溃的是,在VCL的Ribbon里面,没有发现这个名字的成员 看起来离成功只有一步之遥,谁能助我一臂之力
----------------------------------------------
-
作者:
2018/5/27 20:40:58
2楼:
继续请教
----------------------------------------------
-
作者:
lsuper (lsuper)
★☆☆☆☆
-
盒子活跃会员
2018/5/27 20:54:32
3楼:
参照了 dev 的 demo 了 ?
----------------------------------------------
-
作者:
2018/5/27 21:43:19
4楼:
@lsuper 新建项目,选dev Ribbon 2016 Applition , 直接编译运行这个空白的工程。整个过程最多一分钟,就可以看到这个界面了 有空的话可以试试,谢谢啦
----------------------------------------------
-
作者:
2018/5/28 7:59:37
5楼:
奇了?竟然说DEV资料少,官方的DEMO强大到你怀疑人生
----------------------------------------------
就怕想不到,没有做不到的
作者:
2018/5/28 8:22:01
6楼:
demo 很强大,找到需要的 DEMO 就比较麻烦了。 HELP 也写得一般,该有的都有,但是 HOW TO DO 就写得少。
----------------------------------------------
(C)(P)Flying Wang
作者:
2018/5/28 10:39:23
7楼:
@lsh341999 (虫子) 现在的问题不仅仅是怀疑人生,而是已经快崩溃了,连这个按钮叫什么名字找不到 如果您能从Demo里面找到这个按钮叫什么名字,那就非常感谢了
----------------------------------------------
-
作者:
2018/5/28 11:14:11
8楼:
@hezi4delphi 肯定有设置位的,仔细找找看。 您说的功能,我的老版本好像没有。 你可以参考一下,在PopupMenuItems,可以关闭右键功能: rpmMoreCommands -->False rpmMinimizeRibbon -->False
----------------------------------------------
-
作者:
2018/5/28 13:44:38
9楼:
procedure TForm2.FormCreate(Sender: TObject); begin DisableAero := false; end; 试试看看。
----------------------------------------------
-
作者:
2018/5/28 15:20:41
10楼:
@nickemma (N.E) 如果是IDE有设置的地方而我没找到的话,那我这个问题就太弱智了 这个按钮在设计时是看不到的,编译以后的exe才会显示这个按钮。所以没法在PopupMenuItems上右键 对了,忘了说Dev的版本是17.2.4了。不过只要您的Dev可以选择新建Ribbon 2016风格的VCL应用,就可以看到我说的那个按钮。新建一个空白工程编译就可以了,1分钟就搞定了 最后谢谢您热心的回答
----------------------------------------------
-
作者:
2018/5/28 15:41:04
11楼:
@hzw008 (新心晨曦) 谢谢你的建议,试了一下,这样做会带来新的问题 1,支持Aero特效的Windows,例如Win7以上,按钮会消失,但是窗体标题栏会失去部分Ribbon效果 2,WinXp系统,标题栏效果正常,但是那个可爱的小按钮又回来了 即在不同Windows版本下,窗体效果不一致,是否有按钮也不一致
----------------------------------------------
-
作者:
2018/5/28 16:01:51
10楼:
9楼的可行
----------------------------------------------
就怕想不到,没有做不到的
作者:
2018/5/28 16:40:32
12楼:
改源代码 单元: dxRibbonFormCaptionHelper procedure TdxRibbonFormCaptionHelper.DrawBorderIcons(ACanvas: TcxCanvas); var I: TdxRibbonBorderIcon; begin if not UseAeroNCPaint(FormData) then begin ACanvas.SaveClipRegion; try ACanvas.IntersectClipRect(BorderIconsArea); for I := Low(TdxRibbonBorderIcon) to High(TdxRibbonBorderIcon) do if TdxRibbonBorderIcon(i)<>rbiDisplayOptions then//追加这一行,判断到rbiDisplayOptions 时不绘制 DrawWindowBorderIcon(ACanvas, FBorderIconBounds[I], I, GetBorderIconState(I)); finally ACanvas.RestoreClipRegion; end; end; end;
----------------------------------------------
就怕想不到,没有做不到的
作者:
2018/5/28 16:43:29
12楼:
TForm2 = class(TdxRibbonForm) procedure TForm2.dxbrbtn1Click(Sender: TObject); begin Form2.RibbonNonClientHelper.UpdateWindowBorderIcons([rbiSystemMenu, rbiMinimize, rbiMaximize]);//, rbiHelp, rbiDisplayOptions, rbiAutoHideModeShowUI]); Form2.RibbonNonClientHelper.UpdateNonClientArea; end;
----------------------------------------------
-
作者:
2018/5/28 17:11:43
13楼:
接11楼 决解点击原来的位置还会弹出下拉框 改源代码 单元: dxRibbonForm 找到 TdxCustomRibbonForm.DXMRibbonFormSysCommand 把rbiDisplayOptions项注释掉 {rbiDisplayOptions: RibbonNonClientHelper.DisplayOptionsMenu.Popup;}
----------------------------------------------
就怕想不到,没有做不到的
作者:
2018/5/28 18:16:51
14楼:
@lsh341999 (虫子) 修改源码方式可行,我也看到这里了,不过看得有点迷迷糊糊 看到您的代码后有眼前一亮恍然大悟的感觉,哈哈,谢谢虫子大师
----------------------------------------------
-
作者:
2018/5/28 18:42:50
15楼:
@hzw008 (新心晨曦) 看来您是Dev大师,对这个控件有很深的研究,12楼两行代码就解决问题了,非常感谢! 有道是相请不如偶遇,既然遇到大师了,那干脆厚颜再请教一个问题 去掉Form标题栏左上角的图标,有几行代码就解决问题的方法吗 左上角图标是Windows窗体自带的,和Dev无关,修改Form的BorderStyle可以解决问题,但不适合和Ribbon一起使用
此帖子包含附件: 大小: 5.5K
----------------------------------------------
-
作者:
aket (aket)
★☆☆☆☆
-
盒子活跃会员
2018/5/28 19:10:08
16楼:
TdxRibbon 设置SupportNonClientDrawing等于True
----------------------------------------------
-
作者:
2018/5/28 21:29:31
17楼:
TdxRibbonFormEx = class(TdxRibbonForm) private function GetFormBorderIcons: TdxRibbonBorderIcons; override; end; { TdxRibbonFormEx } function TdxRibbonFormEx.GetFormBorderIcons: TdxRibbonBorderIcons; begin Result := inherited; if rbiDisplayOptions in Result then Result := Result - [rbiDisplayOptions]; if rbiAutoHideModeShowUI in Result then Result := Result - [rbiAutoHideModeShowUI]; end; 不需要改Dev源码,只要添加上面的代码,然后把所有Ribbon窗体的继承从TdxRibbonForm改为TdxRibbonFormEx,这样只是屏蔽那个下拉菜单而不会影响其他功能.
----------------------------------------------
-
作者:
2018/5/28 22:22:13
18楼:
@xtx_xiegao 谢谢你的解决方法,和12楼的方法原理一样,都是将rbiDisplayOptions移除使按钮消失 不过12楼的代码更简洁,不需要继承,2行代码放到Form里面就搞定了,你也可以参考一下 补充一下,是@hzw008 的12楼,居然有两个12楼
----------------------------------------------
-
作者:
2018/5/29 8:02:55
19楼:
经测试,17楼的代码最适合,主Form可以直接继承GetFormBorderIcons
此帖子包含附件: 大小: 76.4K
----------------------------------------------
就怕想不到,没有做不到的
作者:
aket (aket)
★☆☆☆☆
-
盒子活跃会员
2018/5/29 10:50:14
20楼:
红框中的标题栏怎么取消,不单是不显示文字。而是文字和面板都不要,感觉没用,太占位置了。
此帖子包含附件: 大小: 40.9K
----------------------------------------------
-
作者:
2018/7/17 11:12:05
21楼:
function TdxCustomRibbon.GetGroupCaptionHeight: Integer; var xFont: TFont; begin // 2018/7/17 11:17:28 xFont := Fonts.GetGroupHeaderFont; if xFont.Size = -1 then Result := 0 else Result := GroupsPainter.GetGroupCaptionHeight(xFont); end;
----------------------------------------------
-
作者:
2019/5/22 16:04:18
22楼:
北京私家侦探 上海搬家公司 私家侦探
----------------------------------------------
-