Главная страница
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.123 c
2-1270885260
roman2
2010-04-10 11:41
2010.08.27
Координаты точки


2-1269849342
senatormisha
2010-03-29 11:55
2010.08.27
Перезапуск формы


15-1266183002
Юрий
2010-02-15 00:30
2010.08.27
С днем рождения ! 15 февраля 2010 понедельник


6-1216982606
Uzer32.dll
2008-07-25 14:43
2010.08.27
Доступ к запароленым шарам


15-1270584219
Игорь Шевченко
2010-04-07 00:03
2010.08.27
McSimm, с днем рождения!