Delphi TEdit で Alt+Enter 押下時の音を消す

Delphi の Edit(TEdit) で Alt+Enter 押下時の音(Beep音)を消す

Enter, Ctrl+Enter, Shift+Enter あたりは、OnKeyDown や OnKeyPress などで処理可能ですが
  1. procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);  
  2. begin  
  3.     if (Key = VK_RETURN) and ( (Shift = [ssShift]) or (Shift = [ssCtrl]) ) then begin  
  4.         Key := 0;  
  5.         Shift := [];  
  6.     end;  
  7. end;  
  8.   
  9. procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);  
  10. begin  
  11.     if (Key = #13or (Key = #10then begin  
  12.         Key := #0;  
  13.     end;  
  14. end;  
Alt+Enter は押下を補足するものの書き換えは無視されてしまう
  1. procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);  
  2. begin  
  3.     if (Key = VK_RETURN) and (Shift = [ssAlt]) then begin  
  4.         Key := 0;  
  5.         Shift := [];  
  6.     end;  
  7. end;  
今回は TApplicationEvents を利用して、Alt+Enter を補足 + 無効化
フォームに TApplicationEvents(ApplicationEvents1)  コンポーネントを置いて、OnMessage で補足
※対象は TEdit(Edit1)
  1. procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);  
  2. begin  
  3.     if (Msg.message = WM_SYSKEYDOWN) then begin  
  4.         if (Msg.wParam = VK_RETURN) and (GetKeyState(VK_MENU) < 0then begin  
  5.             if (Msg.hwnd = Edit1.Handle) then begin  
  6.                 // Alt+Enter で行いたい処理  
  7.                 Handled := True;  
  8.             end;  
  9.         end;  
  10.     end;  
  11. end;  

参考文献

コメント