Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

Приложение 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.061 c
2-1271243243
Delphist2
2010-04-14 15:07
2010.08.27
запуск приложения с параметрами


15-1265664604
Юрий
2010-02-09 00:30
2010.08.27
С днем рождения ! 9 февраля 2010 вторник


15-1268600721
XXL
2010-03-15 00:05
2010.08.27
Тупой вопрос про тельавидение


15-1266013815
Юрий
2010-02-13 01:30
2010.08.27
С днем рождения ! 13 февраля 2010 суббота


2-1273166923
worldmen
2010-05-06 21:28
2010.08.27
Ошибка при копиляции из Delphi 7 в Delphi 2010





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский