Q&A

  • 한자키가 disable되게하려면?
델파이로 한자폰트 출력프로그램을 만드는데

F9으로 폰트를 선택해서 처리하려고 합니다

그러다보니 키보드상의 한자키와 중복이 되는데

키보드상의 한자키를 눌렀을때 화면하단에

한자박스가 뜨지않게 하려면 어떻게 해야할까요

Keydown이벤트에서 처리해야 할것 같은데

고수의 도움 바랍니다

1  COMMENTS
  • Profile
    최용일 2000.03.16 04:49
    전역적인 핫키를 사용하십시오.

    근데 F9를 누르면 한자박스가 뜹니까???? 이상하군요. 저의 키보드는

    F9와 한자키가 절대 중복이 되지않는데... 저만그런가요...

    저의 키보드를 기준으로 하면 한자키의 스캔코드는 $19입니다.

    다음과 같이 전역핫키를 등록하여 사용하세요. 구창민님의 예제를 좀 고쳤습니다.



    unit Unit1;



    interface



    uses Windows, Messages, Classes, Controls, Dialogs, Graphics, Forms, ExtCtrls,

    StdCtrls, SysUtils;



    type

    TForm1 = class(TForm)

    procedure FormCreate(sender: Tobject);

    procedure FormDestroy(sender: Tobject);

    private

    // ATOM은 Windows유닛에 선언된 타입으로 16비트 부호없는 정수(Word)형입니다.

    FHotKey: ATOM; // 핫키에대한 인덱스를 저장하는 변수입니다.

    protected

    // 핫키를 처리하는 메세지 핸들러.

    procedure WMHotKey(var msg: TWMHotKey); message WM_HotKey;

    end;



    var

    Form1: TForm1;



    implementation



    {$R *.DFM}



    procedure TForm1.WMHotKey(var Msg: TWMHotKey);

    // 핫키가 눌려지면 이 메세지 핸들러가 실행됩니다.

    // TWMHotKey는 Messages유닛에 저장되어 있습니다.

    // TWMHotKey.HotKey값에 눌려진 핫키의 인덱스가 들어있습니다.

    begin

    ; // 여기에서 핫키가 눌릴때 필요한 처리를 하세요...

    ; // 그냥 Disable만 하실려면 아무런 코드도 넣지마세요...

    end;



    procedure TForm1.FormCreate(Sender: TObject);

    begin

    // GlobalAddAtom은 문자열에 대한 전역적인 인덱스(Atom)를 추가하는 함수입니다.

    // 전역적인 Atom 테이블은 윈도우즈가 관리합니다.

    FHotKey := GlobalAddAtom('MyHotKey');

    // RegisterHotKey는 윈도전체에 대한 핫키를 등록하는 API함수입니다.

    // 첫번째 파라매터는 이 핫키를 받을 윈도우 핸들을 넣어줍니다. 여기에선

    // TForm1의 핸들이 되겠죠...

    // 두번째 파라매터는 위에서 구한 ATOM값을 써주시교,

    // Alt, Ctrl, Shift키와 함께 쓰려면 세번째 파라매터에다 MOD_ALT, MOD_CONTROL,

    // MOD_SHIFT를 써주시고 그렇지 않으면 0을 넣어주시면 됩니다.

    // 네번째 파라매터는 핫키의 가상키값입니다. 가상키값은 Windows유닛에 보시면

    // 많은 키값들이 정의되어있습니다. '0' ~ '9', 'A' ~ 'Z'를 키값으로 쓰려면

    // 그냥 그 키에 대한 아스키값을 넣어주시면 됩니다.

    // 키보드상의 한자키에 대한 스캔코드를 넣어주시면 됩니다.

    // 제 키보드에서의 한자키의 스캔코드는 $19입니다.

    // F9를 핫키로 사용하실려면 마지막 파라매터에 F9의 가상키값인 vk_F9를 넣어주세요

    if RegisterHotKey(Handle, FHotKey, 0, $19) = False then

    // 핫키등록이 실패하면 에러 메세지를 출력합니다.

    ShowMessage('HotKey Registration Failed');

    end;



    procedure TForm1.FormDestroy(Sender: TObject);

    begin

    // 등록된 핫키를 제거합니다.

    UnRegisterHotKey(Handle, GlobalDeleteAtom(FHotKey));

    end;



    end.



    천승원 wrote:

    > 델파이로 한자폰트 출력프로그램을 만드는데

    > F9으로 폰트를 선택해서 처리하려고 합니다

    > 그러다보니 키보드상의 한자키와 중복이 되는데

    > 키보드상의 한자키를 눌렀을때 화면하단에

    > 한자박스가 뜨지않게 하려면 어떻게 해야할까요

    > Keydown이벤트에서 처리해야 할것 같은데

    > 고수의 도움 바랍니다