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

Previous  Top  Next

    
 

 

 

Code:

private

{©Drkb v.3(2007): www.drkb.ru,

®Vit (Vitaly Nevzorov) - nevzorov@yahoo.com}

 

Procedure CMDialogKey(Var Msg: TWMKey); message CM_DIALOGKEY;

.....

procedure TForm1.CMDialogKey(var Msg: TWMKey);

begin

//здесь Ваш код

Msg.Result := 0

end;

 

 

©Drkb::01477

Автор: Vit (www.delphist.com, www.drkb.ru, www.unihighlighter.com, www.nevzorov.org)

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

 


 

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

 

Code:

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;

 

 

©Drkb::01478

http://delphiworld.narod.ru/

DelphiWorld 6.0

 


 

Автор: Ralph Friedman

 

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

 

Code:

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.

 

 

©Drkb::01479

http://delphiworld.narod.ru/

DelphiWorld 6.0