FormKeyDown이나 Up 이벤트에서 사용하는 VK_ 시리즈 있잖아요?
이게 일반 아스키번호랑 번호가 겹치는 군요.
예를들어 아래와 같은 소문자 z와 VK_F11이 눌러졌는지 체크하는 코드가 있다면요...
Form1.FormKeyDown(...)
begin
case Key of
'z': begin
...
end;
VK_F11: begin
...
end;
end;
end;
이렇게 코딩을하면 키가 중복된다는 에러가 납니다.
실제로 'z'와 VK_F11은 똑같은 122(십진수)라는 값을 가지고 있군요.
VK_... 시리즈는 윈도의 API에서 그대로 가져오는 값으로 알고 있는데,
이거 윈도 API가 잘못된 것인가요?
아니면 델파이의 버그인가요?
(이게 버그라면 아직까지 안잡혔을리가 없는데...)
만약에 꼭 소문자 z와 펑션키 F11 입력을 구분해서 받아야 하는 상황이라면 어떻게 해야만 할까요?
아시는 분의 메일 부탁합니다. (skywalke@netian.com)
그럼...
가상키에는 소문자는 없습니다. 소문자 'z'키가 눌린다면 Key값은 대문자 'Z'키와 같고
Shift파라매터가 ssShift값을 가집니다. 절대 중복이 않되죠..
^^ 항상 즐코하세요.
Form1.FormKeyDown(...)
begin
case Key of
'Z':
begin
if Shift in [ssShift] then
ShowMessage('소문자 z키가 눌려졌습니다.');
end;
VK_F11:
begin
ShowMessage('펑션키 F11이 눌려졌습니다.');
end;
end;
end;
>
사공엽 wrote:
> FormKeyDown이나 Up 이벤트에서 사용하는 VK_ 시리즈 있잖아요?
> 이게 일반 아스키번호랑 번호가 겹치는 군요.
> 예를들어 아래와 같은 소문자 z와 VK_F11이 눌러졌는지 체크하는 코드가 있다면요...
>
> Form1.FormKeyDown(...)
> begin
> case Key of
> 'z': begin
> ...
> end;
> VK_F11: begin
> ...
> end;
> end;
> end;
>
> 이렇게 코딩을하면 키가 중복된다는 에러가 납니다.
> 실제로 'z'와 VK_F11은 똑같은 122(십진수)라는 값을 가지고 있군요.
> VK_... 시리즈는 윈도의 API에서 그대로 가져오는 값으로 알고 있는데,
> 이거 윈도 API가 잘못된 것인가요?
> 아니면 델파이의 버그인가요?
> (이게 버그라면 아직까지 안잡혔을리가 없는데...)
>
> 만약에 꼭 소문자 z와 펑션키 F11 입력을 구분해서 받아야 하는 상황이라면 어떻게 해야만 할까요?
>
> 아시는 분의 메일 부탁합니다. (skywalke@netian.com)
> 그럼...