Закрытие TForm
, которое назначается как Application.MainForm
, выходит из приложения, то есть по дизайну.
Если вы хотите MainForm
действовать как любое другое окно SDI и закрываться независимо друг от друга, не выходя из приложения, если другие окна SDI все еще открыты, вам придется создать отдельный TForm
действовать как настоящий MainForm
, а затем скрыть от пользователя (установите Application.ShowMainForm
на false при запуске до того, как вызывается Application.Run()
), а затем вы можете создать объекты TSDIAppForm
по мере необходимости. Когда последний объект TSDIAppForm
будет закрыт, вы можете закрыть MainForm
или позвонить по телефону Application.Terminate()
, чтобы выйти из приложения.
Чтобы дать каждому TSDIAppForm
свою собственную кнопку на панели задач, вы должны переопределить виртуальный CreateParams()
метод:
How can I get taskbar buttons for forms that aren't the main form?
Попробуйте это:
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TMyRealMainForm, MyRealMainForm);
Application.CreateForm(TSDIAppForm, SDIAppForm);
SDIAppForm.Visible := True;
Application.ShowMainForm := False;
Application.Run;
end.
procedure TSDIAppForm.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
Params.WndParent := 0;
end;
procedure TSDIAppForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
procedure TSDIAppForm.FormDestroy(Sender: TObject);
begin
if Screen.FormCount = 2 then // only this Form and the MainForm
Application.Terminate;
end;
procedure TSDIAppForm.FileNew1Execute(Sender: TObject);
var
LNewDoc: TSDIAppForm;
begin
LNewDoc := TSDIAppForm.Create(Application);
LNewDoc.Show;
end;
Возможный дубликат [Как я могу получить кнопки панели задач для форм th не являются основной формой?] (http://stackoverflow.com/questions/5493591/how-can-i-get-taskbar-buttons-for-forms-that-arent-the-main-form) –
Не полностью дубликат, потому что я также спрашивал о том, как получить несколько SDIAppForms, которые работают независимо. – Duns
Дубликат [Delphi, как сделать независимые окна] (https://stackoverflow.com/questions/2618372/delphi-how-to-make-independent-windows/2619792#2619792) –