Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как убрать у окна свойство StayOnTop? 
V
    Опции темы
Нитонисе
Дата 15.11.2011, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Программа имеет несколько окон. Есть главное окно из которого можно показать любое второстепенное окно. При этом второстепенные окна перекрывают главное, хотя у них StayOnTop = false. Как убрать этот эффект? Я хочу чтобы при выборе главного окна - производные прятались за ним.
PM MAIL   Вверх
sawfish
Дата 15.11.2011, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 30.7.2008
Где: Новосибирск

Репутация: 8
Всего: 8



Цитата

Я хочу чтобы при выборе главного окна

Как вы это делаете, если фокус ввода на второстепенной форме?
PM MAIL   Вверх
Нитонисе
Дата 15.11.2011, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(sawfish @  15.11.2011,  20:07 Найти цитируемый пост)
Как вы это делаете, если фокус ввода на второстепенной форме?

Так я активирую главную форму, кликом по ней. При этом та ее часть, которая была под второстепенной формой, там же и осталась. То есть главное окно не перекрыло второстепенное. Такое поведение было бы понятным, если бы у второстепенной формы было StayOnTop = true, но там установлено false.
PM MAIL   Вверх
sawfish
Дата 16.11.2011, 07:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 30.7.2008
Где: Новосибирск

Репутация: 8
Всего: 8



При получении главной формой фокуса ввода делать Close второстепенной форме.
PM MAIL   Вверх
Нитонисе
Дата 16.11.2011, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(sawfish @  16.11.2011,  07:44 Найти цитируемый пост)
При получении главной формой фокуса ввода делать Close второстепенной форме.

Ну так конечно можно делать, но не хотелось бы. Я хочу чтобы при активации любого окна программы оно перекрывало все остальные.
Тут вот еще какая странность. Я ставлю StayOnTop главной формы true, но оно все равно всегда находится под остальными второстепенными.
PM MAIL   Вверх
xvr
Дата 16.11.2011, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(Нитонисе @  15.11.2011,  16:19 Найти цитируемый пост)
При этом второстепенные окна перекрывают главное, 

Вы эти второстепенные окна делали динамически? Если да, то не передали ли им в конструктор this в качестве параметра? Если да, то поменяйте на NULL.

PM MAIL   Вверх
Нитонисе
Дата 16.11.2011, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(xvr @  16.11.2011,  14:37 Найти цитируемый пост)
Вы эти второстепенные окна делали динамически? Если да, то не передали ли им в конструктор this в качестве параметра? Если да, то поменяйте на NULL.

Все формы у меня автоматически создаются вместе с главной. Только у главной Visible = true, а увсех остальных - false.
Показываю окна командой Form1->Show().

Это сообщение отредактировал(а) Нитонисе - 16.11.2011, 16:04
PM MAIL   Вверх
xvr
Дата 16.11.2011, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(Нитонисе @  16.11.2011,  16:04 Найти цитируемый пост)
Все формы у меня автоматически создаются вместе с главной. 
Показываю окна командой Form1->Show().

Тогда такого эффекта быть не должно. Покажите исходники

PM MAIL   Вверх
Нитонисе
Дата 16.11.2011, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(xvr @  16.11.2011,  18:32 Найти цитируемый пост)
Тогда такого эффекта быть не должно. Покажите исходники

Они очень объемные, врядли там можно разобраться.
Вот главный файл:
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include <tchar.h>
//---------------------------------------------------------------------------
USEFORM("uMaterial.cpp", fMaterial);
USEFORM("uMain.cpp", fMain);
USEFORM("uSheme.cpp", fSheme);
USEFORM("uTemplate.cpp", fTemplate);
USEFORM("uSortament.cpp", fSortament);
USEFORM("uLoad.cpp", fLoad);
USEFORM("uLVL.cpp", fLVL);
USEFORM("uSnow.cpp", fSnow);
//---------------------------------------------------------------------------
WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
    try
    {
        Application->Initialize();
        Application->MainFormOnTaskBar = true;
        Application->CreateForm(__classid(TfMain), &fMain);
        Application->CreateForm(__classid(TfSheme), &fSheme);
        Application->CreateForm(__classid(TfLoad), &fLoad);
        Application->CreateForm(__classid(TfTemplate), &fTemplate);
        Application->CreateForm(__classid(TfSortament), &fSortament);
        Application->CreateForm(__classid(TfLVL), &fLVL);
        Application->CreateForm(__classid(TfMaterial), &fMaterial);
        Application->CreateForm(__classid(TfSnow), &fSnow);
        Application->Run();
    }
    catch (Exception &exception)
    {
        Application->ShowException(&exception);
    }
    catch (...)
    {
        try
        {
            throw Exception("");
        }
        catch (Exception &exception)
        {
            Application->ShowException(&exception);
        }
    }
    return 0;
}
//---------------------------------------------------------------------------


Все формы запускаются одной и той же командой Show() из главной формы.

