Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как убрать у окна свойство 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   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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