I need to intercept the TAB keyboard stroke on TEdits and suppress them programmatically. In certain cases I don't want the focus to change to the next control.
I tried to handle KeyPress, KeyDown both on TEdit level and on TForm with KeyPreview=true. I've peeked advices from:
But it didn't work. The events are fired for, let's say, the Enter key BUT not for the TAB key.
I'm using Delphi 7. Thanks for your help.
If you want to intercept the TAB key behavior, you should catch the CM_DIALOGKEY
message. In this example, if you set the YouWantToInterceptTab
boolean value to True, the TAB
key will be eaten:
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With