Я не могу выяснить, как получить нажатие Клавиши DELETE. Я узнал, что в таблице кода ASCII, это в 127 местах, но if (Key = #127) then
не получил меня нигде.
Затем я проверил значение VK_DELETE
который равнялся 47. Попробованный для использования этого но это не работало.
KeyPreview := true
установлен в моей форме.
Я пытался добавить ShowMessage(IntToStr(Ord(Key)))
к событию Forms KeyPress, но я никогда не получал всплывающее окно сообщения при нажатии на клавишу Delete.
Я должен обработать нажатие клавиши Delete в динамично созданных полях Edit. Я хочу управлять тем, что часть текстового пользователя может стереть в том поле, и я знаю, как обработать текстовое удаление с помощью клавиши Backspace, теперь должен выяснить, как сделать это с клавишей Delete.
Спасибо
Вы должны обработать событие OnKeyDown
вместо события OnKeyPress
. Если вы это сделаете, тогда VK_DELETE
должен работать на вас. Обратите внимание, что параметр для OnKeyDown
и OnKeyUp
- это Word
, а не Char
, как для OnKeyPress
.
Mghie дал правильный ответ, вот пример:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key=VK_DELETE then
showmessage('Delete key was pressed');
end;
Обратите внимание, что пользователь также может удалить текст с помощью cut-to-clipboard, поэтому вам может понадобиться обработать и это.
Вы можете использовать событие OnKeyDown для фильтрации нежелательного нажатия клавиши Delete:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift:
TShiftState);
begin
if Key = VK_DELETE then begin
Beep;
Key:= 0;
end;
end;