2014年11月25日 星期二

Delphi 檢查是否按下 shift 或其他按鍵

Delphi 檢查是否按下 Shift 或其他按鍵
一般可在 Form 的 FormKeyDown 事件(even)下,透過 Key 來判斷

EX:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (key = VK_Shift) then ...
// ----- or ----
  case key of
    VK_ESCAPE:
      begin
        ...
      end;
    VK_SHIFT:
      begin
        ...
      end;
  end;
end;

若是在其他的 procedure, function 裡頭,要檢查是否按下 shift 時,該怎麼作呢?

可使用
  GetKeyState(nVirtKey: Integer): Smallint;
  GetAsyncKeyState(vKey: Integer): Smallint;
來判斷指定的按鍵是否有按下

EX:
if GetAsyncKeyState(VK_SHIFT) <> 0 then 
    ShowMessage('有按下 Shift 鍵')
  else 
    ShowMessage('沒有按');

註記:
  其中 GetKeyState 是以 Toggle 的形式來判斷,按一次會顯示為 1,再按一次才會回復為 0;
  而 GetAsyncKeyState則是以當下是否按著來判斷。


沒有留言:

張貼留言