Получение 'удалить' нажатие клавиши

Я не могу выяснить, как получить нажатие Клавиши DELETE. Я узнал, что в таблице кода ASCII, это в 127 местах, но if (Key = #127) then не получил меня нигде.

Затем я проверил значение VK_DELETE который равнялся 47. Попробованный для использования этого но это не работало.

KeyPreview := true установлен в моей форме.

Я пытался добавить ShowMessage(IntToStr(Ord(Key))) к событию Forms KeyPress, но я никогда не получал всплывающее окно сообщения при нажатии на клавишу Delete.

Я должен обработать нажатие клавиши Delete в динамично созданных полях Edit. Я хочу управлять тем, что часть текстового пользователя может стереть в том поле, и я знаю, как обработать текстовое удаление с помощью клавиши Backspace, теперь должен выяснить, как сделать это с клавишей Delete.

Спасибо

5
задан Joe 20 February 2012 в 08:48
поделиться

3 ответа

Вы должны обработать событие OnKeyDown вместо события OnKeyPress . Если вы это сделаете, тогда VK_DELETE должен работать на вас. Обратите внимание, что параметр для OnKeyDown и OnKeyUp - это Word , а не Char , как для OnKeyPress .

12
ответ дан 18 December 2019 в 05:55
поделиться

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, поэтому вам может понадобиться обработать и это.

12
ответ дан 18 December 2019 в 05:55
поделиться

Вы можете использовать событие OnKeyDown для фильтрации нежелательного нажатия клавиши Delete:

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift:
    TShiftState);
begin
  if Key = VK_DELETE then begin
    Beep;
    Key:= 0;
  end;
end;
4
ответ дан 18 December 2019 в 05:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: