Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/19: Рейтинг темы: голосов - 19, средняя оценка - 4.74
5 / 5 / 3
Регистрация: 22.02.2008
Сообщений: 137
1

Проблемы с модальной формой

21.03.2008, 09:30. Показов 3778. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Проблема такая.
Во время загрузки основной формы надо показать модальную(например для выбора пользователя).
Вызываю модальную форму методом ShowModal() на событие Activate() основной формы.
Но половина основной формы при этом чем-то заслоняется и не видна(видимо она не находится на первом плане).
После выбора пользователя основная форма выглядит нормально.
При повторном вызове модальной формы основная ничем не перекрывается.
Пробовал тот же код помещать в событие OnShow() - никаких изменений.Тоже происходит на вывод сообщения во время события.
Объясните, что происходит?
Миниатюры
Проблемы с модальной формой   Проблемы с модальной формой   Проблемы с модальной формой  

0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.03.2008, 09:30
Ответы с готовыми решениями:

Отображение формы(или фрейма) в компании с другой модальной формой.
Всем привет:) Такое затруднение приключилось: есть форма условно основная, по событию над ней...

Как общаться с модальной формой Excel?
Доброго времени суток Проблемка следующая есть файл шаблон в нем куча макросов в файле...

Вызов модальной формы из модальной, нужно:закрытие последней и не закрытие первой.
1. Вызываю модальную форму из главной формы (немодальной). 2. Вызываю другую модальную форму из...

Проблемы с формой
Здравствуйте! Мне опять нужна помощь. Форму "Наливы" нужно сделать, чтобы она открывалась в...

19
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
21.03.2008, 09:46 2
я обычно такое окошко ставлю в конструкторе основной формы, так надежнее
0
5 / 5 / 3
Регистрация: 22.02.2008
Сообщений: 137
21.03.2008, 10:37  [ТС] 3
Я поставил вызов в конструктор основной формы, но модальная ещё не создана и среда выдала ошибку памяти - EAccessViolation. Я что-то не так понял, вот код:
C++
1
2
3
4
5
6
// конструктор основной формы
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
 Form2->ShowModal();
}
p.s. Кстати большое спасибо за помощь по подключению справки - работает.
0
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
21.03.2008, 10:44 4
ты только не подумай, что я тебя учить программить собираюсь, но я сам в проекте только mainform оставляю в автосоздании, а остальное создаю и удаляю по мере надобности, т.е. твой код должен выглядеть примерно так:
Код
// конструктор основной формы
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Form2 = new TForm2(NULL);
Form2->ShowModal();
delete Form2;
}
0
5 / 5 / 3
Регистрация: 22.02.2008
Сообщений: 137
21.03.2008, 11:57  [ТС] 5
ты только не подумай, что я тебя учить программировать собираюсь
Ничего страшного.
Мне надо, чтобы на фоне основной формы показалась модальная.
Я это сделал через событие onActivate(), заблокировал основную форму, а модальную вызвал методом Show(). Хотелось проще....
0
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
21.03.2008, 12:01 6
так сделай окну свойство stayontop и пропиши еще:
Код
void __fastcall TForm2::Form2Paint(TObject *Sender)
{
   Application->RestoreTopMosts();
}
0
5 / 5 / 3
Регистрация: 22.02.2008
Сообщений: 137
21.03.2008, 12:09  [ТС] 7
Так и сделал.
Form1->FormStyle = fsStayOnTop;

Результат: появляется модальная форма, а заднего фона основной нет
???????
0
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
21.03.2008, 12:52 8
ну окно просто не прорисовалось полностью, вот и выглядит дико, там последним событием в хелпе значится onPaint, попробуй в него запихнуть вызов окна
0
5 / 5 / 3
Регистрация: 22.02.2008
Сообщений: 137
21.03.2008, 13:02  [ТС] 9
Запутался... в чьё событие?
Главного....?
0
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
21.03.2008, 13:10 10
вызов твоего модального окна засунь в onpaint основного окна, а тот код, что я тебе писал, в событие модального окна, просто в билдере есть глюк на счет stayontop, который решается такой командой - Application->RestoreTopMosts();
0
5 / 5 / 3
Регистрация: 22.02.2008
Сообщений: 137
21.03.2008, 15:43  [ТС] 11
при такой раскладе прога циклится и появляется много модальных окон
Неприятно, когда в таком простом моменте вспотыкаешься, если не трудно лучше
кодом описать?

