9

フォーム上に TSpinEdit コントロールを持つ既定のボタンがあります。TSpinEdit コントロールにフォーカスがあり、ユーザーが Enter キーを押すと、既定のボタンがクリックされるのではなく、TSpinEdit に対して Enter キーが無効であるため、システム ビープ音が聞こえるだけです。

通常、ビープ音を回避するには、OnKeyPress イベントを使用しKey := 0、キーの押下をスキップするように設定します。次に、デフォルト ボタンでクリック メソッドを実行します。ただし、この場合、Enter キーが有効でないため、OnKeyPress は起動しません。

OnKeyDown が起動しますが、Key := 0そこに設定すると、システムのビープ音が止まりません。

では、TSpinEdit コントロールで Enter キーを押したときのシステム ビープ音を無効にするにはどうすればよいでしょうか。

私は Delphi 5 を使用していますが、Spin.pas のソースが含まれていませんでした。

4

3 に答える 3

7

MessageBeep呼び出しを回避するため、またはを回避するために、から降りてTSpinEditオーバーライドする必要があります。IsValidCharKeyPressIsValidChar

于 2010-06-29T17:08:57.020 に答える
7

これを試してみてください

//Disable system beep
SystemParametersInfo(SPI_SETBEEP, 0, nil, SPIF_SENDWININICHANGE); 

//Enable system beep
SystemParametersInfo(SPI_SETBEEP, 1, nil, SPIF_SENDWININICHANGE); 
于 2010-06-29T14:43:58.147 に答える
5

フォームで KeyPreview = True を設定し、次のコードをフォームの keypress イベントに追加します。

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if SpinEdit1.Focused and (Key = #13) then
  begin
    Key := #0; // Cancels the keypress
    Perform(CM_DIALOGKEY, VK_RETURN, 0); // Invokes the default button
  end;
end;
于 2010-06-30T07:39:29.290 に答える