Q&A

  • 해봤는데.....
오늘 오전에 질문해서

첫번째 질문에 답해주신대로

if key = #27 then activecontrol := edt_sin_cdno

해 봤는데 안되어서 이렇게 ....

선배님들 좀 도와 주세요...

두번째 질문도 꼭.......





1. 첫번째 질문



패널사이로 tab키 대신에 enter키로 포커스 이동시킬수 있는지요..잘 안되더라구요..

정확히 말하면

두개의 패널이 있는데

한쪽 패널에 있는 editBox-->Button 으로 포커스이동한다음 방향키로 다른 패널에 있는 editBox 또는 Button 으로 포커스를 이동하고 싶은데..



if key = #27 then begin

groupbox2.TabOrder:=0;

edt_sin_cdno.SetFocus;

end;



이렇게 해줘도 안되더라구요...그런데

패널을 지우고 하니까 잘 되던데... 으 괴로운것....



2.두번째 질문



SQL문을 DB로 보낸다음 메모나 에디트 박스에서 입력한 DATA를 DB_Grid에 뿌리는데 DB_Grid에 ♪같은 마크가 같이 나타나는데 이걸 안나타 나게 할수는 없는지요..

(물론 select 후에는 안나타나고요...) 으 미치것는 것...



자비로운 이해심으로 가르쳐 주십시요....(*^^*)



사오정 이경원 드림







1  COMMENTS
  • Profile
    최용일 2000.05.11 07:16
    안녕하세요. 최용일입니다.



    Enter키로 포커스이동을 할 수 있습니다. 근데 #27은 Esc키인데요...



    Enter, Tab, Esc, 방향키와 같은 다이얼로그키들은 대부분 컨트롤에서 키보드이벤트



    를 잡을 수가 없는 경우가 많습니다. 특히 버튼같은 경우는 Enter키를 잡아챌수 없어



    Enter키로 포커스전환을 하는데 상당히 애를 먹이죠. 키이벤트에서 이러한 키를 볼수



    있도록하려면 이러한 키를 처리할 수 있도록 윈도우프로시져를 새로 정의해 주어야



    합니다. 컴포넌트를 새로 만드는 것이 가장 편하긴 하지만 코딩상으로도 바꿀수 있습니



    다. 아래와 같이 시스템다이얼로그키 메세지(WM_GETDLGCODE)에 반응하는 윈도우 프로시



    져를 하나 만들고 키이벤트를 볼수 있도록 해주시면 됩니다. 그리고 컨트롤의 윈도우



    프로시져를 새로 만든것으로 설정하시면 됩니다.



    도움말에서 WM_GETDLGCODE를 찾아보시면 상세한 설명을 보실 수 있습니다.



    type

    TForm1 = class(TForm)

    ...

    Button1: TButton; // 판넬안에 있는 버튼이라고 가정하였습니다.

    private

    ...

    FWndMethod: TWndMethod;

    procedure NewWindowProc(var Message: TMessage);

    ...

    end;



    procedure TForm1.FormCreate(Sender: TObject);

    begin

    FWndMethod := Button1.WindowProc;

    Button1.WindowProc := NewWindowProc;

    end;



    procedure TForm1.NewWindowProc(var Message: TMessage);

    begin

    if Message.Msg = WM_GETDLGCODE then

    Message.Result := DLGC_WANTALLKEYS

    else

    FWndMethod(Message);

    end;



    // Button1에서 엔터키를 누르면 에디트(edt_sin_cdno)로 포커스가 이동합니다.

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

    Shift: TShiftState);

    begin

    if Key = vk_Return then

    edt_sin_cdno.SetFocus;

    end;



    ^^ 항상 즐코하세요.



    이경원 wrote:

    > 오늘 오전에 질문해서

    > 첫번째 질문에 답해주신대로

    > if key = #27 then activecontrol := edt_sin_cdno

    > 해 봤는데 안되어서 이렇게 ....

    > 선배님들 좀 도와 주세요...

    > 두번째 질문도 꼭.......

    >

    >

    > 1. 첫번째 질문

    >

    > 패널사이로 tab키 대신에 enter키로 포커스 이동시킬수 있는지요..잘 안되더라구요..

    > 정확히 말하면

    > 두개의 패널이 있는데

    > 한쪽 패널에 있는 editBox-->Button 으로 포커스이동한다음 방향키로 다른 패널에 있는 editBox 또는 Button 으로 포커스를 이동하고 싶은데..

    >

    > if key = #27 then begin

    > groupbox2.TabOrder:=0;

    > edt_sin_cdno.SetFocus;

    > end;

    >

    > 이렇게 해줘도 안되더라구요...그런데

    > 패널을 지우고 하니까 잘 되던데... 으 괴로운것....

    >

    > 2.두번째 질문

    >

    > SQL문을 DB로 보낸다음 메모나 에디트 박스에서 입력한 DATA를 DB_Grid에 뿌리는데 DB_Grid에 ♪같은 마크가 같이 나타나는데 이걸 안나타 나게 할수는 없는지요..

    > (물론 select 후에는 안나타나고요...) 으 미치것는 것...

    >

    > 자비로운 이해심으로 가르쳐 주십시요....(*^^*)

    >

    > 사오정 이경원 드림

    >

    >

    >