Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.09.2009, 17:59   #1
TaYgA
Форумчанин
 
Аватар для TaYgA
 
Регистрация: 24.09.2009
Сообщений: 264
Сообщение защита форм паролем в Delphi

Всем доброго времени суток... Мене поставили задачу создать органайзер в Delphi... Я хочу защитить главную страницу паролем, таким образом, чтоб пользователь сам мог его создавать нажав на кнопку "регистрация"... Форму с регистрацией создал, получился код:
Код:
procedure TForm3.Button1Click(Sender: TObject);
var  myFile : TextFile;
begin

// Попытка открыть файл Test.org для записи
  AssignFile(myFile, 'Test.org');
    Append(myFile);
// Запись  в этот файл
  WriteLn(myFile, Edit1.text);
    WriteLn(myFile, Edit2.text);
// Закрытие файла
  CloseFile(myFile);
end;
Форма, где проверяется пароль:

Код:
procedure TPasswordDlg.OnCloseQuery(Sender: TObject;
  var CanClose: Boolean);
var      pass: String;
begin;
  if lowerCase(Password.Text) = (???) and Edit1 = (???) {Edit1-проверка логина}
  then CanClose:=true 
    else Application.Terminate;
end;
Подскажите пожалуйсто, куда нужно загружать файл для чтения и как прописать код?!?! Как он будет сравнивать логин и пароль, если зарегестрированных пользователей несколько, тоесть файл имеет вид:
{test.org:
Login
Password
Login
Password
.........}
Заранее спасибо
TaYgA вне форума Ответить с цитированием
Старый 27.09.2009, 21:38   #2
NeshSoft
Максим Николаев
Форумчанин
 
Аватар для NeshSoft
 
Регистрация: 15.02.2009
Сообщений: 170
По умолчанию

Лучше хранить логины и пароли не в обычном текстовом файле, а в типизированом файле - тогда хотябы в обычном блокноте пароли не подглядеть. И создать для них специальный тип:
Код:
logpas = record
           log:string[10];
           pas:string[10];
           end;
затем считываем с файла первую структуру logpas - сравниваем логин, если равно тому что пользователь ввел - то сравниваем пароль, если логин не совпал то считываем из файла следующую структуру logpas, и так, пока не достигнут конец файла.
NeshSoft. Программирование на заказ для студентов. Delphi/Pascal. Подробнее на сайте neshsoft.narod.ru
NeshSoft вне форума Ответить с цитированием
Старый 28.09.2009, 00:34   #3
.Phoenix
Форумчанин
 
Регистрация: 02.04.2009
Сообщений: 235
По умолчанию

Можно обойтись и без типизированных файлов, мне так кажется. Я думаю достаточно хранить логин да пароль в обычном текстовом файле, но эти логин и пароль могут быть просто зашифрованны. Для шифрации можно использовать простой метод Цезаря, другим вариантом может послужить файл базы данных, где будут храниться логин и пароль, ну и дополнительная информация, на случай если пароль забыт
Всё гениальное - просто!
.Phoenix вне форума Ответить с цитированием
Старый 28.09.2009, 00:39   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

не плохо подойдет ИНИ с шифрацией.
раздел это юзер и поле с паролем.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.09.2009, 14:42   #5
TaYgA
Форумчанин
 
Аватар для TaYgA
 
Регистрация: 24.09.2009
Сообщений: 264
По умолчанию

Шифровать файл буду потом, пока хочу разобраться как сделать, чтоб хотя бы считывала логин и пароль с текстового файла... В какой форме нужно считывать файл?!?! В форме "регистрация" не получается т. к. если пользователь зарегестрирован, то он не будет открывать эту форму, следовательно и файл считываться не будет... А если в форме проверки логина и пароля, то в какой процедуре прописывать?!?! Я так понимаю будет так:
Код:
procedure PswordDlg.OnShow(Sender: TObject);
var
  myFile : TextFile;
  text   : string;
begin
  Reset(myFile);
    ReadLn(myFile, text);
end;
В этом случае как будет выглядить проверка логина и пароля??!
Код:
.........
 if lowerCase(Password.Text) = text and Edit1 = text {Edit1-проверка логина}
  then CanClose:=true 
    else Application.Terminate;
end;
Так программа не работает... Как правельно нужно написать, чтоб произошла проверка логина и пароля?!
TaYgA вне форума Ответить с цитированием
Старый 28.09.2009, 15:02   #6
NeshSoft
Максим Николаев
Форумчанин
 
