unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Graphics, Dialogs, ComCtrls, LCLType, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
btnInfo: TButton;
btnQuit: TButton;
Label1: TLabel;
TabControl1: TTabControl;
procedure btnInfoClick(Sender: TObject);
procedure btnQuitClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure TabControl1Change(Sender: TObject);
procedure TabControl1Enter(Sender: TObject);
procedure TabControl1Exit(Sender: TObject);
private
procedure TabKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
type
TEnableTabControlKeyDown = class(TTabControl);
procedure TForm1.FormCreate(Sender: TObject);
begin
TEnableTabControlKeyDown(TabControl1).OnKeyDown := @TabKeyDown;
end;
procedure TForm1.btnInfoClick(Sender: TObject);
begin
ShowMessage('To navigate on the TabControl, use: ' + #13 +
'[tab], [shift+tab], [left], [ right], [up], [down]');
end;
procedure TForm1.btnQuitClick(Sender: TObject);
begin
Close;
end;
procedure TForm1.TabControl1Change(Sender: TObject);
begin
Label1.Caption := 'You are on tab #' + IntToStr(TabControl1.TabIndex+1);
end;
procedure TForm1.TabControl1Enter(Sender: TObject);
begin
TabControl1.Color := clHighlight;
end;
procedure TForm1.TabControl1Exit(Sender: TObject);
begin
TabControl1.Color := clBackground;
end;
procedure TForm1.TabKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var
CurrentTabIndex: Integer;
begin
if not(Sender is TTabControl) then Exit;
CurrentTabIndex := TEnableTabControlKeyDown(TabControl1).TabIndex;
case Key of
VK_TAB: if (ssShift in Shift) then
Dec(CurrentTabIndex)
else
Inc(CurrentTabIndex);
VK_LEFT: Dec(CurrentTabIndex);
VK_RIGHT: Inc(CurrentTabIndex);
VK_UP: Form1.SelectNext(TabControl1, False, True);
VK_DOWN: Form1.SelectNext(TabControl1, True, True);
end;
if (CurrentTabIndex < 0) then CurrentTabIndex := TabControl1.Tabs.Count-1;
if (CurrentTabIndex > TabControl1.Tabs.Count-1) then CurrentTabIndex := 0;
TEnableTabControlKeyDown(TabControl1).TabIndex := CurrentTabIndex;
Key := 0;
end;
end.