Консультация № 174096
09.11.2009, 16:28
35.00 руб.
0 3 2
Здравствуйте. Уважаемые эксперты у меня такая проблема. Надо создать модуль для обработки пароля. Вот, что получилось:

procedure TPasswordDlg.OKBtnClick(Sender: TObject);
var sub:string[40];
begin
if Password.Text='1111' then
begin
sub:=InputBox('Программа доступна', 'Ваш пароль', 'Правильный');
Form1:=TForm1.OnCreate;
Form1.Show;
end
else
begin
sub:=InputBox('Неправильный пароль', 'Проверте ввод пароля','Повторите');
end;
end;

При запуске программы выходят следующие ошибки подскажите, пожалуйста в чем дело И как это можно исправить

[Error] Unit2.pas(38): Undeclared identifier: 'InputBox'
[Error] Unit2.pas(39): Method identifier expected
[Fatal Error] Unit1.pas(23): Could not compile used unit 'Unit2.pas'

Обсуждение

Неизвестный
09.11.2009, 16:44
общий
это ответ
Здравствуйте, Vlad9240.


Проверьте в списке USES текущего модуля должен быть указан юнит DIALOGS. Функций InputBox относиться к данному юниту. Если его нет в списке используемых юнитов, то выдается ошибка Undeclared identifier: 'InputBox'.

Также Вы неправильно создаете форму Form1. для ее создания необходимо изменить Вашу строчку этой:

Form1:=TForm1.Create(nil);

5
Спасибо! Так и было:)
давно
Мастер-Эксперт
425
4118
09.11.2009, 16:47
общий
Vlad9240:
А Вы, случаем, модуль Dialogs в строке Uses не забыли добавить?
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Неизвестный
09.11.2009, 17:23
общий
это ответ
Здравствуйте, Vlad9240.
Это делается не совсем так..
Файл проекта (Delphi 7) я прикрепил.
А так:
1. делается форма ввода пароля
2. Определяется алгоритм проверки пароля.. Самый простой случай - это операция xor
на примере простейшей функции
3. В главном модуле вызывается форма проверки пароля (в модуле проекта! ) и если все нормально, запускаем приложение, иначе просто выходим.

function TForm2.CheckPass(s, pas: String; key: char): boolean;
var i:integer;
s2:String;
begin
for i:= 1 to Length(s) do
begin
s2 := s2+char(ord(s[i]) xor ord(key));
end;
result := s2 = pas;
end;


а проверка осуществляется так:
procedure TForm2.BitBtn1Click(Sender: TObject);
begin
if CheckPass(Edit1.Text, 'PPPP','a') then
ModalResult := mrOk
else
MessageBox(GetActiveWindow,'Пароль не верный!',PChar(Application.Title),MB_OK+MB_ICONQUESTION);
end;


ну а вот и сам вызов:
program Project1;

uses
Forms, Controls,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};

{$R *.res}
var f:TForm2;
begin
Application.Initialize;
f := TForm2.Create(nil);
if f.ShowModal = mrOk then
begin
Application.CreateForm(TForm1, Form1);
Application.Run;
end;
end.


Все в проекте.

PS: да, пароль '1111'
Прикрепленные файлы:
5
Спасибо!
Форма ответа