Главная страница
    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.055 c
2-1273729075
tippa
2010-05-13 09:37
2010.08.27
грабер емайл


15-1274472622
RWolf
2010-05-22 00:10
2010.08.27
Induc v2.0


15-1267107491
AlexDan
2010-02-25 17:18
2010.08.27
Подправить ява скрипт


15-1264758958
Baks
2010-01-29 12:55
2010.08.27
Компонент для работы с FTP


6-1221744381
Сергей М.
2008-09-18 17:26
2010.08.27
Indy10 и условный акцепт соединений





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский