Showing posts with label Delphi KeyPress KeyDown event handler. Show all posts
Showing posts with label Delphi KeyPress KeyDown event handler. Show all posts

Tuesday, April 1, 2014

How to make keyboard event handler in delphi component

Ctrl+V를 수신받을때 KeyPress 핸들러에 이상한 코드가 들어온다.
KeyPress를 받지 않을 방법은 없고 KeyPress안에서 Ctrl키가 눌려있는지를
판단해서 단축키에 대한 올바른 처리를 할 수 있다.



KeyPress handler raise after every KeyDown event that handled or not handled.
Example, User press Ctrl + V , KeyDown and KeyPress and KeyUp event called.


in class interface

    procedure KeyPress(var Key: Char); override;
    procedure KeyDown(var Key: Word; Shift: TShiftState); override;


in implementation

procedure TClassXXX.KeyDown(var Key: Word; Shift: TShiftState);
begin
   inherited;

    if Key = VK_LEFT then
    begin
       .....
    end;
end;

procedure TClassXXX.KeyPress(var Key: Char);
var
    ShiftState: TShiftState;
    KeyState: TKeyboardState;
begin
    inherited;

    GetKeyboardState(KeyState);
    ShiftState := KeyboardStateToShiftState(KeyState);

    if not ( ssCtrl In ShiftState ) then
    begin
          // key press without control key
    end;
end;