Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Окно другой проги между моими окнами


Автор: petlyura 26.11.2008, 12:37
Ув. форумчане! Подскажите, как избавиться от такого неудобства интерфейса. Есть окно (1) гл. программы. По нажатию в нем кнопки появляется модально окно (2). Нажимая в нем (2) кнопку "Открыть файл", появляется стандартное окно OpenDialog, после закрытия OpenDialog'а между окнами (1) и (2) вечно влезет Word или TotalCommander. Как сделать так, чтобы никакие окна других прог не лезли между моими окнами. Чтобы если мне нужен TC, Word, etc., то я кликал их на панели задач, и только тогда они всплывали передо мной.
Че-то fsStayOnTop не помогает...

Автор: petlyura 13.1.2009, 12:51
Да, кстати, эту проблему я решил. Я после закрытия всяких там OpenDialog'ов делал BringToFront своих форм и все в порядке.
Была еще проблема с тем, что модальные окна и просто сообщения создавали отдельную кнопку на панели задач. Можно было щелкания по кнопкам на панели потерять сообщения из виду или сделать слои, как я писал в топике. Решил проблему для форм через CreateParams

Код
void __fastcall TForm1::CreateParams(Controls::TCreateParams &Params)
{
TForm::CreateParams(Params);
Params.WndParent = Application->MainForm->Handle;
}

А для сообщений путем
Код

MessageBox(Application->MainForm->Handle, "ЫЫЫЫЫЫЫ", "ФФФФФФ", MB_OK);
 

Может, кому надо, пользуйтесь.

Автор: xvr 13.1.2009, 13:03
Попробуй так:
  • Вместо MessageBox используй Application->MessageBox
  • При создании модальных форм подавай твое главное окно параметром Owner в конструктор формы (или Application)
может помочь  smile 

Автор: petlyura 13.1.2009, 14:18
Э-э! Так у меня уже все работает. Я ж об этом и пишу. Ведь, если задал вопрос, а потом нашел ответ, то желательно сообщить об этом, что, мол, все проблема решена, вот решение:... Чтоб, ежели кто другой попадет на мою тему знал решение, а не создавал такую же тему.

xvr, По поводу MessageBox. Когда у меня было Application->MessageBox, то формировалась отдельная кнопка на панели задач, а как сделал MessageBox(Application->MainForm->Handle, ...); так теперь все в порядке, есть только одна кнопка - кнопка главного окна

Автор: xvr 13.1.2009, 15:43
Цитата(petlyura @ 13.1.2009,  14:18)
Э-э! Так у меня уже все работает. Я ж об этом и пишу. Ведь, если задал вопрос, а потом нашел ответ, то желательно сообщить об этом, что, мол, все проблема решена, вот решение:... Чтоб, ежели кто другой попадет на мою тему знал решение, а не создавал такую же тему.

У тебя решение несколько через заднепроходное отверстие  smile То, что я написал, делает ТОЖЕ САМОЕ, но вполне законными и предусмотренными VCL методами (наверное  smile )
Цитата

xvr, По поводу MessageBox. Когда у меня было Application->MessageBox, то формировалась отдельная кнопка на панели задач, 
 Да, есть такое  smile  
Цитата

а как сделал MessageBox(Application->MainForm->Handle, ...); так теперь все в порядке, есть только одна кнопка - кнопка главного окна
 У Application->MessageBox там не только показ MessageBox, а еще 28 строк другого кода  smile 

Автор: petlyura 13.1.2009, 15:58
Цитата(xvr @ 13.1.2009,  15:43)

У тебя решение несколько через заднепроходное отверстие  smile  

Ну, я это, как умею, так и делаю... Бывает, если никак не могу, то нахожу через заднепроходное...
Цитата

У Application->MessageBox там не только показ MessageBox, а еще 28 строк другого кода  smile

Это тоже может быть, просто я не в курсе был.

Автор: xvr 13.1.2009, 16:08
Цитата(petlyura @ 13.1.2009,  15:58)
Цитата(xvr @ 13.1.2009,  15:43)

У тебя решение несколько через заднепроходное отверстие  smile  

Ну, я это, как умею, так и делаю... Бывает, если никак не могу, то нахожу через заднепроходное...

Это нормально (если другого способа нет). Но для общего развития неплохо было бы знать и методы, которые были изначально сделаны в VCL для этого  smile 
Собственно именно поэтому я и написал свой первый пост   smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)