Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 21.06.2008, 14:30
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

Если применяется Release, то не может быть что форма остается.
Вот из справки:
"Destroys the form and frees its associated memory."
Т.е. форма уничтожается и память освобождается.

Что-то у тебя там не так. К тому же форма как таковая не может отображается в процессах - там показываются только приложения (программы).

Вот пример как может происходить запрос пароля (источник DelphiWord )
Код:
var
  Password: string;
begin
  if InputQuery('Password', 'Enter your password', PassWord) then
    if Password = 'D5DG' then
    begin
      // Other initialization routines can go here.
      Application.CreateForm(TMainForm, MainForm);
      Application.Run;
    end
    else
      MessageDlg('Incorrect Password, terminating program', mtError, [mbok], 0);
end.
это надо вставлять в файл проекта (dpr)
__________________
Не забывайте делать резервные копии

Последний раз редактировалось san-46, 21.06.2008 в 14:39.
Ответить с цитированием
  #17  
Старый 22.06.2008, 12:20
Аватар для MezKo
MezKo MezKo вне форума
Прохожий
 
Регистрация: 20.06.2008
Сообщения: 19
Репутация: 10
По умолчанию

1. А этот файл dpr можно открывать через блокнот и там это вписывать ? А то я просто других способов не знаю.
2. Не знаешь как сделать, чтоб при вызове меню "Сменить пароль" можно было вписать сначала старый пароль, потом во втором Edit вписать новый пароль, нажать кнопку Ок и всё. И чтобы при новом запуске программы уже требовался новый пароль.
Я в принципе это вижу так: Пользователь вводит в Edit1 пароль, в это время Edit2 неактивно, как только проверилось правильность ввода пароля в Edit1 фокус передаётся в Edit2 и оно становится активным. Тока я не знаю как это всё связать.
P.S. думаю понятно выразился.
Ответить с цитированием
  #18  
Старый 22.06.2008, 12:36
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

1. В Delphi окно "Project manager", это там где показывается имя проекта (напр., Project1.exe со списком его форм). На этом наименование нажимается правая кнопка мыши, из появившегося меню выбрать "View Source" - появиться текст проекта, где и можно вносить изменения.

2. Если свойство Edit2.Enabled установить в False, то контрол не будет доступен для ввода. Edit2.Enabled := True позволит вводить.
Собственно, вам это, скорее всего, известно. Если так, то не очень понятно в чем проблема.
__________________
Не забывайте делать резервные копии
Ответить с цитированием
  #19  
Старый 22.06.2008, 12:43
Аватар для MezKo
MezKo MezKo вне форума
Прохожий
 
Регистрация: 20.06.2008
Сообщения: 19
Репутация: 10
По умолчанию

Ладно. Скажем по-другому. Вот представьте. Вы ввели пароль, открылась основная форма, всё нормально. Но пользователь захотел сменить пароль. Для этого он нажимает кнопку "Новый пароль", открывается форма "Сменить пароль". На этой форме располагаются два Edit и кнопка "Подтвердить". В первом Edit мы вводим старый пароль (в нашем случае qaz), проверяется правильность ввода пароля. Если пароль правелен, то второй Edit становится активным и можно ввести новый пароль, если пароль в первом Edit введён не правильно, то второй Edit остаётся неактивным, и выноситься ошибка "Пароль не верен". Если пароль проверен и он правильный, нажимаем кнопку подтвердить. И при следующем запуске программы вводиться новый пароль, тот который задал пользователь. Сложность заключается в том что, как сделать так чтобы программа запрашивала новый пароль, который перед закрытием задавал пользователь, а не тот который я указываю при создании приложения ?
Ответить с цитированием
  #20  
Старый 22.06.2008, 12:46
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

Т.е., надо как-то сохранить новый пароль?
__________________
Не забывайте делать резервные копии
Ответить с цитированием
  #21  
Старый 22.06.2008, 12:47
Аватар для MezKo
MezKo MezKo вне форума
Прохожий
 
Регистрация: 20.06.2008
Сообщения: 19
Репутация: 10
По умолчанию

Да, можно сказать и так.
Ответить с цитированием
  #22  
Старый 22.06.2008, 12:51
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

Могу предложить сохранять его в ini-файле (можно и в реестре).
А чтобы этот пароль не был легко доступен, дам простенькую функцию симметричного шифрования (это когда одна и та же функция шифрует текст и она же его расшифровывает). Функция не применят никаких крутых методов шифрования, поэтому проста как чугунный утюг.
__________________
Не забывайте делать резервные копии
Ответить с цитированием
  #23  
Старый 22.06.2008, 12:57
Аватар для MezKo
MezKo MezKo вне форума
Прохожий
 
Регистрация: 20.06.2008
Сообщения: 19
Репутация: 10
По умолчанию

