如何在Delphi中为TPanel(如TCombo)“关闭外部点击”
发布时间:2020-12-15 09:36:31 所属栏目:大数据 来源:网络整理
导读:我想模仿TComBo列表功能,该功能在用户单击列表“外部”时关闭,但是对于另一个组件(TPanel).在Delphi XE2中. 任何的想法 ? 解决方法 假设您的面板是焦点(我从您的问题中“读
我想模仿TComBo列表功能,该功能在用户单击列表“外部”时关闭,但是对于另一个组件(TPanel).在Delphi XE2中.
任何的想法 ? 解决方法
假设您的面板是焦点(我从您的问题中“读取”),然后响应发送到所有焦点窗口的CM_CANCELMODE消息.
type TPanel = class(Vcl.ExtCtrls.TPanel) private procedure CMCancelMode(var Message: TCMCancelMode); message CM_CANCELMODE; end; ... { TPanel } procedure TPanel.CMCancelMode(var Message: TCMCancelMode); begin inherited; if Message.Sender <> Self then Hide; end; 当面板本身没有聚焦时,例如,一个孩子控制,然后这将无法正常工作.在这种情况下,您可以跟踪所有鼠标点击(例如,通过使用TApplicationEvents.OnMessage处理程序)并计算点击是否在您的面板范围内: procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean); begin if Panel1.Visible and (Msg.message >= WM_LBUTTONDOWN) and (Msg.message <= WM_MBUTTONDBLCLK) and not PtInRect(Panel1.ClientRect,Panel1.ScreenToClient(Msg.pt)) then Panel1.Hide; end; 但是当点击是 – 例如 – 在属于面板但部分展开在其外部的组合框的列表中时,这仍然不会成功.我不知道如何从点击信息中提取面板. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |