![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
EDuard |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 1.8.2005 Где: Синее нигде Репутация: 2 Всего: 7 |
В программе в Project1.dpr при определенных условиях создаю Form2 из Unit2.pas, при клике на кнопку расположенную на Form2 нужно закрыь проект. Пишу Application.Terminate завершается, но с ошибкой:
Debugger Exception Notification "Project Project1.exe raised exception class EInvalidOperation with message 'Cannot make a visible window modal'. Process stoped". При этом главной формой проекта является Form1, которую не создаю если создаю Form2, или создаю после некоторых действий с Form2. Как правильно завершить программу? -------------------- |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Дай код.
|
|||
|
||||
THenry |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 13.9.2005 Репутация: нет Всего: нет |
Как так? Form1 главная, а ты её не создаешь, но независимо от Form1 всегда создается Form2. Ну дык сделай Form2 главной и Form2.Close;
|
|||
|
||||
Zero |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: 8 Всего: 24 |
Напиши в форме 2, на кнопку вот так:
При этом возможно придётся после implementation втавить:
Смысл в том, что при выполнении команды Close происходит переход главной формы, на строчку с командой End., главного файла проекта, поэтому должно сработать - ИМХО самый универсальный способ. Добавлено @ 22:40
И закроется только вторая форма. |
||||||||
|
|||||||||
THenry |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 13.9.2005 Репутация: нет Всего: нет |
А это я для кого написал? Это сообщение отредактировал(а) THenry - 14.12.2005, 22:51 |
|||
|
||||
Zero |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: 8 Всего: 24 |
Велосипед неприемлим в 21 веке, без необходимости... |
|||
|
||||
THenry |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 13.9.2005 Репутация: нет Всего: нет |
Посмотрел бы я как ты будешь закрывать не созданную Form1 кодом Form1.Close;
|
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
|
|||
|
||||
Zero |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: 8 Всего: 24 |
Всё просто:
Ну а в файле проекта естесно:
Добавлено @ 23:42 Про про не созданную ту речь не идёт. |
||||||
|
|||||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
а как насчет halt?
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
FRAGNATIC |
|
|||
![]() ..::Свирепый Кодер::.. ![]() ![]() Профиль Группа: Участник Сообщений: 901 Регистрация: 17.10.2004 Где: ICQ Репутация: 6 Всего: 11 |
терминэйт коректней завершает работу) |
|||
|
||||
Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 26 Всего: 108 |
вообще как я понял, выполнение Form2.ShowModal приостанавливает выполнение кода. если в ней делаешь Application.Terminate, о по-любому нормально приложение не завершится, т.к. не выполнена строчка Application.Run; - здесь лучше использовать как предлогал Poseidon - halt. Application.Terminate - выполняется только после выполнения строчки Application.Run;... а судя по твоему коду эта строчка может и не выполниться... отсюда и ошибка...
-------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
Akella |
|
||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
а разве нельзяч так?
|
||||
|
|||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Я ж привел нормальный код.
Завершать в данном случае Form2 нужно так: При завершении: Если завершить программу, то устанавливаем Form2.ModalResult в mrCancel, Если продолжаем дальше, то Form2.ModalResult:=mrOk; И просто закрываем Form2 без всяких терминаторов. Добавлено @ 10:36
Зависиьт от того, откуда мы вызвали Form2. |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
...не мы, а он, а он её вызывает из Form1
|
|||
|
||||
Albinos_x |
|
||||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 26 Всего: 108 |
тогда можно обойтись и
вторая закроется автоматически, т.к. завершится работа приложения -------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
||||
|
|||||
Guest |
|
||||
Unregistered |
2Zero
Вот если никаких действий с Form2 не происходит приводящих к созданию Form1 (именно к созданию) тут ты не прав А не создаю подразумевает что Application.CreateForm(TForm1,Form1) выполняется где то в событии Form2 И то что ты написал
Не соответствует нулевому посту темы |
||||
|
|||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Нельзя закрывать форму из OnShow или OnCreate.
|
|||
|
||||
EDuard |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 1.8.2005 Где: Синее нигде Репутация: 2 Всего: 7 |
Все разобрался.
Код я писал изначально для form1 create там он работал и form2 там вызывалась через show modal. Когда переписывал код под Project1.dpr копировал куски кода из старого, там в одном месте не убрал form2.showmodal, из-за этого и вылезали ошибки при Application.Terminate. После того как убрал эту строку все работает, хотя более углубленно пока не тестил. Poseidon, хотелось бы подробнее узнать о Halt. -------------------- |
|||
|
||||
Poseidon |
|
||||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
![]()
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |