Q&A

  • 이런 컴퍼넌트 있을까요??
안녕하세요... 또 질문 하는 군요...^^

이런 컨퍼넌트가 있는지 궁금해서요...

텍스트1, 텍스트2, 텍스트3.... 이렇게 n개의 텍스트가 유닛에 올려져 있습니다

엔터 치게 되면 지정된 곳으로 이동을 해야 합니다

텍스트1에서 데이타를 입력하고 엔터를 치면 텍스트2로 커서가 이동해야

합니다.. 이럴경우 키프레스 이벤트에 이것저것 명령어를 내려 줘야 하는데..

이걸 한 컴퍼넌트에서 정의를 해주고... 그 정의대로 엔터를 치면 넘어가게

하고 싶어요... 이런 컴퍼넌트가 있나요??

제가 쓰는 것은 델파이 6입니다...

넘 소스가 길어지니... 힘들군요... 소스가 길어진다고 좀 줄이라고 하는데..

쩝...

부탁 드립니다...

그럼.~~
2  COMMENTS
  • Profile
    신강섭 2002.11.07 23:48
    각 컴포넌트의 OnKeyPress()나 OnKeyDown()에다가 코딩을 하면
    당근 코딩이 길어지죠...
    해당 컴포넌트가 올려져있는 폼의 프로퍼티를 한번 보세요
    KeyPreview가 있을꺼에요... 그거를 일단 True로 설정을 하세요
    그런다음 폼의 OnKeyPress()나 OnKeyDown()에다가 코딩을 하는거죠
    예를 들면
    procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
           if (Key = VK_RETURN) then // 키가 엔터일경우
           begin
                if (ActiveControl is TEdit) then // 엑티브 된 컨트롤이 에디트일경우
                    SelectNext(ActiveControl as TWinControl, true, true);
                    // 다음 컨트롤로 포커스가 이동한다.
           end;
    end;

    주의 하실점은 TabOrder의 순서데로 포커스가 이동합니다.
    잘 응용하세요
  • Profile
    소울해커 2002.11.07 10:26

    그런 컴포넌트는 없습니다.
    그냥 코딩으로 써주셔도 간단히 해결됩니다.

    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
    If Key = #13 Then
    SelectNext(Sender as tWinControl, True, True );
    end;

    위와 같이 써주신후 나머지 Edit 컴포넌트를 전부 선택해서 OnKeyPress 이벤트에
    코드가 들어가 있는 Edit1의 이벤트에 연결 시켜주시면 간단하게 해결됩니다.

    OnKeyPress 이벤트에서 처리하기 싫으시면 OnKeyDown 에서 처리해도 똑같습니다.

    procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
    Shift: TShiftState);
    begin
    If Key = VK_RETURN Then
    SelectNext(Sender as tWinControl, True, True );
    end;

    역시나 연결은 한 몫에 지정을 해주시면 됩니다.

    코드로 일일이 쓰기보다는 이벤트를 받는 컴포넌트에
    이벤트가 일어나도록 잡아주고 나머지는 연결만 시켜주시면됩니다.


    위의 SelectNext(Sender as tWinControl, True, True ); 말고도
    Perform(WM_NEXTDLGCTL, 0, 0); 로 코딩하셔도 결과는 동일합니다.

    만일 거꾸로 포커스를 이동하실려면(Shift + Tab을 눌렀을때와 같이...)
    SelectNext(Sender as tWinControl, False, True ); 로 코딩하시거나
    Perform(WM_NEXTDLGCTL, 1, 0); 로 코딩하시면 될껍니다.

    주로 쓰는게 SelectNext 라서 Perform 쪽은 확실치가 않지만 아마도 맞을 겁니다.
    (아니면 어쩌나...)