2010-06-29 15 views
6

Mam domyślny przycisk na formularzu, który ma na sobie kontrolkę TSpinEdit. Kiedy kontrolka TSpinEdit ma fokus i użytkownik naciśnie klawisz Enter, zamiast domyślnego kliknięcia przycisku użytkownik usłyszy sygnał dźwiękowy, ponieważ klawisz Enter jest niepoprawny dla TSpinEdit.Wyłącz dźwięk systemu na TSpinEdit po naciśnięciu klawisza Enter

Normalnie, aby uniknąć sygnału dźwiękowego, użyłbym zdarzenia OnKeyPress i ustawię Key := 0, aby pominąć naciśnięcie klawisza. Mógłbym wtedy wykonać metodę kliknięcia na domyślnym przycisku. Jednak w tym przypadku funkcja OnKeyPress nie uruchamia się, ponieważ klawisz Enter jest niepoprawny.

Uruchamia OnKeyDown, ale kiedy ustawię tam Key := 0, nie zatrzymuje to dźwięku systemu.

Jak wyłączyć dźwięk systemu po naciśnięciu klawisza Enter na formancie TSpinEdit?

Jestem na Delphi 5, a oni nie uwzględnili źródła dla Spin.pas.

+5

Czy patrzysz w " \ Borland \ Delphi5 \ Source \ Samples \"? –

+0

@Uwe, dzięki! Dokładnie tam, gdzie jest spin.pas. Chyba nie udało mi się przeszukać pliku. –

Odpowiedz

6

Trzeba zejść z TSpinEdit i zastąpić IsValidChar aby uniknąć wywołania MessageBeep lub KeyPress uniknąć IsValidChar.

+0

Tak właśnie zrobiłem, ale dzięki Uwe za pomoc w znalezieniu źródła! –

+0

Czy chcesz pokazać przykład? :) –

7

Spróbuj ten

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

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

dziękuję za świetne informacje, ale nadal chcę słyszeć sygnały dźwiękowe innych nieprawidłowych kluczy, więc jeśli poczekam, aż zdarzenie OnKeyDown zostanie uruchomione, zanim wyłączysz dźwięk systemowy, nie wydaje się, że przeszkadza mu sygnał dźwiękowy. –

+0

Cool hack. Nie wiedziałem o tym. –

+0

To działa dla mnie, dzięki: D – Giovani

2

Set KeyPreview = True na formularzu i dodaj następujący kod do wydarzenia przyciśnięcie tego formularza:

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; 
Powiązane problemy