SiB*_*rit 2 delphi controls docking
在Delphi程序中,我使用ManualFloat显示包含Frame作为浮动窗口的TPanel,用于显示有关所选项目的额外信息.使用复选框显示/隐藏此窗口,但是如果用户使用Delphi自动创建的停靠窗口上的X关闭浮动控件,则似乎没有可以挂钩的事件来更改复选框的状态.有谁知道这将如何实现?
如果OnClose浮动码头有事件,您可以挂钩浮动码头的OnClose事件.默认情况下它有.它是类型TCustomDockForm的后代TCustomForm.但从技术上讲,它可能是一个后代TWinControl.如果由于某种原因,您将浮动码头的类更改为不会降低的类,则TCustomForm可能需要调整此答案.
OnClose事件TCustomDockForm未公布.因此,您需要使用受保护的hack来访问该事件.如果您使用自己的类作为浮动基座,如下例所示,您可以在需要时扩展功能.
type
TForm1 = class(TForm)
Button1: TButton;
Panel1: TPanel;
...
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
procedure FloatingDockClose(Sender: TObject; var Action: TCloseAction);
end;
...
type
TMyDockForm = class(TCustomDockForm)
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Panel1.FloatingDockSiteClass := TMyDockForm;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Panel1.ManualFloat(Rect(200, 200, 420, 280));
// now we have a floatin dock
TMyDockForm(Panel1.HostDockSite).OnClose := FloatingDockClose;
end;
procedure TForm1.FloatingDockClose(Sender: TObject; var Action: TCloseAction);
begin
CheckBox.Checked := False;
end;
Run Code Online (Sandbox Code Playgroud)