当用户点击固定表格上的'x'时,会调用OnClose。
当用户点击未固定表单上的'x'时,会调用OnHide
当用户点击固定表格上的“UnPin”时,会调用OnHide。
我正在尝试将可见表单与菜单系统同步,但我不知道如何确定OnHide事件在用户点击“x”和用户点击“UnPin”之间的差异。我想截取'x'并改为调用Close。
每个子节点都是TManagerPanel的后代,后者又是TForm的后代,边框样式设置为bsSizeToolWin,Drag Kind设置为dkDock,Drag Mode是dmAutomatic。
type
TPanelManager = class(TForm)
...
private
...
Panels: TManagerPanelList;
Settings: TSettings; //User Settings
...
end;
...
function TPanelManager.InitChild(ChildClass: TManagerPanelClass): TManagerPanel;
var
Child: TManagerPanel;
begin
Child := ChildClass.Create(Self);
Child.Connection := MSConnection1;
Child.Settings := Settings;
Child.Styles := Styles;
...
Child.OnPanelClosed := PanelClosed;
Child.OnPercentChanged := PercentChanged;
...
Child.OnPanelHide := PanelHide;
Child.Font := Font;
Child.Initialise;
Child.ManualDock(DockTarget);
Panels.AddPanel(Child);
Result := Child;
end;
procedure TPanelManager.PanelClosed(Sender: TObject; var Action: TCloseAction);
var
MenuItem: TMenuItem;
Child: TManagerPanel;
begin
if Sender is TManagerPanel then
begin
Child := TManagerPanel(Sender);
Action := caFree;
MenuItem := MenuItemFromChild(Child);
MenuItem.Checked := False;
Settings[RemoveAmpersand(MenuItem.Caption)] := MenuItem.Checked;
Panels.Remove(Child);
end;
end;
编辑: 我所说的“固定”表格是一种对接形式,其中设置的引脚始终可见。
“UnPinned”表单的含义:释放图钉的停靠表单,以便在停靠栏选项卡集中显示选项卡,并在选择选项卡时显示该表单。
德尔福版本是2007年
答案 0 :(得分:3)
似乎固定和取消固定停靠的表单会改变它在TTabDockPanel和TPanel之间的父级,我将它对接到它。
将OnHide方法添加到Demo Dock Form ...
procedure TfrmDock.FormHide(Sender: TObject);
begin
if Assigned(Self.Parent) then
ShowMessage(Self.Parent.ClassName)
else
ShowMessage('No Parent');
end;
当表单被隐藏时,我现在可以区分“浮动”,“停靠,固定”和“停靠,取消固定”。
修改强> 我发现了一种更好的方法
procedure TfrmDock.FormHide(Sender: TObject);
begin
if Assigned(Parent) then
begin
if Not (csDocking in ControlState) then //This was the original test above
begin
if Parent is TTabDockPanel then // This is now a safety check
begin
if TTabDockPanel(Parent).AnimateSpeed = 1 then //Additional Test
//form is closing
else
//form is hiding (Unpinned focused changed)
end;
end
else
//form is being unpinned.
end;
end;
在DockCaptionMouseUp
中,动画速度设置为1,以便面板显示关闭(隐藏得非常快)。 “取消固定”但控制状态发生变化也是如此。