Ну в реестре версия отпадает. Потому что я буду показывать программу перед преподами, на их компьютере, а у них всё заблакировано, любые действия с реестром. А вот сохранение в ini файл это неплохая идея, только как её реализовать ?
Код:
SaveToFile(Password.ini); 
  AssignFile(F, Copy(FileName,1,Length(FileName)-4)+'.ini');
  Rewrite(F);
Вот это пойдёт, например на событие OnClick кнопки. Или по-другому как-то надо ?
Ответить с цитированием
  #24  
Старый 22.06.2008, 13:13
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

Код:
uses
  IniFiles;
//сохранение строкового значения в ini-файле
procedure SavePSW(FileName, PSW : string);
var IniF : TIniFile;
begin
  IniF := TIniFile.Create(FileName); //c расширением .ini
  try
    IniF.WriteString('PSW', 'PSW', PSW); //имя секции и имя ключа может совпадать
  finally
    IniF.Free;
  end;
end;
//считывание значения из ini-файла
function LoadPSW(FileName : string) : string;
var IniF : TIniFile;
begin
  Result := '';
  IniF := TIniFile.Create(FileName); //c расширением .ini
  try
    Result := IniF.ReadString('PSW', 'PSW', '');
  finally
    IniF.Free;
  end;
end;
При закрытии формы, где происходит смена пароля и, если пароль правильный, то вызывается процедура SavePSW.
При запуске программы вызывается функция LoadPSW, если она возращает пустое значение, значит ini файла нет и надо применять "зашитый" пароль.
__________________
Не забывайте делать резервные копии

Последний раз редактировалось san-46, 22.06.2008 в 13:18.
Ответить с цитированием
  #25  
Старый 22.06.2008, 13:35
Аватар для MezKo
MezKo MezKo вне форума
Прохожий
 
Регистрация: 20.06.2008
Сообщения: 19
Репутация: 10
По умолчанию

Вылезла ошибка
Код:
function LoadPsw(FileName : string);
var
  IniF : TIniFile;
Function needs result type
Undeclared idintifier: 'TIniFile'
В чём проблема ?
Ответить с цитированием
  #26  
Старый 22.06.2008, 13:42
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

Уже поправлено.
Код:
function LoadPSW(FileName : string) : string;
__________________
Не забывайте делать резервные копии
Ответить с цитированием
  #27  
Старый 22.06.2008, 13:58
Аватар для MezKo
MezKo MezKo вне форума
Прохожий
 
Регистрация: 20.06.2008
Сообщения: 19
Репутация: 10
По умолчанию

А вот смари.
Код:
procedure TPSWfrm.Button2Click(Sender: TObject);
begin
if (Edit1.Text = 'qaz') then
Edit2.Enabled:=true;
end
else
end;
Я сделал что-то типо, в Edit1 вводится старый пароль qaz, нажимаем кнопку, если он правилен, то активизируется второй Edit. и вот после else у меня ступор. Как сделать чтобы если я введу именно новый пароль он запрашивался при след. запуске программы. Что просто надо ввести после else
Код:
Edit2.Text:=Edit2.Text
Или это каша. Или как надо вообще это сделать.
Ответить с цитированием
  #28  
Старый 22.06.2008, 14:11
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

Так не получится. Надо же ждать пока не введут пароль во второй раз. А в этой процедуре такого не случится.
Поэтому может быть повесить на Edit1 событие OnChage и постоянно (в этом событии, которое будет запускаться при нажатии на любую клавишу) проверять ввод первого пароля.

Код:
procedure TPSWfrm.Edit1Change(Sender : TObject);
begin
  if (Edit1.Text = 'qaz') then
    Edit2.Enabled := true;
end;

//и после ввода нового пароля нажимается кнопка
procedure TPSWfrm.Button2Click(Sender: TObject);
begin
  if Edit2.text <> '' then
    SavePSW(FileName, Edit2.Text);
end;
__________________
Не забывайте делать резервные копии
Ответить с цитированием
  #29  
Старый 22.06.2008, 14:36
Аватар для MezKo
MezKo MezKo вне форума
Прохожий
 
Регистрация: 20.06.2008
Сообщения: 19
Репутация: 10
По умолчанию

Скажу не в тему. Какой-то е****нный хакер взломал мою почту, на mail. Может подкинешь идейку как его вычислить или поймать ?
Ответить с цитированием
  #30  
Старый 22.06.2008, 14:37
Аватар для MezKo
MezKo MezKo вне форума
Прохожий
 
Регистрация: 20.06.2008
Сообщения: 19
Репутация: 10
По умолчанию

Скажу не в тему. Какой-то е***анный хакер взломал мою почту на mail агенте. Не подскажешь как его можно поймать или вычислить ?
Ответить с цитированием
Ответ


Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:23.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025