![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| *^angel^* |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 5.3.2003 Где: Столица нашей нео бъятной Родины Репутация: нет Всего: нет |
День добрый!
Помогите разобраться с проблемой: (D6) есть окно авторизации (пароль и логин), после проверки должно появляться основное окно программы. Но после подтверждения логина и пароля (если они верны) программа вылетает и прекращает работу. пишу в .dpr: begin Application.Initialize; Application.CreateForm(TfUsers, fUsers); // форма авторизации fUsers.ShowModal; //показываю форму авторизации if fUsers.ModalResult = mrOK then // если правильный лигин и пароль и нажали ОК, проверка на // правильность пароля и логина пишу в форме авторизации при нажатии на ней кнопки ОК begin Application.CreateForm(TfMain, fMain); // создание основной формы Application.Run; end else Application.Terminate; end. не пойму почему вылетает? ставлю "стоп" на else Application.Terminate; и при проверке значений fUsers.ModalResult = 2, очень странно; а mrOK = 1; естественно вылетать будет. Вот и не ясно почему двум равно. Может кто знает как мне можно помочь? |
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
Потому что главной считается первая автоматически созданная форма. У тебя первая - fUsers. И когда она закрывается, соответственно закрывается и программа.
-------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
| &-ray |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 406 Регистрация: 15.4.2003 Где: Казахстан, г Аста на Репутация: нет Всего: нет |
Project -> Options -> Forms -> MainForm (выбери из списка fmain)
А вместо Application.Terminate подставь Halt (по-моему так будет более корректно, так как ты закрываешь приложение на стадии инициализации) -------------------- "Совсем неважно от чего помрешь, ведь куда важнее - для чего родился..." С.Б. -------------------- И снова мышь беру я в руки Куда иду? - Конечно в сруки! |
|||
|
||||
| *^angel^* |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 5.3.2003 Где: Столица нашей нео бъятной Родины Репутация: нет Всего: нет |
я написАла по-другому, но все равно такая же проблема.
begin Application.Initialize; Application.CreateForm(TfMain, fMain); Application.ShowMainForm := False; Application.CreateForm(TfUsers, fUsers); fUsers.ShowModal; if fUsers.ModalResult = mrOK then begin Application.ShowMainForm := true; Application.Run; end else Application.Terminate; end. в Project -> Options -> Forms -> стоит fMain как главная форма. Что еще я криво написАла? |
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
-------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
| Dayana |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 352 Регистрация: 6.10.2002 Где: Тель-Авив Репутация: 2 Всего: 4 |
Может у тебя ошибка при проверке логина и пароля? Т.е. при нажатии на кнопке
Ok всегда выходит с ModalResult = 2.... Покажи код, что происходит при нажатии кнопки Ok. |
|||
|
||||
| *^angel^* |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 5.3.2003 Где: Столица нашей нео бъятной Родины Репутация: нет Всего: нет |
Dayana да, именно так: "всегда выходит с ModalResult = 2" не знаю почему. код, к-ый обрабатывается при нажатии на ОК (в форме авторизации):
procedure TfUsers.btnOKClick(Sender: TObject); begin case fUsers.ComboBox1.ItemIndex of 0:begin if fUsers.Edit1.Text = '123' then fUsers.Close else MessageDlg('Неверный пароль!', mtError, [mbOK], 0); end; 1:begin if fUsers.Edit1.Text = '1234' then fUsers.Close else MessageDlg('Неверный пароль!', mtError, [mbOK], 0); end; 2:begin if fUsers.Edit1.Text = '12345' then fUsers.Close else MessageDlg('Неверный пароль!', mtError, [mbOK], 0); end; end; // конец CASE end; |
|||
|
||||
| *^angel^* |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 5.3.2003 Где: Столица нашей нео бъятной Родины Репутация: нет Всего: нет |
Song куда это вставлять надо?
|
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
А ModalResult надо на кнопки назначать. Ты назначила?
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
В dpr -------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
Потому что этот код у кнопки btnOK в ModalResult. Ты когда тип кнопки назначала (с зелёной галочкой наверно), ModalResult у тебя назначился самостоятельно. -------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
| *^angel^* |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 5.3.2003 Где: Столица нашей нео бъятной Родины Репутация: нет Всего: нет |
neutrino да назначила, при создании фрмы:
procedure TfUsers.FormCreate(Sender: TObject); begin ComboBox1.Items.Clear; ComboBox1.Items.Add('Администратор'); ComboBox1.Items.Add('Менеджер'); ComboBox1.Items.Add('Секретарь'); Edit1.PasswordChar := '*'; btnOK.ModalResult := mrOk; btnCancel.ModalResult := mrCancel; end; |
|||
|
||||
| *^angel^* |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 5.3.2003 Где: Столица нашей нео бъятной Родины Репутация: нет Всего: нет |
ничего такого не было. у меня кнопки ОК и ОТМЕНА - обычные кнопки, а не TBitBtn: btnOK: TButton; btnCancel: TButton; |
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
Посмотри их ModalResult
-------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
| *^angel^* |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 5.3.2003 Где: Столица нашей нео бъятной Родины Репутация: нет Всего: нет |
Song вот такие:
btnOK.ModalResult := mrOk; - 1 btnCancel.ModalResult := mrCancel; - 0 |
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
Тогда я чего-то не пойму: зачем ты делаешь fUsers.Close если кнопка, обладая ModalResult, кроме как mrNone, сама закроет форму!
-------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
| Dayana |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 352 Регистрация: 6.10.2002 Где: Тель-Авив Репутация: 2 Всего: 4 |
В этом и ошибка. Не нужно насильно закрывать форму, тогда ModalResult формы сохранит значение ModalResult кнопки. А если пароль неверный, то меняй значение ModalResult формы в коде...
|
|||
|
||||
| *^angel^* |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 5.3.2003 Где: Столица нашей нео бъятной Родины Репутация: нет Всего: нет |
Все супер! получилось. НаписАла так:
procedure TfUsers.btnOKClick(Sender: TObject); begin case fUsers.cbLogin.ItemIndex of 0:begin if fUsers.ePassword.Text <> '123' then MessageDlg('Неверный пароль!', mtError, [mbOK], 0); end; 1:begin if fUsers.ePassword.Text <> '1234' then MessageDlg('Неверный пароль!', mtError, [mbOK], 0); end; 2:begin if fUsers.ePassword.Text <> '12345' then MessageDlg('Неверный пароль!', mtError, [mbOK], 0); end; end; // конец CASE end; только если я ввожу неправильный пароль, сначала выскакивает окно "Неправильный пароль", и пользователь может ввести его еще раз. А потом я опять ввожу неправильный пароль, но программа активизируется, как-будто это правильный пароль. |
|||
|
||||
| &-ray |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 406 Регистрация: 15.4.2003 Где: Казахстан, г Аста на Репутация: нет Всего: нет |
Раз уж такие заморочки с ModalResult то можно обойтись и без него.
Просто при нажатии кнопки btnOk проверяй правильность пароля, если правильно, то просто закрывай форму и все, если нет то оставляй ее открытой. По клику на btnCancel убивай приложений (Halt). Соответственно надо подправить dpr, чтобы не было проверок ModalResult -------------------- "Совсем неважно от чего помрешь, ведь куда важнее - для чего родился..." С.Б. -------------------- И снова мышь беру я в руки Куда иду? - Конечно в сруки! |
|||
|
||||
| *^angel^* |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 5.3.2003 Где: Столица нашей нео бъятной Родины Репутация: нет Всего: нет |
СУПЕР! все получилось и работает. Сделала так:
во-первых ввела глобальную переменную FLAG : Boolean, которая отвечает за то, что правильно введены пароль и логин. во-вторых, написАла следующее (форма авторизации, нажата кнопка ОК): procedure TfUsers.btnOKClick(Sender: TObject); begin case fUsers.cbLogin.ItemIndex of 0:begin if fUsers.ePassword.Text <> '123' then begin MessageDlg('Неверный пароль!', mtError, [mbOK], 0); FLAG := false; end else begin fUsers.Close; FLAG := true; end; end; 1:begin if fUsers.ePassword.Text <> '1234' then begin MessageDlg('Неверный пароль!', mtError, [mbOK], 0); FLAG := false; end else begin fUsers.Close; FLAG := true; end; end; 2:begin if fUsers.ePassword.Text <> '12345' then begin MessageDlg('Неверный пароль!', mtError, [mbOK], 0); FLAG := false; end else begin fUsers.Close; FLAG := true; end; end; end; // конец CASE end; .dpr : begin Application.Initialize; Application.CreateForm(TfMain, fMain); Application.ShowMainForm := False; Application.CreateForm(TfUsers, fUsers); fUsers.ShowModal; if FLAG then begin Application.ShowMainForm := true; Application.Run; end else Halt; end. В-третьих, убрала с кнопок ОК и Отмена значения ModalResult mrOK и mrCancel соответственно. СПАСИБО ВСЕМ ЗА ПОМОЩЬ!!!!!!!!!!!!!!!!! чтобы я без вас делала?! |
|||
|
||||
| *^angel^* |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 5.3.2003 Где: Столица нашей нео бъятной Родины Репутация: нет Всего: нет |
единственное - долго загружается главная форма, после ввода правильных логина и парол.......... можно это как подправить?
|
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
Проверять пароль на Form1.onShow
-------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
| *^angel^* |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 5.3.2003 Где: Столица нашей нео бъятной Родины Репутация: нет Всего: нет |
jnSow какой формы? авторизации или главной?
|
|||
|
||||
| *^angel^* |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 5.3.2003 Где: Столица нашей нео бъятной Родины Репутация: нет Всего: нет |
т.е. onShow
|
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
Ну естесно главной
-------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
| *^angel^* |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 5.3.2003 Где: Столица нашей нео бъятной Родины Репутация: нет Всего: нет |
а что делать с обработчиком на кнопке ОК, в форме авторизации? просто fMain.Show? - тогда если пароль неправильный, то форма все равно показывается.
ведь ничего не происходит, если просто сделать проверку в Show. |
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
Да сделай Close асинхронно и всё..
-------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
Попробуй открывать главное окно программы в обработчике закрытия формы авторизации
|
|||
|
||||
| SmaLL |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 557 Регистрация: 17.12.2002 Где: Voronezh Репутация: 1 Всего: 2 |
Я делал так
-------------------- Что ни делается - всЁ к лучшему! SmallWeb Мой адрес не дом и не улица, мой адрес родной пивзавод! |
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
иф ModalResult<>mrOk зен WM_CLOSE
-------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
| &-ray |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 406 Регистрация: 15.4.2003 Где: Казахстан, г Аста на Репутация: нет Всего: нет |
Вроде как порешили не использовать ModalResult *^angel^*, предлагаю простой способ: dpr:
на ГЛАВНУЮ форму выложи таймер, установи интервал в несколько мс и добавь процедуру:
в форме авторизации при клике на btnOk проверяй правильность пароля, если пароль верный, то закрывай эту форму и отображай главную (fMain.show), если пароль неправильный, то оставляй форму открытой. При клике на btnCancel закрывай приложение (application.terminate) И усе готово! -------------------- "Совсем неважно от чего помрешь, ведь куда важнее - для чего родился..." С.Б. -------------------- И снова мышь беру я в руки Куда иду? - Конечно в сруки! |
||||||
|
|||||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |