Q&A

  • 로그인 실패 시 창 다시 뜨게하는 방법?
로그인 창을 구현하고 있는데.. 로그인이 실패하면 창이 다시 떠야하는데
두번 정도 실패하면 로그인창이 닫혀 버립니다.
이 게시판에서 '로그인'으로 검색해서 답변들을 봤는데 도움이 될 만한
답변을 못 찾았습니다..
오늘 하루 종일 헤메고 있네요.. 오늘 안에 끝낼 수 있도록 도와주세요.. ㅠ_ㅠ

--------------------------------------
소스
--------------------------------------
<< main.pas (메인화면) >>
procedure TfmMain.FormCreate(Sender: TObject);
begin
  LoginShow := True;
end;

procedure TfmMain.FormActivate(Sender: TObject);
begin
  if LoginShow then
   begin
       LoginShow := False;
       Application.CreateForm(TfmLogin, fmLogin);
       fmLogin.ShowModal;
       if fmLogin.ModalResult = mrOK then begin
      // showmessage('aaa');
         fmMain.Show;
       end
       else begin
      // showmessage('aaa11');
      // fmMain.Show;
        // LoginShow := True;
         fmLogin.ShowModal;

       end;
   end;

end;
---------------------------------------------------
<< login.pas (로그인 화면) - 모달 폼.. >>

procedure TfmLogin.BitBtn1Click(Sender: TObject);
begin
  if eUserID.Text = '' then begin
    Showmessage('사용자 아이디를 입력 하세요.');
    exit;
  end;
  if ePasswd.Text = '' then begin
    Showmessage('암호를 입력 하세요.');
    exit;
  end;

  with DModule.qrySQL do begin
    close;
    sql.clear;
    sql.add('Select passwd, rights');
    sql.add('from test_login' );
    sql.add('where userid =' + QuotedStr(eUserId.Text));
    open;
    if EOF then begin
      showmessage('사용자 아이디가 존재하지 않습니다.');
      eUserId.setFocus;
      eUserId.SelStart := 0;
      eUserId.SelLength := length(eUserId.text);
    end
    else begin
      if UpperCase(Fields[0].AsString) = UpperCase(ePasswd.Text) then   begin
        ModalResult := mrOK;
      end
      else begin
        Showmessage('암호가 틀립니다.' + #13#10 + '다시 확인 바랍니다.');
        ePasswd.setFocus;
        ePasswd.SelStart := 0;
        ePasswd.SelLength := length(ePasswd.text);
      end;
    end;
  end;
end;
--------------------------------------------------------------------
1  COMMENTS
  • Profile
    4EVERLUV 2002.04.04 01:52
    이렇게하시면 될듯...

    procedure TFrmPasswordDlg.FormClose(Sender: TObject;
      var Action: TCloseAction);
    begin
      Action := caFree;
    end;

    procedure TFrmPasswordDlg.FormDestroy(Sender: TObject);
    begin
      FrmPasswordDlg := nil;
    end;

    procedure TFrmPasswordDlg.FormCloseQuery(Sender: TObject;
      var CanClose: Boolean);
    begin
      if ModalResult = mrRetry then
        CanClose := False
      else CanClose := True;
    end;

    //로그인버튼
    procedure TFrmPasswordDlg.SPBT_OKClick(Sender: TObject);
    begin
    if gUserPass <> EDIT_PASSWORD.Text then
    begin
       MessageDlg('암호가 일치하지 않습니다', mtWarning, [mbOK], 0);
       EDIT_PASSWORD.SetFocus;
       ModalResult := mrRetry
    end else ModalResult := mrOK;
    end;