8
votes

Désactiver le bip du système sur Tspinedit lorsque vous appuyez sur Entrée

J'ai un bouton par défaut sur un formulaire qui a un contrôle Tspinedit sur celui-ci. Lorsque le contrôle Tspinedit a la mise au point et l'utilisateur appuie sur la touche Entrée, au lieu du bouton par défaut, l'utilisateur entend juste un bip de système car la touche Entrée n'est pas valide pour un Tspinedit.

Normalement, pour éviter le bip, j'utiliserais l'événement OnKeyPress et définiriez la touche : = 0 pour ignorer la touche appuyez sur la touche. Je pourrais ensuite exécuter la méthode de clic sur le bouton par défaut. Cependant, dans ce cas, onKeyPress ne tire pas parce que la touche Entrée n'est pas valide.

ONKEYDODDOWDOWDOWDOWD, mais quand je définis clé: = 0 là, il n'arrête pas le bip du système.

Alors, comment désactiver le bip système lorsque vous appuyez sur la touche Entrée d'un contrôle Tspinedit?

Je suis sur Delphi 5, et ils n'incluaient pas la source de spin.Pas.


2 commentaires

Avez-vous regardé dans " \ Borland \ Delphi5 \ Source \ Samples \"?


@Uwe, merci! C'est exactement où spin.pas est. Je suppose que j'ai eu une recherche de fichier échoue.


3 Réponses :


7
votes

Essayez celui-ci

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

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


3 commentaires

Merci pour la superbe info, mais je veux toujours entendre les bips pour les autres clés non valides, donc si j'attends que l'événement ONKEOWDOWD est incendié avant de désactiver le bip du système, il ne semble pas empêcher le bip.


Cool hack. Je ne savais pas.


-1. Ceci est une "solution" globale à un problème local. Cela affectera également d'autres applications. Ne fais pas ça.



7
votes

Vous devez descendre de tspinedit et remplacer isvalidchar pour éviter le message MessageBeep ou KeyPress pour éviter ISVALIDCHAR .


1 commentaires

C'est ce que j'ai fait, bien sûr, cependant, merci à Uwe pour m'aider à trouver la source!



4
votes

Set KeyPreview = true sur votre formulaire et ajoutez le code suivant à l'événement KeyPress du formulaire:

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;


0 commentaires