DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: gabor423
今日帖子: 50
在线用户: 17
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 hezi4delphi (iDelphi) ▲▲△△△ -
注册会员
2018/5/27 12:10:15
标题:
Dev Ribbon窗体的按钮问题 浏览:1577
加入我的收藏
楼主: 用Dev做的Ribbon窗体,窗口右上角在最大化最小化按钮的旁边,有一个小按钮。点一下这个按钮,会弹出“Auto-Hide Ribbon”等3个选项 

现在的问题是,如何隐藏这个按钮? 有大神指点一下吗
此帖子包含附件:
PNG 图像
大小:14.6K
----------------------------------------------
-
作者:
男 hezi4delphi (iDelphi) ▲▲△△△ -
注册会员
2018/5/27 17:47:50
1楼: VCL版的Dev资料太少了,花了九牛二虎之力才在WinForm版的Dev资料找到这个按钮的名字
原来它叫 Ribbon Display Mode Selector 

但是让人崩溃的是,在VCL的Ribbon里面,没有发现这个名字的成员

看起来离成功只有一步之遥,谁能助我一臂之力
----------------------------------------------
-
作者:
男 hezi4delphi (iDelphi) ▲▲△△△ -
注册会员
2018/5/27 20:40:58
2楼: 继续请教 按此在新窗口浏览图片
----------------------------------------------
-
作者:
男 lsuper (lsuper) ★☆☆☆☆ -
盒子活跃会员
2018/5/27 20:54:32
3楼: 参照了 dev 的 demo 了 ?
----------------------------------------------
-
作者:
男 hezi4delphi (iDelphi) ▲▲△△△ -
注册会员
2018/5/27 21:43:19
4楼: @lsuper 
新建项目,选dev Ribbon 2016 Applition , 直接编译运行这个空白的工程。整个过程最多一分钟,就可以看到这个界面了 
有空的话可以试试,谢谢啦
----------------------------------------------
-
作者:
男 lsh341999 (虫子) ▲▲▲▲△ -
注册会员
2018/5/28 7:59:37
5楼: 奇了?竟然说DEV资料少,官方的DEMO强大到你怀疑人生
----------------------------------------------
就怕想不到,没有做不到的
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲▲ -
普通会员
2018/5/28 8:22:01
6楼: demo 很强大,找到需要的 DEMO 就比较麻烦了。
HELP 也写得一般,该有的都有,但是 HOW TO DO 就写得少。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 hezi4delphi (iDelphi) ▲▲△△△ -
注册会员
2018/5/28 10:39:23
7楼: @lsh341999 (虫子) 

现在的问题不仅仅是怀疑人生,而是已经快崩溃了,连这个按钮叫什么名字找不到 

如果您能从Demo里面找到这个按钮叫什么名字,那就非常感谢了
----------------------------------------------
-
作者:
男 nickemma (N.E) ▲▲▲▲△ -
注册会员
2018/5/28 11:14:11
8楼: @hezi4delphi
肯定有设置位的,仔细找找看。

您说的功能,我的老版本好像没有。
你可以参考一下,在PopupMenuItems,可以关闭右键功能:
rpmMoreCommands   -->False
rpmMinimizeRibbon -->False
----------------------------------------------
-
作者:
男 hzw008 (新心晨曦) ★☆☆☆☆ -
盒子活跃会员
2018/5/28 13:44:38
9楼: procedure TForm2.FormCreate(Sender: TObject);
begin
  DisableAero := false;
end;

试试看看。
----------------------------------------------
-
作者:
男 hezi4delphi (iDelphi) ▲▲△△△ -
注册会员
2018/5/28 15:20:41
10楼: @nickemma (N.E) 
如果是IDE有设置的地方而我没找到的话,那我这个问题就太弱智了

这个按钮在设计时是看不到的,编译以后的exe才会显示这个按钮。所以没法在PopupMenuItems上右键 

对了,忘了说Dev的版本是17.2.4了。不过只要您的Dev可以选择新建Ribbon 2016风格的VCL应用,就可以看到我说的那个按钮。新建一个空白工程编译就可以了,1分钟就搞定了

最后谢谢您热心的回答
----------------------------------------------
-
作者:
男 hezi4delphi (iDelphi) ▲▲△△△ -
注册会员
2018/5/28 15:41:04
11楼: @hzw008 (新心晨曦)

