Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Приложение N в одном.   Найти похожие ветки 

 
Дмитрий С ©   (2010-03-15 08:12) [0]

Стоило ветку назвать "Хочу странного", но все же.
Хочу, чтобы у приложения было несколько главных форм, у каждой своя кнопка на панели задач, каждая независимо от других сворачивается и разворачивается. Когда все главные формы закрыты - приложение закрывается.
Сделал так:
     
     Application.MainFormOnTaskbar := False;
     Application.ShowMainForm := False;
     Application.Title := "...";
     Application.CreateForm(TWinMan, WinMan);
     WinMan.ShowWindow(WN_MainForm);

Где TWinMan - пустая форма, которая никогда не показывается. В ней реализован простой менеджер главных форм.
WinMan.ShowWindow(WN_MainForm); - создает экземпляр класса TMainForm и вызывает метод Show.
WN_MainForm - это числовая константа, по которой метод узнает какую форму нужно создать и показать.
При закрытии каждой главной формы вызывается такой код:
procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Action := caNone;
 WinMan.HideWindow(WN_MainForm);
end;


Для того, чтобы у форм были кнопки на панели задач делаю так для каждой из них:
procedure TMainForm.CreateParams(var Params: TCreateParams);
begin
 inherited;
 with Params do
   ExStyle := ExStyle or WS_EX_APPWINDOW;
end;


Работает как надо, кроме модальных форм.
Если одна из главных форм показывает модальную - то, как и положено, замирают все остальные формы, но эти замершие формы можно поместить на передний план с помощью кнопки на панели задач - это минус.
Как от него избавится?

В идеале хочу, чтобы можно было открывать несколько модальных окон - у каждой главной формы свой модальный стек. Но, имхо, это нереально сделать с VCL.

Если не рассматривать то, что в идеале, остается еще один вариант - mdi приложение - но, есть мнение, что их использовать не рекомендует даже ms.

Есть еще вариант - несколько процессов, но пока тоже хочется обойтись без него.

Надеюсь я понятно объяснил.


 
tesseract ©   (2010-03-15 10:43) [1]


> каждая независимо от других сворачивается и разворачивается.
>  Когда все главные формы закрыты - приложение закрывается.
>


SDI ? http://ru.wikipedia.org/wiki/Single_document_interface


 
Дмитрий С ©   (2010-03-15 12:58) [2]


> tesseract ©   (15.03.10 10:43) [1]
>
>

SDI выходит. Только в SDI все окна однородные, а у меня нет, вся разница.


 
oldman ©   (2010-03-15 13:05) [3]


> В идеале хочу, чтобы можно было открывать несколько модальных
> окон


Действительно - странного хочешь.


 
Dimka Maslov ©   (2010-03-15 13:23) [4]

Что мешает открывать несколько экземпляров приложения, которые связаны посредством известных механизмов межпроцессового взаимодействия?


 
Дмитрий С ©   (2010-03-15 13:42) [5]


> Dimka Maslov ©   (15.03.10 13:23) [4]
>
> Что мешает открывать несколько экземпляров приложения, которые
> связаны посредством известных механизмов межпроцессового
> взаимодействия?

Так и сделал в итоге. Взаимодействие с помощью оконных сообщений.



Страницы: 1 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.046 c
15-1260451155
Nootr
2009-12-10 16:19
2010.08.27
Где в ADO указывается адрес сервера?


11-1218719894
Дмитрий
2008-08-14 17:18
2010.08.27
Как узнать объем оперативной памяти


15-1264555860
Kostafey
2010-01-27 04:31
2010.08.27
Патент на изобретение


2-1269309875
r_yevgeniy
2010-03-23 05:04
2010.08.27
Сохранить данные в файл из двух компонентов StringGrid


15-1265387354
Jeer
2010-02-05 19:29
2010.08.27
arduino + clone