0

ログインフォーム、メインメニューフォーム、設定フォームがあります。こことabout.comでログインフォームの作成に関するチュートリアルを読みました.

メニュー フォームはメイン フォームとして読み込まれますが、他のフォームを作成する必要があります。ユーザーがメイン フォームからログアウトしてログイン フォームに戻れるようにしたいので、この質問に対する受け入れられた回答に従いました:ログイン/ログアウトを使用した Delphi アプリケーション - 実装方法?

私のログインフォームには、という名前のプロシージャがありますCheckLogIn。ユーザーが編集ボックスを介して入力した情報を読み取ります。次に、ローカルの .ini ファイル内で対応するユーザー名を見つけ、保存されている暗号バージョンのパスワードを読み取ります。次に、保存されているパスワードの乱雑さを解消し、ユーザーが入力したパスワードと比較します。成功した場合、ユーザーはログインできるはずです。

この実装は、メイン メニュー フォームの後にログイン フォームを作成しようとしていないときに機能しました。CheckLogin実行時にログイン フォームを作成したので、手順の開始時にアクセス違反エラーが発生します。

私の現在のコードは次のとおりです。

{LOGIN SCREEN}

implementation

uses
  ScrMenu;

{$R *.dfm}

procedure LogIn;
begin
  with TfrmScrLogin.Create(nil) do
    try
      if ShowModal = mrOK then
        Application.MainForm.Show
      else
        Application.Terminate;
    finally
      Free;
    end;
end;


    function CheckLogin(Sender: TObject):boolean;
var
  iFile: TINIFile;
  i, Count, PLength, Pos1, Pos2: integer;
  User, Cypher, TempPass, Password: string;
begin
  User := frmScrLogin.edtUsername.Text;
  Password := frmScrLogin.edtPassword.Text;
  iFile := TIniFile.Create('C:\MHData.ini');
  Cypher := iFile.ReadString('Users', User, '');
  if Cypher = '' then
    ShowMessage('Username not found')
  else
    begin
      Pos1 := Pos('|', Cypher);
      Pos2 := Pos('\', Cypher);
      PLength := StrToInt(Copy(Cypher, Pos1 + 1, Pos2 - Pos1 - 1));
      Cypher := Copy(Cypher, 0, (Pos1-1));
      Cypher := Copy(Cypher, 0, (Length(Cypher)-PLength));
      for i := 0 to PLength-1 do
        begin
          Count := (i+1)*4;
          TempPass := TempPass + Cypher[Count];
        end;
      if Password = TempPass then
      begin
        Showmessage('login successful');
       frmScrLogin.ModalResult := mrOK;
       Login;
      end
      else
        begin
        ShowMessage('Incorrect password');
        frmScrLogin.edtPassword.Clear;
        frmScrLogin.edtPassword.SetFocus;
        end;
    end;
end;

乱雑な編集で申し訳ありません。形式のルールに精通していません。また、パスワードをローカルに保存するのに .ini ファイルを使用するのは良くないという回答が、他の多くのログインに関する質問にもありました。ただし、このプログラムは高度なセキュリティを必要としません。前もって感謝します

4

1 に答える 1