2010-06-29 11 views
6

Tengo un botón predeterminado en un formulario que tiene un control TSpinEdit en él. Cuando el control TSpinEdit tiene el foco y el usuario presiona la tecla Enter, en lugar de hacer clic en el botón predeterminado, el usuario escuchará un pitido del sistema porque la tecla Intro no es válida para TSpinEdit.Desactivar el pitido del sistema en TSpinEdit al presionar Entrar

Normalmente, para evitar el pitido, utilizaría el evento OnKeyPress y configuraría el Key := 0 para omitir la pulsación de la tecla. Entonces podría ejecutar el método de clic en el botón predeterminado. Sin embargo, en este caso, OnKeyPress no se activa porque la tecla Intro no es válida.

OnKeyDown se activa, pero cuando configuro Key := 0 allí, no detiene el pitido del sistema.

Entonces, ¿cómo desactivo el pitido del sistema al presionar la tecla Enter en un control TSpinEdit?

Estoy en Delphi 5, y no incluyeron la fuente de Spin.pas.

+5

¿Has mirado en " \ Borland \ Delphi5 \ Source \ Samples \"? –

+0

@Uwe, gracias! Eso es exactamente donde spin.pas es. Supongo que tuve una búsqueda de archivos fallida. –

Respuesta

6

Hay que descender de TSpinEdit y anular IsValidChar para evitar la llamada MessageBeep o KeyPress para evitar IsValidChar.

+0

Esto es lo que hice, por supuesto, ¡aunque gracias a Uwe por ayudarme a encontrar la fuente! –

+0

¿Te importa mostrar un ejemplo? :) –

7

prueba este

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

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

gracias por la gran información, pero aún quiero escuchar los pitidos de las otras claves no válidas, por lo que si espero hasta que el evento OnKeyDown se active antes de desactivar el pitido del sistema, no parece que impida el pitido. –

+0

Cool hack. Yo no sabía sobre esto. –

+0

Es trabajo para mí, gracias: D – Giovani

2

Conjunto TeclaDePresentaciónPreliminar = True en el formulario y agregue el código siguiente al evento de pulsación de tecla de la forma:

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; 
Cuestiones relacionadas