Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Паролирование формы 
:(
    Опции темы
mr.Anderson
Дата 10.10.2005, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



Я перед открытием главной программы вызываю в событии OnCreate главной формы вспомогательную форму для ввода пароля. Там есть две кнопки - проверка пароля (вход) и выход. При нажатии кнопки "Выход" надо прекратить загрузку главной формы. Form1->Close() не работает, форма все равно загружается. Как этого избежать (т.е. как прекратить загрузку проекта, если нажата кнопка выхода)?


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Slayers
Дата 10.10.2005, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 17.7.2005
Где: Харьков

Репутация: нет
Всего: 1



Попробуй Application->Terminate();
smile smile smile
PM MAIL   Вверх
szz
Дата 11.10.2005, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 31.5.2005
Где: Moscow, Jerusalem

Репутация: 1
Всего: 33



Цитата(Slayers @ 10.10.2005, 21:10)
Попробуй Application->Terminate();
smile smile smile

Ага, и это убьет всю программу. Человеку надо только форму закрыть, не так ли?
Добавлено @ 00:22
А, простите, "прекратить загрузку проекта" не заметил... smile
Заработался я сегодня...


--------------------
PM   Вверх
azesmcar
Дата 11.10.2005, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 6
Всего: 211



Цитата
Попробуй Application->Terminate();


Извращенство какое то smile)

Давайте все же что нибудь более гуманное...убивать процесс, причем собственный не есть хорошо...зачем убивать что либо если есть способ просто красиво прекратить его существование...эфтаназия ! smile

На диалоге с для ввода пароля ставишь на кнопку OK ModalResult mrOk на Cancel соответсвенно mrCancel. При показе диалог делаешь что то наподобие

Код

void __fastcall TForm1::OnFormShow(TObject *Sender) //Событие можешь изменить по своем усмотрению
{
   TPasswordDialog *pDialog = new TPasswordDialog(this);
   if ( pDialog->ShowModal() == mrCancel )
   {
      this->Close();
   }
   //Здесь проверка пароля
   if ( pDialog->passwordEdit->Text != "mypass" )
   {
      this->Close();
   }
   delete pDialog;
}


Не помню сейчас, билдера нет у меня, но Close в этом случае должен нормально закрывать. Если не закроет напиши, сегодня вечером посмотрю как у меня дома это сделано

Я так думаю ты из формы ввода пароля пытался Close вызвать? ну конечно не заработает..как же твоя форма закроеться если у нее есть модальные формы открытые..закрой сперва, а потом закрывай основное окошко..

Это сообщение отредактировал(а) azesmcar - 11.10.2005, 08:09
PM   Вверх
Vyacheslav
Дата 11.10.2005, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Использрвание события OnCreate является не рекомедуемым для Builder. Для аналогичных целей лучше использоввать конструктор
Application->Terminate() вполне нормальное решение и эквиавлентно Closeт.
Проблема в другом. Будет некоторое мелькание, если использовать OnFormClose. Форма все равно попытается откроется и тут же закроется. Это конечно не страшно но раздражает.
Есть выход следующено плана: исключение в конструторе.

Код

class NoLoginException : public Exception {
public:
      NoLoginException():Exception("User cancel registration process"){}
};

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{

    std::auto_ptr<TLoginDialog> LoginDialog(new TLoginDialog(this));
    if (mrCancel == LoginDialog->ShowModal())
    {
         throw NoLoginException();
    }

}


LoginDialog не должен закрываться, пока пользователь не зарегиструется. Это легко сзделать повесив проверку
LoginDialog::FormCloseQuery(TObject *Sender, bool &CanClose)
Тогда у пользователя остается два варианта: либо правильно зарегистрироваться используя сколько угодно поаыток, либо прервать процесс регистрации и при этом программа выкинет сообщение "User cancel registration process"





--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
mr.Anderson
Дата 11.10.2005, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



Vyacheslav, как когда-то предлагали мне тут, смените мне звание на "Новичок". И пусть оно всегда таким остается. Я не понимаю ваших объяснений, это уже слишком сложно для меня.

Slayers, большое вам спасибо. С этой строчкой заработало. А это мелькание очень уж быстро происходит, чтобы оно начало кого-то раздражать.

Это сообщение отредактировал(а) sim7 - 11.10.2005, 19:50


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Slayers
Дата 12.10.2005, 06:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 17.7.2005
Где: Харьков

Репутация: нет
Всего: 1



Всегда рад помочь smile smile smile
PM MAIL   Вверх
Vyacheslav
Дата 12.10.2005, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Цитата(sim7 @ 11.10.2005, 18:25)
Vyacheslav, как когда-то предлагали мне тут, смените мне звание на "Новичок". И пусть оно всегда таким остается. Я не понимаю ваших объяснений, это уже слишком сложно для меня.


Во-первых, я не могу поменять Ваш профиль.
Во-вторых, Вы не обижайтесь, но что я понять не могу так это Вашу методику обучения.
Когда обучаются, обычно начинаю с прочтения литературы, например со Страструпа и знакомства со стандартом. Если Вы это прочли то мой код должен быть понятен. Вам было достаточно повторить его у себя предварительно адаптировав к своим условиям и проверить, что получится. Разобрать в дебагере как это работает и решить подходит ли это Вам или нет.А при разборе данного кода Вы бы узнали, что такое исключения, зачем применяется auto_ptr и про особенности генерации исключения в конструкторе
А Вы
Цитата

Я не понимаю ваших объяснений, это уже слишком сложно для меня.

Естественно. Но программирование - это не такое уж простое дело( естественно, если имеется в виду качественное программирование). А признать, что это "слишком сложно" - последнее дело. К сожалению, у Вас - это входит в систему.
Напомнить Вам, чем закончилось обсуждение поиска при Вашем подходе:
Цитата

Дайте плиз проверенный и рабочий код, а то надоело мучаться. Мучаться бессмысленно надоело, то есть.





--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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