Bu bileşen Aşağı ve yukarı ok tuşları ile (TAB tuşunun yerine)kontroller arasında gezintiyi sağlıyor
This component allows you to navigate thourgh the controls with UP/DOWN arrows or ENTER key insted of TAB.
Liran Shahar, 1998 Israel simpletech@ibm.net
// Liran Shahar dan Allah razı olsun diyoruz.

//-----------------------------------------------------------------------------
Kod: Tümünü seç
unit DosMove;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TMoveOptions = set of (moEnter,moUpDn);
TDosMove = class(TComponent)
private
FActive : boolean;
FOptions : TMoveOptions;
FOwnerKeyDown : TKeyEvent;
protected
procedure NewKeyDown(Sender : TObject;var Key : word;Shift : TShiftState);
public
constructor Create(AOwner : TComponent); override;
published
property Active : boolean read FActive write FActive;
property Options : TMoveOptions read FOptions write FOptions;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('HomeMade', [TDosMove]);
end;
constructor TDosMove.Create(AOwner : TComponent);
var
Loop : integer;
begin
// ilk önce başka bir DosMove bileşeni var mı diye kontrol ediliyor
for Loop:=0 to AOwner.ComponentCount-1 do
if AOwner.Components[Loop] is TDosMove then raise
EInvalidOperation.Create('TDosMove can have only one instance per form');
inherited Create(AOwner); // Bileşen oluşturma ve default özelliklerinin belirlenmesi.
FActive:=false;
FOptions:=[];
// Formun OnKeyDown olayı ile bütünlük sağlanıyor.
FOwnerKeyDown:=(AOwner as TForm).OnKeyDown;
(AOwner as TForm).OnKeyDown:=NewKeyDown;
(AOwner as TForm).KeyPreview:=true;
end; // Create
procedure TDosMove.NewKeyDown(Sender : TObject;var Key : word; Shift : TShiftState);
begin
if FActive and (FOptions<>[]) then begin
// istenilen tuşlar ele alınıyor.
if ((Key=VK_DOWN) and (moUpDn in FOptions)) or
((Key=VK_RETURN) and (moEnter in FOptions)) then
(Owner as TForm).Perform(WM_NEXTDLGCTL,0,0)
else if (Key=VK_UP) and (moUpDn in FOptions) then
(Owner as TForm).Perform(WM_NEXTDLGCTL,1,0);
end; // if FActive ...
// Daha önceden atanmış OnKeyDown olayı çağrılıyor
if assigned(FOwnerKeyDown) then FOwnerKeyDown(Sender,Key,Shift);
end; // NewKeyDown
end.