Form1 - основное окно
Form2 - модальное
C++
1
2
3
4
5
6
void __fastcall TForm1::FormPaint(TObject *Sender)
{
 Form2 = new TForm2(NULL);
 Form2->ShowModal();
 delete Form2;
}
???
это куда Application->RestoreTopMosts();
0
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
21.03.2008, 15:46 12
ну так я же писал тебе - в модальное окно на событие onpaint
0
5 / 5 / 3
Регистрация: 22.02.2008
Сообщений: 137
21.03.2008, 16:45  [ТС] 13
То есть код такой:
Form1 - основное окно
Form2 - модальное
C++
1
2
3
4
5
6
7
8
9
10
void __fastcall TForm1::FormPaint(TObject *Sender)
{
 Form2 = new TForm2(NULL);
 Form2->ShowModal();
 delete Form2;
}
void __fastcall TForm2::FormPaint(TObject *Sender)
{
  Application->RestoreTopMosts();
}
При запуске возникает ошибка доступа к памяти
А модальных окон 4 штуки - закрываю - ошибка.
Что не так?
0
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
21.03.2008, 16:58 14
а ты из проекта из auto-create forms убрал form2
0
5 / 5 / 3
Регистрация: 22.02.2008
Сообщений: 137
21.03.2008, 17:40  [ТС] 15
конечно.
А у тебя всё работает?
Покажи свой листинг пожайлуста.
У меня получается так, что событие onPaint() отрабатывает несколько раз при попытке закрыть модальную форму.
0
5 / 5 / 3
Регистрация: 22.02.2008
Сообщений: 137
22.03.2008, 22:02  [ТС] 16
Всё, наконец-то получилось с формой!!!
Но возникла другая задача. Также при загрузке проводится анализ, в результате которого должно появиться или не появиться сообщение.
Для примера просто ShowMessage("пример") написал в событие onPaint() - такая же ерунда как до этого с формой была.
Что можно сделать?
0
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
24.03.2008, 09:27 17
Цитата Сообщение от Perun Посмотреть сообщение
конечно.
А у тебя всё работает?
Покажи свой листинг пожайлуста.
У меня получается так, что событие onPaint() отрабатывает несколько раз при попытке закрыть модальную форму.
ну так понятно, что данное событие не только при создании срабатывает, надо придумывать как его в других случаях отсеивать... той же самой болевой переменной, например...
0
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
24.03.2008, 09:28 18
ну тут нужно свое окно сообщений создавать и обрабатывать по аналогичной схеме...
0
5 / 5 / 3
Регистрация: 22.02.2008
Сообщений: 137
25.03.2008, 10:41  [ТС] 19
Всё добил, немного опимизировать код и красиво будет.
Иногда лёгкий путь трудно найти..... Б Л А Г О Д А Р Ю!!!
0
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
25.03.2008, 10:44 20
кто ищет, тот всегда найдет
0
25.03.2008, 10:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.03.2008, 10:44
Помогаю со студенческими работами здесь

проблемы с формой в ИЕ
есть страничка форма на ней с закругленными краями. на этой странице есть ссылка на др. страницу,...

Проблемы с формой
Доброго времени суток. Имеется такая форма на PHP: <?php foreach($_POST as $name_id=>$value) { ...

Проблемы с разделенной формой
Доброго времени суток! Делаю небольшую БД в Access 2010. Возникли проблемы с разделенной...

проблемы с формой 2 НДФЛ
Уважаемые гуру.Может кто в курсе после обновления отчётных форм 2 НДФЛ программа при начислении...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru