Q&A

  • DBGRID에서 엔터를 이용하여 옆 셀로 이동하기
DBGRID에서 탭을 이용하여 옆 셀로 이동하는데 엔터로 이동하는 방법은 없나요.



또 옆으로 이동한 후 한글을 입력하면 깨짐 현상이 발생하는데 이를 막을 수 있는 방법은 없나요?

3  COMMENTS
  • Profile
    펑크 2000.05.19 03:51


    procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;

    Shift: TShiftState);

    begin

    if Key = 13 then begin

    Key := 0;

    Perform(WM_NEXTDLGCTL, 0, 0);

    end ;

    end ;



    보시면 간단하죠?



  • Profile
    초보 2000.05.19 04:42
    펑크 wrote:

    >

    > procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;

    > Shift: TShiftState);

    > begin

    > if Key = 13 then begin

    > Key := 0;

    > Perform(WM_NEXTDLGCTL, 0, 0);

    > end ;

    > end ;

    >

    > 보시면 간단하죠?

    >



    죄송합니다.

    이상하게 안되네요.



  • Profile
    조규춘 2000.05.19 14:00
    초보 wrote:

    > 펑크 wrote:

    > >

    > > procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;

    > > Shift: TShiftState);

    > > begin

    > > if Key = 13 then begin

    > > Key := 0;

    > > Perform(WM_NEXTDLGCTL, 0, 0);

    > > end ;

    > > end ;

    > >

    > > 보시면 간단하죠?

    > >

    >

    > 죄송합니다.

    > 이상하게 안되네요.

    >



    우선 해야 할것이....





    먼저..form의 속성중에서 keypreview를 true로 설정을 하셔야 합니다.



    procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);

    begin

    if Key=#13 then

    begin {엔터키가 눌렸다면}

    Key:=#0;

    if (ActiveControl is TDBGrid) then {DBGrid에서 Enter키가 눌린 것이라면}

    TDBGrid(ActiveControl).Perform(WM_KeyDown, VK_TAB, 0)

    else

    Perform(WM_NEXTDlgCtl, 0, 0);

    end;

    end;



    위의

    > > Perform(WM_NEXTDLGCTL, 0, 0);

    가 아니고 keypress에서 아래와 같이 해야지요!

    > > Perform(WM_NEXTDLGCTL, vk_tab, 0);

    로 해주어야 합니다.