| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Паролирование формы |
| Автор: mr.Anderson 10.10.2005, 18:58 |
| Я перед открытием главной программы вызываю в событии OnCreate главной формы вспомогательную форму для ввода пароля. Там есть две кнопки - проверка пароля (вход) и выход. При нажатии кнопки "Выход" надо прекратить загрузку главной формы. Form1->Close() не работает, форма все равно загружается. Как этого избежать (т.е. как прекратить загрузку проекта, если нажата кнопка выхода)? |
| Автор: Slayers 10.10.2005, 21:10 |
| Попробуй Application->Terminate(); |
| Автор: szz 11.10.2005, 00:21 | ||
Ага, и это убьет всю программу. Человеку надо только форму закрыть, не так ли? Добавлено @ 00:22 А, простите, "прекратить загрузку проекта" не заметил... Заработался я сегодня... |
| Автор: azesmcar 11.10.2005, 08:04 | ||||
Извращенство какое то Давайте все же что нибудь более гуманное...убивать процесс, причем собственный не есть хорошо...зачем убивать что либо если есть способ просто красиво прекратить его существование...эфтаназия ! На диалоге с для ввода пароля ставишь на кнопку OK ModalResult mrOk на Cancel соответсвенно mrCancel. При показе диалог делаешь что то наподобие
Не помню сейчас, билдера нет у меня, но Close в этом случае должен нормально закрывать. Если не закроет напиши, сегодня вечером посмотрю как у меня дома это сделано Я так думаю ты из формы ввода пароля пытался Close вызвать? ну конечно не заработает..как же твоя форма закроеться если у нее есть модальные формы открытые..закрой сперва, а потом закрывай основное окошко.. |
| Автор: Vyacheslav 11.10.2005, 12:32 | ||
| Использрвание события OnCreate является не рекомедуемым для Builder. Для аналогичных целей лучше использоввать конструктор Application->Terminate() вполне нормальное решение и эквиавлентно Closeт. Проблема в другом. Будет некоторое мелькание, если использовать OnFormClose. Форма все равно попытается откроется и тут же закроется. Это конечно не страшно но раздражает. Есть выход следующено плана: исключение в конструторе.
LoginDialog не должен закрываться, пока пользователь не зарегиструется. Это легко сзделать повесив проверку LoginDialog::FormCloseQuery(TObject *Sender, bool &CanClose) Тогда у пользователя остается два варианта: либо правильно зарегистрироваться используя сколько угодно поаыток, либо прервать процесс регистрации и при этом программа выкинет сообщение "User cancel registration process" |
| Автор: mr.Anderson 11.10.2005, 18:25 |
| Vyacheslav, как когда-то предлагали мне тут, смените мне звание на "Новичок". И пусть оно всегда таким остается. Я не понимаю ваших объяснений, это уже слишком сложно для меня. Slayers, большое вам спасибо. С этой строчкой заработало. А это мелькание очень уж быстро происходит, чтобы оно начало кого-то раздражать. |
| Автор: Slayers 12.10.2005, 06:10 |
| Всегда рад помочь |
| Автор: Vyacheslav 12.10.2005, 09:05 | ||||||
Во-первых, я не могу поменять Ваш профиль. Во-вторых, Вы не обижайтесь, но что я понять не могу так это Вашу методику обучения. Когда обучаются, обычно начинаю с прочтения литературы, например со Страструпа и знакомства со стандартом. Если Вы это прочли то мой код должен быть понятен. Вам было достаточно повторить его у себя предварительно адаптировав к своим условиям и проверить, что получится. Разобрать в дебагере как это работает и решить подходит ли это Вам или нет.А при разборе данного кода Вы бы узнали, что такое исключения, зачем применяется auto_ptr и про особенности генерации исключения в конструкторе А Вы
Естественно. Но программирование - это не такое уж простое дело( естественно, если имеется в виду качественное программирование). А признать, что это "слишком сложно" - последнее дело. К сожалению, у Вас - это входит в систему. Напомнить Вам, чем закончилось обсуждение поиска при Вашем подходе:
|