2010-03-06 2 views
4

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

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

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

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

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

Благодаря

ответ

10

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

10

Mghie имеет правильный ответ, вот пример:

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

Обратите внимание, что пользователь может удалить текст, используя вырез в буфер обмена, так что вы, возможно, придется справиться с этим, а также.

+0

Вы также можете удалить текст, выбрав его, а затем ввести новый текст. –

+0

@Greg Hewgill, это легко избежать. Я могу проверить, какая часть текста выбрана в событии KeyPress, прежде чем позволить пользователю что-то написать. – user1651105

4

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

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: 
    TShiftState); 
begin 
    if Key = VK_DELETE then begin 
    Beep; 
    Key:= 0; 
    end; 
end; 
Смежные вопросы