unit DBNavPlus;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, DBCtrls, Buttons;
const
DBNavPlusVersion = '1.2';
type
TDBNavPlus = class(TDBNavigator)
private
{ Private declarations }
DoCaptions: boolean;
FCaptions: TStrings;
FLayout: TButtonLayout;
FSpacing: Integer;
FMargin: Integer;
protected
{ Protected declarations }
procedure SetLayout(value: TButtonLayout);
procedure SetSpacing(value: integer);
procedure SetMargin(value: integer);
procedure SetCaptions(value: TStrings);
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
{ Published declarations }
property Captions: TStrings read FCaptions write SetCaptions;
property Layout: TButtonLayout read FLayout write SetLayout default blGlyphTop;
property Spacing: Integer read FSpacing write SetSpacing default 2;
{if we dont set default, the SetMargin is called}
{this will allow us to put the SetCaptions in as it is not called!}
property Margin: Integer read FMargin write SetMargin;
property Font;
end;
procedure Register;
implementation
const
DefaultCaption: array[0..9] of string =
('首笔','上笔','下笔','末笔','新增',
'删除','编辑','存盘','取消','刷新');
{******************************************************************************}
constructor TDBNavPlus.Create(AOwner: TComponent);
var
x: integer;
begin
inherited create(AOwner);
{initialize values}
FCaptions := TStringList.create;
DoCaptions := True;
FSpacing := 0;
SetSpacing(2);
FMargin := 0;
SetMargin(-1);
FLayout := blGlyphBottom;
SetLayout(blGlyphTop);
FCaptions.Clear;
for x := 0 to 9 do FCaptions.Add(DefaultCaption[x]);
SetCaptions(FCaptions);
end; {of Create}
{******************************************************************************}
destructor TDBNavPlus.Destroy;
begin
FCaptions.Free;
inherited Destroy;
end; {of destroy}
{******************************************************************************}
procedure TDBNavPlus.SetCaptions(Value: TStrings);
var
t: TNavigateBtn;
begin
{set captions or default if not assigned}
if Value <> FCaptions
then FCaptions.Assign(Value);
for t:= low(TNavigateBtn) to high(TNavigateBtn) do begin
if ord(t) < Value.Count
then Buttons[t].caption := Value[ord(t)]
else Buttons[t].caption := DefaultCaption[ord(t)];
end;
Invalidate;
end; {of setCaptions}
{******************************************************************************}
procedure TDBNavPlus.SetLayout(value: TButtonLayout);
var
t: TNavigateBtn;
begin
if (value = Flayout) and not (csLoading in ComponentState) then exit;
FLayout := value;
for t:= low(TNavigateBtn) to high(TNavigateBtn)
do Buttons[t].Layout := value;
Invalidate;
end; {of SetLayout}
{******************************************************************************}
procedure TDBNavPlus.SetSpacing(value: integer);
var
t: TNavigateBtn;
begin
if (value = FSpacing) and not (csLoading in ComponentState) then exit;
FSpacing := value;
for t:= low(TNavigateBtn) to high(TNavigateBtn)
do Buttons[t].Spacing := value;
Invalidate;
end; {of SetSpacing}
{******************************************************************************}
procedure TDBNavPlus.SetMargin(value: integer);
var
t: TNavigateBtn;
begin
if (value = FMargin) and not (csLoading in ComponentState) then exit;
if (csLoading in ComponentState) then SetCaptions(FCaptions);
FMargin := value;
for t:= low(TNavigateBtn) to high(TNavigateBtn)
do Buttons[t].margin := value;
Invalidate;
end; {of SetMargin}
{******************************************************************************}
procedure Register;
begin
RegisterComponents('Fitco', [TDBNavPlus]);
end; {of Register}
end.