procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
if (ssCTRL in Shift) and (chr(Key) in ['S', 's']) then
ShowMessage('CTRL+S');
위와 같은 문장을 실행시켜서 CTRL+S키를 누르면 메세지가 뜨더군요.
제가 alt+s를 누를 때를 찾다가 위와 같은 문장을 찾아서 ssCTRL 대신에 ssALT를 넣어보았더니 되더군요. 놀랐습니다. 장님 문고리 잡은 격이었는데...
문제는 위의 문장이 전혀 알수가 없습니다. 아시는분은 해석좀 해주십시요.
그리고 그냥 써도 되는건지도 좀 의심쩍어서요. 그럼...이만..
여기서 Shift: TShiftState는..
키보드 메시지들을 받아서 기능키들(콘트롤,알트,시프트등)의 눌러진 상태를 알려주는 역할을 합니다. set형으로 되어있기때문에 여러키의 상태를 동시에 알수 있습니다.
작성하신 예제대로 ssCTRL in Shift 면 콘트롤 키가 눌러진 상태고요
ssALT in Shift는 알트키가 눌러진 상태입니다. 글구...
if not (ssCTRL in Shift) and (ssALT in Shift) then ... 이렇게 하면
콘트롤은 안누루고 알트만 눌러진 상태입니다. 만약에 기능중에
콘트롤 + S 와
알트 + S 와
콘트롤 + 알트 + S가 모두 다른 기능을 한다면 위같은 경우가 필요합니다.
그럼
평안하시길~
임형호 wrote:
> procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
> Shift: TShiftState);
>
> if (ssCTRL in Shift) and (chr(Key) in ['S', 's']) then
> ShowMessage('CTRL+S');
>
> 위와 같은 문장을 실행시켜서 CTRL+S키를 누르면 메세지가 뜨더군요.
> 제가 alt+s를 누를 때를 찾다가 위와 같은 문장을 찾아서 ssCTRL 대신에 ssALT를 넣어보았더니 되더군요. 놀랐습니다. 장님 문고리 잡은 격이었는데...
> 문제는 위의 문장이 전혀 알수가 없습니다. 아시는분은 해석좀 해주십시요.
> 그리고 그냥 써도 되는건지도 좀 의심쩍어서요. 그럼...이만..