У меня тут еще одна неприятная проблема, может косвенно с этой связана. Одна из форм (fSheme) не отображается в редакторе. То есть я не могу ее отредактировать. Файлы *.cpp и *.h открываются, но по отдельности. Во время выполнения форма открывается как надо. Чтобы внести изменения в эту форму, я удаляю ее из проекта, создаю новую, копирую туда все компоненты с удаленной формы, заменяю файлы *.cpp и *.h, назначаю обработчики событий. Теперь можно редактировать форму в редакторе. Но стоит закрыть программу (RAD Studio XE) и открыть ее снова - с формой fSheme та же беда - она не открывается в редакторе.
PM MAIL   Вверх
sawfish
Дата 16.11.2011, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 30.7.2008
Где: Новосибирск

Репутация: 8
Всего: 8



Свойство StayOnTop определяет взаимодействие формы с другими прложениями. Т.е. внутри приложения не важно, какая форма самая топовая, важно, что если у главной формы приложения выставлено StayOnTop, то она будет всегда поверх других запущенных приложений. А уже внутри приложения вам нужно "рулить" формами самому, а не полагаться на StayOnTop.
PM MAIL   Вверх
Нитонисе
Дата 16.11.2011, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(sawfish @  16.11.2011,  18:43 Найти цитируемый пост)
А уже внутри приложения вам нужно "рулить" формами самому, а не полагаться на StayOnTop.

И как заставить главную форму перекрыть второстепенную?
PM MAIL   Вверх
sawfish
Дата 16.11.2011, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 30.7.2008
Где: Новосибирск

Репутация: 8
Всего: 8



Цитата

При получении главной формой фокуса ввода делать Close второстепенной форме.

Я другого метода не знаю. А чем плохо-то? На формах (второстепенных) ничего не меняется и не сбрасывается, просто они "убираются" с экрана. Точно так же их потом вызовите методом Show и всё.
PM MAIL   Вверх
Нитонисе
Дата 16.11.2011, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(sawfish @  16.11.2011,  18:59 Найти цитируемый пост)
Я другого метода не знаю. А чем плохо-то? На формах (второстепенных) ничего не меняется и не сбрасывается, просто они "убираются" с экрана.

Должна быть необходимость иметь на экране одновременно две формы - главную и второстепенную например размещенные рядом. В вашем же случае при активации главной - второстепенная скроется.
PM MAIL   Вверх
sawfish
Дата 16.11.2011, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 30.7.2008
Где: Новосибирск

Репутация: 8
Всего: 8



Раньше шла речь о перекрытии:
Цитата

И как заставить главную форму перекрыть второстепенную? 

А если нужно две рядом, тогда и размещайте рядом. Что мешает задать форме другие координаты, нужно будет пользователю - он подвинет/перетащит, как ему нужно.
Например, переключились на главную, а второстепенную перемещаете под/над/слева/справа от параметров, которые более детально задаются/отображаются во второстепенной.
ИМХО
PM MAIL   Вверх
Нитонисе
Дата 16.11.2011, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Это неудобно. Мне нужно чтобы активная форма всегда перекрывала все остальные, но при этом не надо чтобы все остальные закрывались. Например я открыл главную форму. Запустил второстепенную. Активировал главную и оттащил в угол. Подвинул второстепенную, чтобы не мешали друг другу. Затем развернул главную на весь экран - при этом второстепенныя скрылась под ней.
То есть обычное поведение окон.
PM MAIL   Вверх
sawfish
Дата 16.11.2011, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 30.7.2008
Где: Новосибирск

Репутация: 8
Всего: 8



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

В общем, "сама-сама-сама" (С) "Вокзал для двоих"

PM MAIL   Вверх
sawfish
Дата 16.11.2011, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 30.7.2008
Где: Новосибирск

Репутация: 8
Всего: 8



Нда, а Builder 6 StayOnTop работает так, как вам нужно...
А вот в XE такая бодяга.

Может, кто из гуру подскажет, где тут собака порылась.
PM MAIL   Вверх
Нитонисе
Дата 16.11.2011, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Так и у меня должно все работать как надо, это я просто где-то что-то подкрутил, сам не ведая того  smile  вот и проблема с тем, что одну из форм в редакторе открыть не могу видимо из этой же оперы.
PM MAIL   Вверх
sawfish
Дата 16.11.2011, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 30.7.2008
Где: Новосибирск

Репутация: 8
Всего: 8



Нет, у меня ничего не "подкручено" в XE, а результат тот же. Он, видать, "сам себе режиссер".
PM MAIL   Вверх
Нитонисе
Дата 16.11.2011, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Действительно  smile  Не ожидал такой засады. Ну тогда гуру точно должны знать в чем там дело, раз это встроенный "косяк".
PM MAIL   Вверх
Нитонисе
Дата 16.11.2011, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Нашел в чем проблема. Оказывается головной *.cpp файл Билдера XE отличается от Билдера 6 наличием такой строчки 
Код

Application->MainFormOnTaskBar = true;

Не совсем понимаю что она означает, но если ее убрать, то формы перекрывают друг друга при активации, как мне и нужно.
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0607 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.