2012-05-06 24 views
11

Tôi cần chặn đột quỵ bàn phím TAB trên TEdits và chặn chúng theo chương trình. Trong một số trường hợp, tôi không muốn tập trung thay đổi sang điều khiển tiếp theo.Đánh chặn khóa TAB và chặn nó

Tôi đã cố gắng xử lý KeyPress, KeyDown cả trên cấp độ TEdit và trên TForm với KeyPreview = true. Tôi đã nhòm lời khuyên từ:

Nhưng nó đã không làm việc. Các sự kiện được kích hoạt, giả sử, phím Enter NHƯNG không cho khóa TAB.

Tôi đang sử dụng Delphi 7. Cảm ơn sự giúp đỡ của bạn.

+0

Họ không bị sa thải vì 'TAB'key là nhằm thể là chìa khóa trong đó di chuyển tập trung vào việc kiểm soát tiếp theo , do đó nó có một xử lý đặc biệt. – TLama

+1

Cảm ơn TLama. Hành vi được giải thích. Vì vậy, bạn có nghĩ rằng, có một lối thoát? – Jako

+1

http://delphi.about.com/cs/adptips2002/a/bltip0702_5.htm –

Trả lời

16

Nếu bạn muốn chặn hành vi khóa TAB, bạn sẽ nhận được thông báo CM_DIALOGKEY. Trong ví dụ này, nếu bạn thiết lập các giá trị boolean YouWantToInterceptTab là True, phím TAB sẽ được ăn:

unit Unit1; 

interface 

uses 
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
    Dialogs, StdCtrls; 

type 
    TForm1 = class(TForm) 
    private 
    YouWantToInterceptTab: Boolean; 
    procedure CMDialogKey(var AMessage: TCMDialogKey); message CM_DIALOGKEY; 
    public 
    { Public declarations } 
    end; 

var 
    Form1: TForm1; 

implementation 

{$R *.dfm} 

procedure TForm1.CMDialogKey(var AMessage: TCMDialogKey); 
begin 
    if AMessage.CharCode = VK_TAB then 
    begin 
    ShowMessage('TAB key has been pressed in ' + ActiveControl.Name); 

    if YouWantToInterceptTab then 
    begin 
     ShowMessage('TAB key will be eaten'); 
     AMessage.Result := 1; 
    end 
    else 
     inherited;   
    end 
    else 
    inherited; 
end; 

end. 
+2

Kính gửi TLama, điều này làm việc hoàn hảo. Cắt & dán tốt nhất từ ​​trước tới giờ;) – Jako

Các vấn đề liên quan