5 / 5 / 3
Регистрация: 22.02.2008
Сообщений: 137
|
|
1 | |
Проблемы с модальной формой21.03.2008, 09:30. Показов 3778. Ответов 19
Метки нет (Все метки)
Проблема такая.
Во время загрузки основной формы надо показать модальную(например для выбора пользователя). Вызываю модальную форму методом ShowModal() на событие Activate() основной формы. Но половина основной формы при этом чем-то заслоняется и не видна(видимо она не находится на первом плане). После выбора пользователя основная форма выглядит нормально. При повторном вызове модальной формы основная ничем не перекрывается. Пробовал тот же код помещать в событие OnShow() - никаких изменений.Тоже происходит на вывод сообщения во время события. Объясните, что происходит?
0
|
21.03.2008, 09:30 | |
Ответы с готовыми решениями:
19
Отображение формы(или фрейма) в компании с другой модальной формой. Как общаться с модальной формой Excel? Вызов модальной формы из модальной, нужно:закрытие последней и не закрытие первой. Проблемы с формой |
Супер-модератор
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. Я что-то не так понял, вот код:
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 - модальное
это куда 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 - модальное
А модальных окон 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 |
ну так понятно, что данное событие не только при создании срабатывает, надо придумывать как его в других случаях отсеивать... той же самой болевой переменной, например...
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 | |
25.03.2008, 10:44 | |
Помогаю со студенческими работами здесь
20
проблемы с формой в ИЕ Проблемы с формой Проблемы с разделенной формой проблемы с формой 2 НДФЛ Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |