![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#16
|
|||
|
|||
|
Если применяется 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.Последний раз редактировалось san-46, 21.06.2008 в 14:39. |
|
#17
|
||||
|
||||
|
1. А этот файл dpr можно открывать через блокнот и там это вписывать ? А то я просто других способов не знаю.
2. Не знаешь как сделать, чтоб при вызове меню "Сменить пароль" можно было вписать сначала старый пароль, потом во втором Edit вписать новый пароль, нажать кнопку Ок и всё. И чтобы при новом запуске программы уже требовался новый пароль. Я в принципе это вижу так: Пользователь вводит в Edit1 пароль, в это время Edit2 неактивно, как только проверилось правильность ввода пароля в Edit1 фокус передаётся в Edit2 и оно становится активным. Тока я не знаю как это всё связать. P.S. думаю понятно выразился. |
|
#18
|
|||
|
|||
|
1. В Delphi окно "Project manager", это там где показывается имя проекта (напр., Project1.exe со списком его форм). На этом наименование нажимается правая кнопка мыши, из появившегося меню выбрать "View Source" - появиться текст проекта, где и можно вносить изменения.
2. Если свойство Edit2.Enabled установить в False, то контрол не будет доступен для ввода. Edit2.Enabled := True позволит вводить. Собственно, вам это, скорее всего, известно. Если так, то не очень понятно в чем проблема. |
|
#19
|
||||
|
||||
|
Ладно. Скажем по-другому. Вот представьте. Вы ввели пароль, открылась основная форма, всё нормально. Но пользователь захотел сменить пароль. Для этого он нажимает кнопку "Новый пароль", открывается форма "Сменить пароль". На этой форме располагаются два Edit и кнопка "Подтвердить". В первом Edit мы вводим старый пароль (в нашем случае qaz), проверяется правильность ввода пароля. Если пароль правелен, то второй Edit становится активным и можно ввести новый пароль, если пароль в первом Edit введён не правильно, то второй Edit остаётся неактивным, и выноситься ошибка "Пароль не верен". Если пароль проверен и он правильный, нажимаем кнопку подтвердить. И при следующем запуске программы вводиться новый пароль, тот который задал пользователь. Сложность заключается в том что, как сделать так чтобы программа запрашивала новый пароль, который перед закрытием задавал пользователь, а не тот который я указываю при создании приложения ?
|
|
#20
|
|||
|
|||
|
Т.е., надо как-то сохранить новый пароль?
|
|
#21
|
||||
|
||||
|
Да, можно сказать и так.
|
|
#22
|
|||
|
|||
|
Могу предложить сохранять его в ini-файле (можно и в реестре).
А чтобы этот пароль не был легко доступен, дам простенькую функцию симметричного шифрования (это когда одна и та же функция шифрует текст и она же его расшифровывает). Функция не применят никаких крутых методов шифрования, поэтому проста как чугунный утюг. |
|
#23
|
||||
|
||||
|
Ну в реестре версия отпадает. Потому что я буду показывать программу перед преподами, на их компьютере, а у них всё заблакировано, любые действия с реестром. А вот сохранение в ini файл это неплохая идея, только как её реализовать ?
Код:
SaveToFile(Password.ini); AssignFile(F, Copy(FileName,1,Length(FileName)-4)+'.ini'); Rewrite(F); |
|
#24
|
|||
|
|||
|
Код:
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;При запуске программы вызывается функция LoadPSW, если она возращает пустое значение, значит ini файла нет и надо применять "зашитый" пароль. Последний раз редактировалось san-46, 22.06.2008 в 13:18. |
|
#25
|
||||
|
||||
|
Вылезла ошибка
Код:
function LoadPsw(FileName : string); var IniF : TIniFile; Undeclared idintifier: 'TIniFile' В чём проблема ? |
|
#26
|
|||
|
|||
|
Уже поправлено.
Код:
function LoadPSW(FileName : string) : string; |
|
#27
|
||||
|
||||
|
А вот смари.
Код:
procedure TPSWfrm.Button2Click(Sender: TObject); begin if (Edit1.Text = 'qaz') then Edit2.Enabled:=true; end else end; Код:
Edit2.Text:=Edit2.Text |
|
#28
|
|||
|
|||
|
Так не получится. Надо же ждать пока не введут пароль во второй раз. А в этой процедуре такого не случится.
Поэтому может быть повесить на 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
|
||||
|
||||
|
Скажу не в тему. Какой-то е****нный хакер взломал мою почту, на mail. Может подкинешь идейку как его вычислить или поймать ?
|
|
#30
|
||||
|
||||
|
Скажу не в тему. Какой-то е***анный хакер взломал мою почту на mail агенте. Не подскажешь как его можно поймать или вычислить ?
|