Q&A

  • 어려운것 같지 않은 소스 분석 좀 부탁 드려요..
안녕하십니까 !!!

다음 소스를 분석 좀 해주세요..



procedure TOKRightDlg.IDEdtKeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

begin

if (Shift = []) then

if (Key = VK_RETURN) or (Key = VK_DOWN) or (Key = VK_RIGHT) then begin

SelectNext(Sender as TWinControl, True, True);

Key := 0;

end;



if (Key = VK_UP) or (Key = VK_LEFT) then begin

SelectNext(Sender as TWinControl, False, True);

Key := 0;

end;

end;



procedure TOKRightDlg.OKBtnClick(Sender: TObject);

begin

with DM.UserQuery do begin

Close;

SQL.Clear;

SQL.Add(' SELECT * FROM users WHERE ID = :P_ID' );

SQL.Add(' AND PASSWD = :P_PASSWD' );

ParamByName('P_ID').AsString := IDEdt.Text;

ParamByName('P_PASSWD').AsString := PasswdEdt.Text;

Open;

if not EOF then PasswdCHK := True

else begin

PasswdCHK := False;

ShowMessage('님은 사용권한이 없습니다.');

end;

end;



end;



제가 구상하고 있는 것은 사용자가 에디터 컴포넌트에 ID와 PASSWD를 입력하고 확인

버튼을 누르면 다음 사항으로 진행되는 것입니다.

문제는 위의 IDEdt 컴포넌트에 Enter 키(VK_Return)를 누르면 자꾸 OKBtnClick에 있는

내용이 실행되어 버려요.. 물론 IDEdt 컴포넌트 다음에는 PasswdEdt 컴포넌트에 Focus

가 떨어지도록 TabOrder 값도 다 맞추어 졌구요..

사실은 OKBtnClick은 확인 버튼을 눌려야만 실행이 되어야

하는데 말입니다. 무엇때문에 이런 현상이 발생되는건지 도사님의 조언 부탁드립니다.

만약 전체적인 소스가 필요하시다면 다시 말씀 주십시요..