谢谢你的建议,试了一下,这样做会带来新的问题 
1,支持Aero特效的Windows,例如Win7以上,按钮会消失,但是窗体标题栏会失去部分Ribbon效果
2,WinXp系统,标题栏效果正常,但是那个可爱的小按钮又回来了 

即在不同Windows版本下,窗体效果不一致,是否有按钮也不一致
----------------------------------------------
-
作者:
男 lsh341999 (虫子) ▲▲▲▲△ -
注册会员
2018/5/28 16:01:51
10楼: 9楼的可行
----------------------------------------------
就怕想不到,没有做不到的
作者:
男 lsh341999 (虫子) ▲▲▲▲△ -
注册会员
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;
----------------------------------------------
就怕想不到,没有做不到的
作者:
男 hzw008 (新心晨曦) ★☆☆☆☆ -
盒子活跃会员
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;
----------------------------------------------
-
作者:
男 lsh341999 (虫子) ▲▲▲▲△ -
注册会员
2018/5/28 17:11:43
13楼: 接11楼 决解点击原来的位置还会弹出下拉框

改源代码
单元:
dxRibbonForm

找到
TdxCustomRibbonForm.DXMRibbonFormSysCommand
把rbiDisplayOptions项注释掉
    {rbiDisplayOptions:
      RibbonNonClientHelper.DisplayOptionsMenu.Popup;}
----------------------------------------------
就怕想不到,没有做不到的
作者:
男 hezi4delphi (iDelphi) ▲▲△△△ -
注册会员
2018/5/28 18:16:51
14楼: @lsh341999 (虫子)
修改源码方式可行,我也看到这里了,不过看得有点迷迷糊糊
看到您的代码后有眼前一亮恍然大悟的感觉,哈哈,谢谢虫子大师
----------------------------------------------
-
作者:
男 hezi4delphi (iDelphi) ▲▲△△△ -
注册会员
2018/5/28 18:42:50
15楼: @hzw008 (新心晨曦) 
看来您是Dev大师,对这个控件有很深的研究,12楼两行代码就解决问题了,非常感谢! 

有道是相请不如偶遇,既然遇到大师了,那干脆厚颜再请教一个问题

去掉Form标题栏左上角的图标,有几行代码就解决问题的方法吗 

左上角图标是Windows窗体自带的,和Dev无关,修改Form的BorderStyle可以解决问题,但不适合和Ribbon一起使用
此帖子包含附件:
PNG 图像
大小:5.5K
----------------------------------------------
-
作者:
男 aket (aket) ★☆☆☆☆ -
盒子活跃会员
2018/5/28 19:10:08
16楼: TdxRibbon
设置SupportNonClientDrawing等于True
----------------------------------------------
-
作者:
男 xtx_xiegao (reboot) ★☆☆☆☆ -
普通会员
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,这样只是屏蔽那个下拉菜单而不会影响其他功能.
----------------------------------------------
-
作者:
男 hezi4delphi (iDelphi) ▲▲△△△ -
注册会员
2018/5/28 22:22:13
18楼: @xtx_xiegao 
谢谢你的解决方法,和12楼的方法原理一样,都是将rbiDisplayOptions移除使按钮消失

不过12楼的代码更简洁,不需要继承,2行代码放到Form里面就搞定了,你也可以参考一下

补充一下,是@hzw008 的12楼,居然有两个12楼
----------------------------------------------
-
作者:
男 lsh341999 (虫子) ▲▲▲▲△ -
注册会员
2018/5/29 8:02:55
19楼: 经测试,17楼的代码最适合,主Form可以直接继承GetFormBorderIcons
此帖子包含附件:
JPEG 图像
大小:76.4K
----------------------------------------------
就怕想不到,没有做不到的
作者:
男 aket (aket) ★☆☆☆☆ -
盒子活跃会员
2018/5/29 10:50:14
20楼: 红框中的标题栏怎么取消,不单是不显示文字。而是文字和面板都不要,感觉没用,太占位置了。
此帖子包含附件:
PNG 图像
大小:40.9K
----------------------------------------------
-
作者:
男 gong123456 (DELPHI先生) ▲▲▲▲▲ -
普通会员
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;
----------------------------------------------
-
作者:
男 nihao500s (nihao100s) ▲△△△△ -
注册会员
2019/5/22 16:04:18
22楼: 北京私家侦探
上海搬家公司
私家侦探
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v2.1 版权所有 页面执行50.78125毫秒 RSS