Q&A

  • 콤보박스에서 타자로 입력한후에 Change이벤트 발생시키는 방법은?
음..아이템을 선택할때요..
마우스로 선택하지 않고 타자로 입력한 후..
엔터키를 치면 체인지 이벤트가 발생하지를 않아서 무한루프를 돌거든요..
그냥 엔터키를 쳐도 체인지 이벤트를 발생시킬수 있는 방법이 뭐가 있을까요?
설명해주기로는 메세지를 훔치면 된다는데 이게 무슨 소리인지..-_-;;
여러 방법이 있는데..
SendMessage를 사용하거나 억지로  Change Event를 발생시키라는데..
전 무슨말인지 모르겠거든요..
어떻게 사용해야하는지 좀 설명해 주세요..
너무 설명이 광범위하면 소스 올려드릴께요..
제발 답변 부탁드려요..
저 이거 못하면 죽어요..(T0T)

8  COMMENTS
  • Profile
    열심히 2002.11.19 03:34
    폼에서 발생하는 키를 폼Key 어쩌구 이벤트에서 쓰실라면 KeyPreview 이라는 프로퍼티가 있거든요? 그걸 True로 해주셔야 하구요.. 그럼 폼에 어딜 가있더라도 폼Key 이벤트로 들어가져염..

  • Profile
    최은석 2002.11.16 01:08
    이상하네여.....
    콤보박스에서 키보드로 입력을하면 체인지 이벤트가 발생하는데....

    아래코드처럼 해보세여

    procedure TForm1.ComboBox1KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
       if key = vk_return then
          ComboBox1Change(Sender);
    end;




  • Profile
    샤리 2002.11.16 01:59
    그래도 안돼요...(T^T)

  • Profile
    최은석 2002.11.16 02:21
    소스중에 아래부분에서 문제가 있는거 같네요..
    코딩상에 문제는 아니고...
    컨트롤간 이동은 탭키로 하시는게 좋을듯하네여
    아래처럼 하시면...메인폼에서 메세지를 가로채가 버리져..
    아무튼 FormKeyPress 이벤트는 삭제하시고....
    procedure TFrmBuying.FormKeyPress(Sender: TObject; var Key: Char);
    begin
       if key=#13 then
        begin
       SelectNext(ActiveControl as TWinControl, true, true);
         Key := #0 ;
        end;
    end;

    요넘을요....
    아래처럼...수정하시고
    procedure TFrmBuying.FormKeyUp(Sender: TObject; var Key: Char);
    begin
        if key=VK_TAB then
        begin
         SelectNext(ActiveControl as TWinControl, true, true);
         Key := #0 ;
        end;
    end;

    procedure TForm1.ComboBox1KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
       if key = vk_return then
          ComboBox1Change(Sender);
    end;


    이렇게 하시면 될겁니다....

  • Profile
    샤리 2002.11.16 20:43
    감사합니가..
    에러는 안나네요..
    근데..엔터쳐도 체인지가 안되네요..ㅠㅠ
    엔터 두번치면 되는데 한번치면 안되요..
    이걸어떻해야 하는지..
    그리고 답변보고 고쳤는데요..
    폼의 keyup 이벤트요..
    이렇게 하니깐..
    procedure TFrmBuying.FormKeyUp(Sender: TObject; var Key: Char);
    begin
        if key=#13 then
        begin
         SelectNext(ActiveControl as TWinControl, true, true);
         Key := #0 ;
        end;

    end;

    Propert ans method FormKeyUp are not
    이라고 경고나거든요..
    그래서 안되는건지..
    아시는분 알려주세요..
    저좀 살려줘요~~~∏o∏
  • Profile
    머슴 2002.11.16 21:26
      
      제 생각에는 KeyUp으로 하면 두번을 쳐야 할것 같습니다..

      이벤트를 Keydown으로 바꾸어 보시지요...



  • Profile
    샤리 2002.11.16 03:17

    하라는데로 했거든요~
    이부분에서 에러가 나네요..
    Incompatible types 라고요..
    타입이 안맞는다는거같은데..
    음..어떻해야 하죠?



  • Profile
    머슴 2002.11.16 18:15

    FormKeyUp(Sender: TObject; var Key: Char); 인경우에는   아스키값을 사용해야 합니다.(Key: Char일때)

         if key = #13 then 이고


    ComboBox1KeyUp(Sender: TObject; var Key: Word;  Shift: TShiftState);
    인경우에는  (Key: Word 이 경우)

        if key = VK_RETURN then

    을 사용해야합니다..

    님께서  Incompatible types 에러가 나신것은 Char와 Word의 차이때문입니다.