Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > C++ Builder
Перезагрузить страницу Перекрытие Форм в приложении
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Shadow_Replicant Shadow_Replicant вне форума
Member
 
Сообщений: 322
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 10.08.2005
По умолчанию Перекрытие Форм в приложении - 12.12.2005, 19:48

Есть две формы А и Б. Они могут перекрывать друг друга.
Я хочу чтоб на нажатии кнопки :
1) Если Б на переднем плане, то скрыть её
2) Если Б скрыто или на заднем плане, то показать или вывести на передний план
Не получаеться узнать : Б на заднем плане ?
Ответить с цитированием
  (#2 (permalink)) Старый
Shadow_Replicant Shadow_Replicant вне форума
Member
 
Сообщений: 322
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 10.08.2005
По умолчанию 12.12.2005, 20:04

Хочу добавить, что на Формах есть другие компоненты.
Анализ св-ва Focused и ActiveControl ничего мне не дал, ибо :
Если форма на заднем плане - Focused=false, ActiveControl!=null
Ответить с цитированием
  (#3 (permalink)) Старый
KVVss KVVss вне форума
Member
 
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.12.2005
По умолчанию 12.12.2005, 20:20

this->SetFocus();
Ответить с цитированием
  (#4 (permalink)) Старый
Shadow_Replicant Shadow_Replicant вне форума
Member
 
Сообщений: 322
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 10.08.2005
По умолчанию 12.12.2005, 20:37

И что
Ответить с цитированием
  (#5 (permalink)) Старый
SergeyV SergeyV вне форума
Member
 
Сообщений: 542
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 14.06.2005
По умолчанию 13.12.2005, 09:14

Вопрос не совсем корректный. Формы А и Б в одном приложении? Кнопка на какой форме находится? Скрыть - это как, формы занимают весь экран или частично перекрывают друг друга? Нажимая на кнопку, вы автоматически передаете ей фокус. Пока событие OnClick не закончится, форма не может потерять фокус, при выполнении выскочит ошибка Cannot focus a disabled or invisible window. Вообще такие штуки делать нельзя - с событиями типа OnButtonClick надо быть осторожными, ибо надо понимать, что они не могут управлять событиями, которые следуют после того, как закончатся они сами, тем более они не могут это делать с формой, на которой сидят эти самые кнопки.
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
SergeyV SergeyV вне форума
Member
 
Сообщений: 542
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 14.06.2005
По умолчанию 13.12.2005, 10:36

Можно передать фокус другой форме Form1->SetFocus(); если приложение MDIChild. Главная форма - типа MDIChild, Forma1 - Normal. Кнопка Button1 на форме MainForm.
Код:
void __fastcall TMainForm::Button1Click(TObject *Sender)
{
      Form1->SetFocus();
}
//---------------------------------------------------------------------------
Ответить с цитированием
  (#7 (permalink)) Старый
Alex437 Alex437 вне форума
Member
 
Сообщений: 952
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 26.08.2005
По умолчанию Re: Перекрытие Форм - 13.12.2005, 10:41

Цитата:
Originally posted by Shadow_Replicant
[b]Не получаеться узнать : Б на заднем плане ?
На заднем плане - это значит неактивна?
А проверять свойство формы __property bool Active не помогает?
Ответить с цитированием
  (#8 (permalink)) Старый
imported_Lexa imported_Lexa вне форума
Новичок
 
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 11.07.2005
По умолчанию Re: Перекрытие Форм - 13.12.2005, 10:54

В своих MIDI окнах (когда нужно вытащить наверх справочник) использую такой код (заодно проверяет - пустой или нет указатель на форму:
Код:
bool MAN_IsFormOpen(TForm *Form)
{
    if (Form == NULL) return false;
    Form->Show();
    if (Form->WindowState == wsMinimized)
        ShowWindow(Form->Handle,SW_SHOWNORMAL);
    return true;
}
/* M: Не стесняемся использовать BBCode! S. */
Ответить с цитированием
  (#9 (permalink)) Старый
Shadow_Replicant Shadow_Replicant вне форума
Member
 
Сообщений: 322
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 10.08.2005
По умолчанию 13.12.2005, 16:05

Так опишу подробнея, формы в одном приложении :
Форма А(главная форма) - на ней есть кнопка
Форма Б - на ней какие-то компоненты
Форма Б это обычная форма, открываю с помощью Show() из формы А.
Я хочу чтоб на нажатии кнопки :
1) Если Б на переднем плане, то скрыть(Hide()) её
2) Если Б скрыто(!Visible) / на заднем плане, то показать(Show()) / вывести на передний план(BringToFront)

Спасибо, SergeyV, я понял проблему. При нажатии на кнопку я активирую форму А => форма А всегда активна в событии кнопки. Вот в этом и проблема, так как я не знаю состояния формы Б перед нажатием на кнопку. Придёться на событии FormDeactivate формы Б, запоминать время деактивации и потом на событии кнопки смотреть на время последней деактивации. И если прошло мало времени, то считать, что форма Б была на переднем плане перед нажатием на кнопку
Ответить с цитированием
  (#10 (permalink)) Старый
Shadow_Replicant Shadow_Replicant вне форума
Member
 
Сообщений: 322
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 10.08.2005
По умолчанию 13.12.2005, 16:18

Вот код, как я это реализовал :
Форма А :
Код:
void __fastcall TFormMain::MenuInspectorClick(TObject *Sender){
  if (FormInspector->Visible) {
    if ( (::GetTickCount() - FormInspector->LastDeactivate) > 500 )// davno neaktivna
      FormInspector->BringToFront();
    else
      FormInspector->Hide();
  } else {
    FormInspector->Show();
  }
}
Форма Б :
Код:
void __fastcall TFormInspector::FormDeactivate(TObject *Sender)
{
  FLastDeactivate = ::GetTickCount();          
}
Спасибо всем участникам
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает передача форм aik100 Windows 7 1 17.04.2012 06:30
Форм фактор Amigo31 Материнские платы 15 08.02.2011 20:24
Форм-фактор S.D.I. Любые вопросы от новичков 3 10.01.2011 02:27
Перекрытие формы fsStayOnTop Громова Ирина Delphi 36 29.12.2007 16:26
Перекрытие временных периодов Paradise_M Delphi 3 26.11.2007 17:33
Третий цвет. Перекрытие графических объектов. Gradov Программирование графики 1 21.11.2007 08:26
C#. Наследование форм дизайнер PerfectStranger .NET 1 11.10.2006 16:55
Создание потоков и форм в приложении Татьяна C++ Builder 3 14.10.2005 17:03
Перекрытие приложений получения сообщения N4r0dS0ft C++ Builder 4 23.09.2005 18:48
Перенос форм из VBA в VB. choutov Visual Basic 0 16.08.2004 13:05
Автоматическое заполнение форм? URL? yfxfkj PHP 2 04.03.2004 20:43
Графическое перекрытие контроллеров Anonymous Visual C++ 2 27.01.2004 21:38



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов