2010-06-29 21 views
6

Ho un pulsante predefinito su un modulo che ha un controllo TSpinEdit su di esso. Quando il controllo TSpinEdit ha lo stato attivo e l'utente preme il tasto Invio, invece del pulsante predefinito che viene cliccato, l'utente sente solo un segnale acustico di sistema perché il tasto Invio non è valido per un TSpinEdit.Disabilita il segnale acustico di sistema su TSpinEdit quando si preme Invio

Normalmente, per evitare il segnale acustico, vorrei utilizzare l'evento OnKeyPress e impostare Key := 0 per saltare la pressione del tasto. Potrei quindi eseguire il metodo click sul pulsante predefinito. Tuttavia, in questo caso, OnKeyPress non si attiva perché il tasto Invio non è valido.

OnKeyDown si attiva, ma quando si imposta Key := 0 lì, non si ferma il segnale acustico di sistema.

Quindi, come disattivare il segnale acustico di sistema quando si preme il tasto Invio su un controllo TSpinEdit?

Sono su Delphi 5 e non hanno incluso la fonte per Spin.pas.

+5

Hai guardato in " \ Borland \ Delphi5 \ Source \ Samples \"? –

+0

@Uwe, grazie! Questo è esattamente dove è spin.pas. Immagino di aver fallito una ricerca di file. –

risposta

6

Dovete scendere dal TSpinEdit e ignorare IsValidChar per evitare la chiamata MessageBeep o KeyPress per evitare IsValidChar.

+0

Questo è quello che ho fatto, ovviamente, anche se grazie a Uwe per avermi aiutato a trovare la fonte! –

+0

Ti dispiace mostrare un esempio? :) –

7

provare questo

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

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

Grazie per le ottime informazioni, ma voglio ancora sentire i segnali acustici per le altre chiavi non valide, quindi se aspetto che l'evento OnKeyDown si accenda prima di disattivare il segnale acustico di sistema, non sembra impedire il segnale acustico. –

+0

Cool hack. Non lo sapevo. –

+0

È lavoro per me, grazie: D – Giovani

2

Set KeyPreview = True sul modulo e aggiungere il seguente codice all'evento pressione di un tasto del form:

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; 
Problemi correlati