Аватар для NeshSoft
 
Регистрация: 15.02.2009
Сообщений: 170
По умолчанию

как я вижу text : string; - локальная переменная процедуры PswordDlg.OnShow, следовательно она уничтожается после выхода из этой процедуры. Кстати компилятор должен был предупредить, что эта переменная ни где не используется.

Можно написать кусок кода считывающий логин из файла непосредственно перед проверкой этого логина, т.е. так:
Код:
 Reset(myFile);
 ReadLn(myFile, login);
 ReadLn(myFile, pass);
 if lowerCase(Password.Text) = pass and Edit1.text = login {Edit1-проверка логина}
  then ......... 
    else ...........
PS что такое Edit1 = text? разве компилятор это пропустил?
PPS лучше озаглавливать переменные со смыслом, ну что это за text?
NeshSoft. Программирование на заказ для студентов. Delphi/Pascal. Подробнее на сайте neshsoft.narod.ru
NeshSoft вне форума Ответить с цитированием
Старый 28.09.2009, 21:03   #7
TaYgA
Форумчанин
 
Аватар для TaYgA
 
Регистрация: 24.09.2009
Сообщений: 264
По умолчанию

Спасибо за подсказку, попробывал... Теперь возникла другая проблема... При проверки пароля, программа не считывает файл, а переходит к следущему действию т. е. закрывает прогу... (if lowerCase(Password.Text) = pass then CanClose:=true
else Application.Terminate; {переходит сразу к else})
Вот код программы:
ФОРМА ПРВЕРКИ ПАРОЛЯ:
Код:
procedure TPasswordDlg.OnCloseQuery(Sender: TObject; var CanClose: Boolean);
Var myFile: TextFile;
     pass: String;
begin
  AssignFile(myFile, 'Test.org');
    Reset(myFile);
      ReadLn(myFile, pass);
  if lowerCase(Password.Text) = pass then CanClose:=true
    else Application.Terminate;
CloseFile(myFile);
end;
"ФОРМА РЕГЕСТРАЦИЙ"
Код:
procedure TForm3.Button1Click(Sender: TObject);
var
  myFile : TextFile;
  text, pass, log   : string;

begin
log:=Edit1.Text;
pass:=Edit2.Text;
  // Попытка открыть файл Test.txt для записи
  AssignFile(myFile, 'Test.org');
   append(myFile);

  // Запись нескольких известных слов в этот файл
  WriteLn(myFile,log);
  WriteLn(myFile, pass);

  // Закрытие файла
  CloseFile(myFile);

end;
Подскажите, что не правельно?!?!
TaYgA вне форума Ответить с цитированием
Старый 28.09.2009, 21:23   #8
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Насколько я знаю, в делфи относительные пути не прокатят, так что надо заменить 'Test.org' на extractfilepath(paramstr(0))+'test. org'
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 28.09.2009, 21:48   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Насколько я знаю, в делфи относительные пути не прокатят
прокатят но они не надежны, так как стоит изменить текущую папку как капец=)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.09.2009, 09:55   #10
NeshSoft
Максим Николаев
Форумчанин
 
Аватар для NeshSoft
 
Регистрация: 15.02.2009
Сообщений: 170
По умолчанию

TaYgA, можно добавить пару строк для отладки, и тогда сразу все станет ясно, напр:
Код:
procedure TPasswordDlg.OnCloseQuery(Sender: TObject; var CanClose: Boolean);
Var myFile: TextFile;
     pass: String;
begin
  AssignFile(myFile, 'Test.org');
    Reset(myFile);
      ReadLn(myFile, pass);
  ShowMessage(lowerCase(Password.Text)+'='+pass);//прога выведет сообщение, где покажет почему она при таком сравнении переходит на else
  if lowerCase(Password.Text) = pass then CanClose:=true
    else Application.Terminate;
CloseFile(myFile);
end;
NeshSoft. Программирование на заказ для студентов. Delphi/Pascal. Подробнее на сайте neshsoft.narod.ru
NeshSoft вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрытие и закрытие форм (Delphi) Middle.Cry Помощь студентам 2 13.03.2009 20:18
Ключ. Защита программы. Delphi Kukkk Безопасность, Шифрование 20 11.12.2007 18:05
Защита паролем GAGARIN-NEW Общие вопросы Delphi 46 15.10.2007 13:20
Защита формы паролем Илюха Общие вопросы Delphi 7 29.09.2007 20:53