2010-03-06 7 views
4

Je n'arrive pas à comprendre comment capturer la touche Supprimer. J'ai découvert que dans le tableau de code ASCII, il est à 127 place, mais if (Key = #127) then m'a obtenu nulle part.Capture d'une touche 'supprimer' Appuyez sur

Puis j'ai vérifié la valeur de VK_DELETE qui était de 47. J'ai essayé d'utiliser cela, mais cela n'a pas fonctionné. Le KeyPreview := true est défini dans mon formulaire.

J'ai essayé d'ajouter le ShowMessage(IntToStr(Ord(Key))) à l'événement Forms KeyPress, mais je n'ai jamais reçu le message contextuel en cliquant sur la touche Delete.

Je dois gérer le Supprimer la touche dans les champs d'édition créés dynamiquement. Je veux contrôler quelle partie de l'utilisateur de texte peut effacer dans ce domaine, et je sais comment gérer la suppression de texte en utilisant Backspace clé, maintenant besoin de comprendre comment le faire avec Supprimer clé.

Merci

Répondre

10

Vous devez gérer la OnKeyDown au lieu de l'événement. OnKeyPress Si vous faites cela, alors VK_DELETE devrait fonctionner pour vous. Notez que le paramètre pour OnKeyDown et OnKeyUp est un Word, pas un Char comme pour OnKeyPress.

10

Mghie a la réponse correcte, voici un échantillon:

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; 
    Shift: TShiftState); 
begin 
    if Key=VK_DELETE then 
    showmessage('Delete key was pressed'); 
end; 

Notez que l'utilisateur peut également supprimer du texte à l'aide de coupe à presse-papiers afin que vous devrez peut-être gérer aussi.

+0

Vous pouvez également supprimer du texte en le sélectionnant, puis en tapant un nouveau texte. –

+0

@Greg Hewgill, il est facilement évitable. Je peux vérifier quelle partie du texte est sélectionnée dans l'événement KeyPress avant de laisser l'utilisateur écrire quelque chose. – user1651105

4

Vous pouvez utiliser OnKeyDown événement pour filtrer l'indésirable Supprimer touche enfoncée:

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: 
    TShiftState); 
begin 
    if Key = VK_DELETE then begin 
    Beep; 
    Key:= 0; 
    end; 
end; 
Questions connexes