加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 从NC区域删除vcl样式时不显示TMainMenu

发布时间:2020-12-15 09:20:18 所属栏目:大数据 来源:网络整理
导读:我正在使用此代码从表单的非客户区域中删除vcl样式. type TFormStyleHookNC= class(TMouseTrackControlStyleHook) protected procedure PaintBackground(Canvas: TCanvas); override; constructor Create(AControl: TWinControl); override; end;constructor
我正在使用此代码从表单的非客户区域中删除vcl样式.

type
  TFormStyleHookNC= class(TMouseTrackControlStyleHook)
  protected
    procedure PaintBackground(Canvas: TCanvas); override;
    constructor Create(AControl: TWinControl); override;
  end;

constructor TFormStyleHookNC.Create(AControl: TWinControl);
begin
  inherited;
  OverrideEraseBkgnd := True;
end;

procedure TFormStyleHookNC.PaintBackground(Canvas: TCanvas);
var
  Details: TThemedElementDetails;
  R: TRect;
begin
  if StyleServices.Available then
  begin
    Details.Element := teWindow;
    Details.Part := 0;
    R := Rect(0,Control.ClientWidth,Control.ClientHeight);
    StyleServices.DrawElement(Canvas.Handle,Details,R);
  end;
end;


initialization
 TStyleManager.Engine.RegisterStyleHook(TForm3,TFormStyleHookNC);

在应用此样式挂钩之前,表单看起来像

之后

正如您所看到的菜单消失,问题是:我如何解决这个问题?我是说如何在不删除TMainMenu的情况下从表单的非客户区删除vcl样式?

解决方法

当你使用vcl样式时,TMain菜单是由TMainMenuBarStyleHook vcl样式钩子绘制的,它在TFormStyleHook(表单的钩子)里面定义,在这种情况下,因为你没有使用这个钩子,所以没有代码可以绘制TMainMenu.

两种可能的解决方案

1)为TFormStyleHookNC内部的TMainMenu实现vcl样式钩子,就像TFormStyleHook一样.

2)甚至更好地使用TActionMainMenuBar组件而不是TMainMenu,这个组件与vcl样式很好地集成(检查下一个样本图像).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读