Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Как перехватить нажатие TAB?

01.01.2007
private

 
Procedure CMDialogKey(Var Msg: TWMKey); message CM_DIALOGKEY;
.....
procedure TForm1
.CMDialogKey(var Msg: TWMKey);
begin
//здесь Ваш код
Msg.Result := 0
end;

Автор: Vit

Взято с Vingrad.ru https://forum.vingrad.ru


На уровне формы клавиша tab обычно обрабатывается Windows. В примере создается обработчик события CM_Dialog для перехвата Dialog keys

type
  TForm1
= class(TForm)
 
private
    procedure
CMDialogKey( var msg: TCMDialogKey );
    message CM_DIALOGKEY
;
end;
 
var
  Form1
: TForm1;
 
implementation
{$R *.DFM}
 
procedure TForm1
.CMDialogKey(var msg: TCMDialogKey);
begin
 
if msg.Charcode <> VK_TAB then
    inherited
;
end;
 
procedure TForm1
.FormKeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
 
if Key = VK_TAB then
    Form1
.Caption := 'Tab Key Down!';
end;
 
 

https://delphiworld.narod.ru/

DelphiWorld 6.0


Автор: Ralph Friedman

Единственное место в программе, где можно перехватить нажатие клавиши tab - в обработчике Application.OnMessages. Пример ниже:

unit Hndltabu;
 
interface
 
uses
 
SysUtils, WinTypes, WinProcs, Messages, Classes,
 
Graphics, Controls, Forms, Dialogs, StdCtrls;
 
type
  TForm1
= class(TForm)
    Edit1
: TEdit;
    Edit2
: TEdit;
    Label1
: TLabel;
    procedure
FormCreate(Sender: TObject);
 
private { Private-Deklarationen }
    procedure
AppMessage(var Msg: TMsg; var Handled: Boolean);
 
public { Public-Deklarationen }
 
end;
 
var
  Form1
: TForm1;
 
implementation
 
{$R *.DFM}
 
procedure TForm1
.AppMessage(var Msg: TMsg; var Handled: Boolean);
const
  shiftPressed
: boolean = false;
begin
 
if Msg.Message = WM_KEYDOWN then
   
if not shiftPressed and (Msg.wParam = VK_SHIFT) then
   
begin
      shiftPressed
:= true;
     
Exit;
   
end
   
else
   
begin
     
if Msg.wParam = VK_TAB then
       
if ActiveControl = Edit1 then
       
begin
         
if shiftPressed then
            Label1
.Caption := 'BACKTAB!'
         
else
            Label1
.Caption := 'TAB!';
 
         
Handled := true
       
end
       
else
          Label1
.Caption := '';
 
      shiftPressed
:= false;
   
end;
end;
 
procedure TForm1
.FormCreate(Sender: TObject);
begin
 
Application.OnMessage := AppMessage;
end;
 
end.
 
 

https://delphiworld.narod.ru/

DelphiWorld 6.0