2010-03-06 77 views
4

我想不通如何捕獲刪除按鍵。 我發現在ASCII代碼表中,它在127位,但if (Key = #127) then讓我無處可去。捕獲'刪除'鍵按

然後我檢查這是47試過使用的VK_DELETE價值,但沒有奏效。

KeyPreview := true在我的表單中設置。

我試圖將ShowMessage(IntToStr(Ord(Key)))添加到Forms KeyPress事件,但我從來沒有收到消息彈出窗口,同時單擊刪除鍵。

我需要處理刪除按下dynamicaly創建的Edit字段。我想控制哪部分文本用戶可以在該字段中刪除,並且我知道如何處理文本刪除使用退格鍵鍵,現在需要弄清楚如何用刪除鍵。

感謝

回答

10

您應該處理OnKeyDown而不是OnKeyPress事件。如果你這樣做,然後VK_DELETE應該爲你工作。請注意,OnKeyDownOnKeyUp的參數是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

您還可以通過選擇它,然後輸入新的文本刪除文本。 – 2010-03-06 10:51:32

+0

@Greg Hewgill,它很容易避免。在讓用戶寫東西之前,我可以檢查在KeyPress事件中選擇了哪部分文本。 – user1651105 2010-03-06 11:16:34

4

可以使用的onkeydown事件加壓過濾不需要的刪除鍵:

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