2010-06-29 7 views
6

У меня есть кнопка по умолчанию в форме, на которой есть элемент управления TSpinEdit. Когда элемент управления TSpinEdit имеет фокус, и пользователь нажимает клавишу Enter, вместо нажатия кнопки по умолчанию пользователь просто слышит системный звуковой сигнал, потому что ключ ввода недействителен для TSpinEdit.Отключить системный звуковой сигнал на TSpinEdit при нажатии Enter

Обычно, чтобы избежать звукового сигнала, я использовал бы событие OnKeyPress и установил Key := 0, чтобы пропустить нажатие клавиши. Затем я мог бы выполнить метод click по умолчанию. Однако в этом случае OnKeyPress не запускается, так как клавиша Enter недействительна.

OnKeyDown пожары, но когда я установил Key := 0, он не останавливает звуковой сигнал системы.

Итак, как отключить системный звуковой сигнал при нажатии клавиши Enter в элементе управления TSpinEdit?

Я нахожусь на Delphi 5, и они не включили источник Spin.pas.

+5

Вы смотрите в " \ Borland \ Delphi5 \ Source \ Samples \"? –

+0

@Uwe, спасибо! Именно в этом случае spin.pas. Наверное, у меня был неудачный поиск файлов. –

ответ

6

Вы должны спуститься с TSpinEdit и переопределить IsValidChar, чтобы избежать MessageBeep вызова или KeyPress, чтобы избежать IsValidChar.

+0

Это то, что я сделал, конечно, хотя благодаря Уве за то, что помог мне найти источник! –

+0

Не против показать пример? :) –

7

Попробуйте один

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

//Enable system beep 
SystemParametersInfo(SPI_SETBEEP, 1, nil, SPIF_SENDWININICHANGE); 
+0

спасибо за отличную информацию, но я все еще хочу услышать звуковые сигналы для других недопустимых ключей, поэтому, если я жду, пока событие OnKeyDown не загорится, прежде чем отключить звуковой сигнал системы, он, похоже, не предотвратит звуковой сигнал. –

+0

Прохладный взломать. Я не знал об этом. –

+0

Работа для меня, спасибо: D – Giovani

2

Set KeyPreview = True на форме и добавьте следующий код в событие нажатия клавиши форме в:

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;