Когда пользователь нажимает 'x' в закрепленной форме, вызывается OnClose.
Когда пользователь нажимает 'x' на незакрепленной форме, OnHide называется
Когда пользователь нажимает «Отменить» в закрепленной форме, вызывается 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;
EDIT:
Что я имею в виду под «закрепленной» формой: закрепленная форма с набором булавок, который всегда виден.
Что я имею в виду под формой «Не закреплено»: закрепленная форма с отпущенным штифтом, так что вкладка появляется в наборе вкладок дока, а форма появляется при выборе вкладки.
Delphi Версия 2007