Консультация № 168928
04.06.2009, 11:04
0.00 руб.
0 6 2
Уважаемые экспетры, я уже задавал вопрос по поводу ввода пароля при помощи функции InputBox. Но ситуация несколько изменилась. Пароль вводится в стандартную форму Password Dialog и при проверке правильности пароля с помощью InputBox выводится сообщение пароль правильный , если нет повторите ввод пароля. Помогите, пожалйуста разобратся, что-то у меня не получается.

Обсуждение

Неизвестный
04.06.2009, 11:46
общий
Перенесено из формы ответа.
Ответ № от OlegD, 1-й класс
Здравствуйте, Vlad9240.


Вы не могли бы привести пример Вашего кода для понимания проблемы.

Спасибо
Ответил: OlegD, 1-й класс
Дата отправки: 04.06.2009, 11:44
давно
Посетитель
268788
8
04.06.2009, 13:43
общий
С кодом как раз и проблема. Теоретически должно быть так: в стандартную форму Password Dialog вводится какой-то пароль и при нажатии кнопи ОК происходит проверка пароля и выходит окно функции InputBox ( s:=InputBox('Программа доступна',' ваш пароль',' правильный'); если пароль верен и после нажатия кнопки ОК должна открыться главная форма или окно (s:=InputBox('Программа недоступна',' Ошибочный пароль',' повторите ввод'); если пароль неправильный. Вот и не могу сообразить как это оформить в коде.
Неизвестный
04.06.2009, 17:33
общий
перекрыть событие CloseQuery на форме ввода пароля.

procedure TPasswordDlg.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
if ModalResult = mrCancel then // Пользователь отменяет ввод пароля, в дальнейшем сей факт нужно будет отслеживать
begin
CanClose := True;
exit;
end;
CanClose := CheckEnteredPassword;
if CanClose then
SendMessage('Программа доступна, Ваш пароль правильный')
else
SendMessage('Программа недоступна! Ошибочный пароль, повторите ввод');
end;



И вот ещё одна интересная мысль...
В dpr-файле похимичить ака

begin
Application.Initialize;
Application.Title := 'My super application name';
if Initial.ApplicationInitialized then // Это вызов функции из собственного модуля Initial. Функция в том числе поднимает форму ввода пароля. Если пароль введен корректно, то функция вернет true, если какие-то барабашки, то вернет false и приложение закончит работу даже не подняв главной формы.
begin
Application.CreateForm(TMainFrm, MainFrm);
end
else
Application.Terminate;
Application.Run;
end.
Неизвестный
06.06.2009, 12:17
общий
это ответ
Здравствуйте, Vlad9240.
Вы немножко путаете.. функция InputBox предназначена для ввода текста.. я уже Вам это говорил, в неё не вводят пароль, т.к. он там открытый.
Для вывода сообщения, используется, например, MessageBox.

Если пароль не верный, то и закрывать окно Password Dialog нет смысла - пусть повторяет пользователь ввод пока не введет верный пароль, или пока не нажмет "Отмена".
Вот, не большая программка.
Конечно, в реальных ситуациях проверку пароля выносят в главную функцию (как минимум) и формы с запросом пароля и т.д. создается динамически.
Но в данном случае показан сам смысл.

5
Спасибо за пример!
Неизвестный
06.06.2009, 12:17
общий
это ответ
Здравствуйте, Vlad9240.
Вы немножко путаете.. функция InputBox предназначена для ввода текста.. я уже Вам это говорил, в неё не вводят пароль, т.к. он там открытый.
Для вывода сообщения, используется, например, MessageBox.

Если пароль не верный, то и закрывать окно Password Dialog нет смысла - пусть повторяет пользователь ввод пока не введет верный пароль, или пока не нажмет "Отмена".
Вот, не большая программка.
Конечно, в реальных ситуациях проверку пароля выносят в главную функцию (как минимум) и формы с запросом пароля и т.д. создается динамически.
Но в данном случае показан сам смысл.

Прикрепленные файлы:
5
Спасибо за пример!
Неизвестный
06.06.2009, 17:39
общий
Foxbox:
А кому Вы посылаете сообщение функцией SendMessage ???
это не "показать сообщение".
вот её прототип
Код:
LRESULT SendMessage(

HWND hWnd, // дискриптор окна которому посылается сообщение
UINT Msg, // идентификатор сообщения (в том окне должен быть определен обработчик этого сообщения)
WPARAM wParam, // первый параметр
LPARAM lParam // второй параметр
);
Форма ответа