在Delphi程序中,我使用ManualFloat显示一个包含Frame作为浮动窗口的TPanel,用于显示有关所选项目的额外信息。使用复选框显示/隐藏此窗口,但是如果用户使用Delphi自动创建的停靠窗口上的X关闭浮动控件,则似乎没有可以挂钩的事件来更改复选框的状态。有谁知道这将如何实现?
答案 0 :(得分:5)
如果浮动码头有OnClose
事件,您可以挂钩浮动码头的OnClose
事件。默认情况下它有。属于TCustomDockForm
的{{1}}类型的后代。TCustomForm
的后代。但从技术上讲,它可以是TWinControl
的后代。如果您出于某种原因将浮动码头的类别更改为不会从TCustomForm
下降的内容,则可能需要调整此答案。
OnClose
TCustomDockForm
事件未发布。因此,您需要使用 protected 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;