| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Как убрать у окна свойство StayOnTop? |
| Автор: Нитонисе 15.11.2011, 16:19 |
| Программа имеет несколько окон. Есть главное окно из которого можно показать любое второстепенное окно. При этом второстепенные окна перекрывают главное, хотя у них StayOnTop = false. Как убрать этот эффект? Я хочу чтобы при выборе главного окна - производные прятались за ним. |
| Автор: sawfish 15.11.2011, 20:07 | ||
Как вы это делаете, если фокус ввода на второстепенной форме? |
| Автор: Нитонисе 15.11.2011, 21:40 |
Так я активирую главную форму, кликом по ней. При этом та ее часть, которая была под второстепенной формой, там же и осталась. То есть главное окно не перекрыло второстепенное. Такое поведение было бы понятным, если бы у второстепенной формы было StayOnTop = true, но там установлено false. |
| Автор: sawfish 16.11.2011, 07:44 |
| При получении главной формой фокуса ввода делать Close второстепенной форме. |
| Автор: xvr 16.11.2011, 14:37 |
Вы эти второстепенные окна делали динамически? Если да, то не передали ли им в конструктор this в качестве параметра? Если да, то поменяйте на NULL. |
| Автор: Нитонисе 16.11.2011, 16:04 | ||
Все формы у меня автоматически создаются вместе с главной. Только у главной Visible = true, а увсех остальных - false. Показываю окна командой Form1->Show(). |
| Автор: xvr 16.11.2011, 18:32 | ||
Тогда такого эффекта быть не должно. Покажите исходники |
| Автор: Нитонисе 16.11.2011, 18:42 | ||
Они очень объемные, врядли там можно разобраться. Вот главный файл:
Все формы запускаются одной и той же командой Show() из главной формы. У меня тут еще одна неприятная проблема, может косвенно с этой связана. Одна из форм (fSheme) не отображается в редакторе. То есть я не могу ее отредактировать. Файлы *.cpp и *.h открываются, но по отдельности. Во время выполнения форма открывается как надо. Чтобы внести изменения в эту форму, я удаляю ее из проекта, создаю новую, копирую туда все компоненты с удаленной формы, заменяю файлы *.cpp и *.h, назначаю обработчики событий. Теперь можно редактировать форму в редакторе. Но стоит закрыть программу (RAD Studio XE) и открыть ее снова - с формой fSheme та же беда - она не открывается в редакторе. |
| Автор: sawfish 16.11.2011, 18:43 |
| Свойство StayOnTop определяет взаимодействие формы с другими прложениями. Т.е. внутри приложения не важно, какая форма самая топовая, важно, что если у главной формы приложения выставлено StayOnTop, то она будет всегда поверх других запущенных приложений. А уже внутри приложения вам нужно "рулить" формами самому, а не полагаться на StayOnTop. |
| Автор: Нитонисе 16.11.2011, 18:50 | ||
И как заставить главную форму перекрыть второстепенную? |
| Автор: sawfish 16.11.2011, 18:59 | ||
Я другого метода не знаю. А чем плохо-то? На формах (второстепенных) ничего не меняется и не сбрасывается, просто они "убираются" с экрана. Точно так же их потом вызовите методом Show и всё. |
| Автор: Нитонисе 16.11.2011, 19:10 | ||
Должна быть необходимость иметь на экране одновременно две формы - главную и второстепенную например размещенные рядом. В вашем же случае при активации главной - второстепенная скроется. |
| Автор: sawfish 16.11.2011, 19:21 | ||
Раньше шла речь о перекрытии:
А если нужно две рядом, тогда и размещайте рядом. Что мешает задать форме другие координаты, нужно будет пользователю - он подвинет/перетащит, как ему нужно. Например, переключились на главную, а второстепенную перемещаете под/над/слева/справа от параметров, которые более детально задаются/отображаются во второстепенной. ИМХО |
| Автор: Нитонисе 16.11.2011, 19:37 |
| Это неудобно. Мне нужно чтобы активная форма всегда перекрывала все остальные, но при этом не надо чтобы все остальные закрывались. Например я открыл главную форму. Запустил второстепенную. Активировал главную и оттащил в угол. Подвинул второстепенную, чтобы не мешали друг другу. Затем развернул главную на весь экран - при этом второстепенныя скрылась под ней. То есть обычное поведение окон. |
| Автор: sawfish 16.11.2011, 19:49 |
| При разворачивании главной формы на весь экран нужно будет либо закрывать второстепенные, либо выносить их за пределы экрана (задавая координаты). Соответственно, при сворачивании их либо открывать, либо возвращать на прежнее место. В общем, "сама-сама-сама" (С) "Вокзал для двоих" |
| Автор: sawfish 16.11.2011, 20:11 |
| Нда, а Builder 6 StayOnTop работает так, как вам нужно... А вот в XE такая бодяга. Может, кто из гуру подскажет, где тут собака порылась. |
| Автор: Нитонисе 16.11.2011, 20:13 |
| Так и у меня должно все работать как надо, это я просто где-то что-то подкрутил, сам не ведая того |
| Автор: sawfish 16.11.2011, 20:20 |
| Нет, у меня ничего не "подкручено" в XE, а результат тот же. Он, видать, "сам себе режиссер". |
| Автор: Нитонисе 16.11.2011, 20:41 |
| Действительно |
| Автор: Нитонисе 16.11.2011, 20:57 | ||
Нашел в чем проблема. Оказывается головной *.cpp файл Билдера XE отличается от Билдера 6 наличием такой строчки
Не совсем понимаю что она означает, но если ее убрать, то формы перекрывают друг друга при активации, как мне и нужно. |