3  COMMENTS
  • Profile
    박정일 1999.10.30 22:59
    hopeship wrote:

    > 안녕하십니까 !!!

    > 다음 소스를 분석 좀 해주세요..

    >

    > procedure TOKRightDlg.IDEdtKeyDown(Sender: TObject; var Key: Word;

    > Shift: TShiftState);

    > begin

    > if (Shift = []) then

    > if (Key = VK_RETURN) or (Key = VK_DOWN) or (Key = VK_RIGHT) then begin

    > SelectNext(Sender as TWinControl, True, True);

    > Key := 0;

    > end;

    >

    > if (Key = VK_UP) or (Key = VK_LEFT) then begin

    > SelectNext(Sender as TWinControl, False, True);

    > Key := 0;

    > end;

    > end;

    >

    > procedure TOKRightDlg.OKBtnClick(Sender: TObject);

    > begin

    > with DM.UserQuery do begin

    > Close;

    > SQL.Clear;

    > SQL.Add(' SELECT * FROM users WHERE ID = :P_ID' );

    > SQL.Add(' AND PASSWD = :P_PASSWD' );

    > ParamByName('P_ID').AsString := IDEdt.Text;

    > ParamByName('P_PASSWD').AsString := PasswdEdt.Text;

    > Open;

    > if not EOF then PasswdCHK := True

    > else begin

    > PasswdCHK := False;

    > ShowMessage('님은 사용권한이 없습니다.');

    > end;

    > end;

    >

    > end;

    >

    > 제가 구상하고 있는 것은 사용자가 에디터 컴포넌트에 ID와 PASSWD를 입력하고 확인

    > 버튼을 누르면 다음 사항으로 진행되는 것입니다.

    > 문제는 위의 IDEdt 컴포넌트에 Enter 키(VK_Return)를 누르면 자꾸 OKBtnClick에 있는

    > 내용이 실행되어 버려요.. 물론 IDEdt 컴포넌트 다음에는 PasswdEdt 컴포넌트에 Focus

    > 가 떨어지도록 TabOrder 값도 다 맞추어 졌구요..

    > 사실은 OKBtnClick은 확인 버튼을 눌려야만 실행이 되어야

    > 하는데 말입니다. 무엇때문에 이런 현상이 발생되는건지 도사님의 조언 부탁드립니다.

    > 만약 전체적인 소스가 필요하시다면 다시 말씀 주십시요..

    > ===============================================================

    > 부산사는 사람입니다.

    OK Button의 속성중 Default 가 True로 되어 있는 것 같네요. False로 바꾸어 보세요.

    > B.RGDS



  • Profile
    mute 1999.10.27 08:34
    hopeship wrote:

    > 안녕하십니까 !!!

    > 다음 소스를 분석 좀 해주세요..

    >

    > procedure TOKRightDlg.IDEdtKeyDown(Sender: TObject; var Key: Word;

    > Shift: TShiftState);

    > begin

    > if (Shift = []) then

    > if (Key = VK_RETURN) or (Key = VK_DOWN) or (Key = VK_RIGHT) then begin

    > SelectNext(Sender as TWinControl, True, True);

    > Key := 0;

    > end;

    >

    > if (Key = VK_UP) or (Key = VK_LEFT) then begin

    > SelectNext(Sender as TWinControl, False, True);

    > Key := 0;

    > end;

    > end;

    >

    > procedure TOKRightDlg.OKBtnClick(Sender: TObject);

    > begin

    > with DM.UserQuery do begin

    > Close;

    > SQL.Clear;

    > SQL.Add(' SELECT * FROM users WHERE ID = :P_ID' );

    > SQL.Add(' AND PASSWD = :P_PASSWD' );

    > ParamByName('P_ID').AsString := IDEdt.Text;

    > ParamByName('P_PASSWD').AsString := PasswdEdt.Text;

    > Open;

    > if not EOF then PasswdCHK := True

    > else begin

    > PasswdCHK := False;

    > ShowMessage('님은 사용권한이 없습니다.');

    > end;

    > end;

    >

    > end;

    >

    > 제가 구상하고 있는 것은 사용자가 에디터 컴포넌트에 ID와 PASSWD를 입력하고 확인

    > 버튼을 누르면 다음 사항으로 진행되는 것입니다.

    > 문제는 위의 IDEdt 컴포넌트에 Enter 키(VK_Return)를 누르면 자꾸 OKBtnClick에 있는

    > 내용이 실행되어 버려요.. 물론 IDEdt 컴포넌트 다음에는 PasswdEdt 컴포넌트에 Focus

    > 가 떨어지도록 TabOrder 값도 다 맞추어 졌구요..

    > 사실은 OKBtnClick은 확인 버튼을 눌려야만 실행이 되어야

    > 하는데 말입니다. 무엇때문에 이런 현상이 발생되는건지 도사님의 조언 부탁드립니다.

    > 만약 전체적인 소스가 필요하시다면 다시 말씀 주십시요..

    >



    혹시 버튼이 TBitBtn 이 아닌지지요....



    그렇다면 속성중에 Kind 를 bkOK로 바꾸셨나 확인을 하심이.....





  • Profile
    OS 1999.10.27 01:51
    hopeship wrote:

    > 안녕하십니까 !!!

    > 다음 소스를 분석 좀 해주세요..

    >

    > procedure TOKRightDlg.IDEdtKeyDown(Sender: TObject; var Key: Word;

    > Shift: TShiftState);

    > begin

    > if (Shift = []) then

    > if (Key = VK_RETURN) or (Key = VK_DOWN) or (Key = VK_RIGHT) then begin

    > SelectNext(Sender as TWinControl, True, True);

    > Key := 0;

    > end;

    >

    > if (Key = VK_UP) or (Key = VK_LEFT) then begin

    > SelectNext(Sender as TWinControl, False, True);

    > Key := 0;

    > end;

    > end;

    >

    > procedure TOKRightDlg.OKBtnClick(Sender: TObject);

    > begin

    > with DM.UserQuery do begin

    > Close;

    > SQL.Clear;

    > SQL.Add(' SELECT * FROM users WHERE ID = :P_ID' );

    > SQL.Add(' AND PASSWD = :P_PASSWD' );

    > ParamByName('P_ID').AsString := IDEdt.Text;

    > ParamByName('P_PASSWD').AsString := PasswdEdt.Text;

    > Open;

    > if not EOF then PasswdCHK := True

    > else begin

    > PasswdCHK := False;

    > ShowMessage('님은 사용권한이 없습니다.');

    > end;

    > end;

    >

    > end;

    >

    > 제가 구상하고 있는 것은 사용자가 에디터 컴포넌트에 ID와 PASSWD를 입력하고 확인

    > 버튼을 누르면 다음 사항으로 진행되는 것입니다.

    > 문제는 위의 IDEdt 컴포넌트에 Enter 키(VK_Return)를 누르면 자꾸 OKBtnClick에 있는

    > 내용이 실행되어 버려요.. 물론 IDEdt 컴포넌트 다음에는 PasswdEdt 컴포넌트에 Focus

    > 가 떨어지도록 TabOrder 값도 다 맞추어 졌구요..

    > 사실은 OKBtnClick은 확인 버튼을 눌려야만 실행이 되어야

    > 하는데 말입니다. 무엇때문에 이런 현상이 발생되는건지 도사님의 조언 부탁드립니다.

    > 만약 전체적인 소스가 필요하시다면 다시 말씀 주십시요..

    >



    님이 말씀하시길

    >문제는 위의 IDEdt 컴포넌트에 Enter 키(VK_Return)를 누르면 자꾸 OKBtnClick에 있는

    >내용이 실행되어 버려요.. 물론 IDEdt 컴포넌트 다음에는 PasswdEdt 컴포넌트에 Focus

    >가 떨어지도록 TabOrder 값도 다 맞추어 졌구요..



    혹 판넬이 있어서 그런 거 아닌가 .. 모르겠네요..

    에딧박스와 버튼이 판넬 위에 있다면 판넬을 없새시고 TabOrder를 다시한번

    설정해 보세요...

    아님

    SelectNext 문구를 쓰시지 마시고

    > SelectNext(Sender as TWinControl, True, True);

    PasswdEdit.SetFocus;

    로 바꾸시던지요....