delphi – 重新锁定后,我的停靠控件上会出现关闭按钮
发布时间:2020-12-15 04:20:47 所属栏目:大数据 来源:网络整理
导读:我有一个油漆盒,我希望用户能够移除和移动.所以我将其DragKind设置为dkDock,将其DragMode设置为dmAutomatic,并将其放入DockSite设置为True的面板中.当我将油漆盒移到浮动形状后,我将油漆箱停靠时,我遇到了一种奇怪的行为.浮动窗体的关闭按钮出现在面板内.我
我有一个油漆盒,我希望用户能够移除和移动.所以我将其DragKind设置为dkDock,将其DragMode设置为dmAutomatic,并将其放入DockSite设置为True的面板中.当我将油漆盒移到浮动形状后,我将油漆箱停靠时,我遇到了一种奇怪的行为.浮动窗体的关闭按钮出现在面板内.我附上了两个截图.一个来自原始状态,一个再次对接油漆盒.我错过了什么?
原始状态: 对接后: UPDATE 解决方法
你没有遗漏任何东西.这就是默认的Dock Manager实现的工作方式.它只是想拥有使用它的Dock站点上可用的关闭按钮.您可以做的是,实现您自己的停靠管理器并覆盖其
AdjustDockRect 方法,该方法控制停靠区域的大小,默认停靠管理器实现在哪里为关闭按钮的抓取器创建了空间.如果你不想要那个抓取器,只需保持dock区域矩形的大小,因为它传递给方法,整个dock站点的大小.换句话说,在该方法覆盖中不执行任何操作.
这是抓取器的功能部分,但除了你需要拦截硬编码的绘图.要做到这一点,你需要覆盖 这是一个代码示例: type TNoGrabDockManager = class(TDockTree) protected procedure AdjustDockRect(Control: TControl; var ARect: TRect); override; procedure PaintDockFrame(Canvas: TCanvas; Control: TControl; const ARect: TRect); override; end; implementation { TNoGrabDockManager } procedure TNoGrabDockManager.AdjustDockRect(Control: TControl; var ARect: TRect); begin // here you can make space for a grabber by shifting top or left position // of the ARect parameter,which is by default set to the whole dock site // bounds size,so if you do nothing here,there will be no grabber end; procedure TNoGrabDockManager.PaintDockFrame(Canvas: TCanvas; Control: TControl; const ARect: TRect); begin // in this event method,the grabber with that close button are drawn,so // as in case of disabling grabber functionality do precisely nothing for // drawing it here,that will make it visually disappear end; 以下是如何使用此类自定义停靠管理器(有关 procedure TForm1.FormCreate(Sender: TObject); begin Panel1.DockManager := TNoGrabDockManager.Create(Panel1); Panel1.UseDockManager := True; end; 重要 少数消息来源建议,您应该在设计时将停靠面板的 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |