⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sybnavigator.pas

📁 sybase大全
💻 PAS
字号:
unit sybnavigator;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls,dsgnintf,sybdatabase,buttons;

type
  SybObjectname = string[30];

type
  Tsybobjectproperty = class(TStringProperty)
  public
    procedure GetValues(TheProc: TGetStrProc); override;
    function getattributes:Tpropertyattributes; override;
  end;

type
  TSybNavigator = class(TPanel)
  private
    { Private declarations }
    FShowHint    :boolean;
    FHintsList   :TStrings;
    FDbname      :SybObjectname;
    FDesignActive:boolean;
    FDbProc      :integer;
    fparent      :tcomponent;
{    ftablename   :SybObjectname;}
    fdataset     :SybObjectname;
    FAutoDbProc  :boolean;
{    procedure Settablename(Value :SybObjectname);}
    procedure Setdataset(Value :SybObjectname);
    procedure SetDbProc(Value :integer);
    procedure SetAutoDbProc(Value :boolean);
    procedure SetDbName(Value :SybObjectname);
    procedure SetDesignActive(Value :boolean);
    procedure setshowhint(value:boolean);
    procedure sethintslist(value:tstrings);
    procedure firstclick(Sender:TObject);
    procedure nextclick(Sender:TObject);
    procedure priorclick(Sender:TObject);
    procedure lastclick(Sender:TObject);
  protected
    { Protected declarations }
  public
    { Public declarations }
    btnfirst,
    btnprior,
    btnnext,
    btnlast,
    btninsert,
    btndelete,
    btnedit,
    btnpost,
    btncancel,
    btnrefresh :tspeedbutton;
    constructor create(AOwner :TComponent); override;
    destructor destroy; override;
    procedure loaded; override;
    procedure get_dbproc;
    procedure setname(const NewName:Tcomponentname); override;
  published
    { Published declarations }
    property DbName :SybObjectname read FDbName write setDbname;
    property DesignActive:boolean read fdesignactive write setdesignactive stored false;
    property DbProc:integer read FDbproc write SetDbProc default 0;
    property AutoDbProc:boolean read FAutoDbProc write SetAutoDbProc default true;
    property ShowHint:boolean read fshowhint write setshowhint default false;
    property HintsList:TStrings read FHintsList write sethintslist;
{    property TableName :SybObjectname read FTableName write settablename;}
    property DataSet :SybObjectname read FDataSet write setdataset;
  end;

procedure Register;

implementation
uses sybtable,
     sybquery,
     sybase_components;

{$R NAVIGATOR}

procedure Register;
begin
  RegisterPropertyEditor(TypeInfo(SybObjectname),TSybNavigator,'',Tsybobjectproperty);
  RegisterComponents('Sybase DBLIB', [TSybNavigator]);
end;

procedure Tsybobjectproperty.GetValues(TheProc: TGetStrProc);
var
  dbname    :SybObjectname;
  thisform  :tform;
  adatabase :tsybdatabase;
  tnav      :tsybnavigator;
  i         :integer;
begin
  tnav:=tsybnavigator(getcomponent(0));
  thisform:=tform(tnav.owner);
  if getname = 'DbName' then
  begin
    if databaseslist <> nil then
      for i:=0 to (sybase_components.databaseslist.count-1) do
      begin
        adatabase:=databaseslist[i];
        theproc(adatabase.name);
      end;
  end;
  if getname = 'DataSet' then
  begin
    for i := 0 to thisform.ComponentCount - 1 do
    begin
      with thisform.Components[i] do { as TControl) do}
      begin
        if thisform.Components[i] is TSybTable then
         theproc(thisform.Components[i].name);
        if thisform.Components[i] is TSybQuery then
         theproc(thisform.Components[i].name);
      end;
    end;
  end;

end;

function Tsybobjectproperty.getattributes:Tpropertyattributes;
begin
  Result := [paValueList,paAutoUpdate,paMultiSelect];
end;

constructor TSybNavigator.create(AOwner :TComponent);
var i       :integer;
    resname :string;
begin
  inherited create(AOwner);

  if navigatorlist = nil then
  begin
    navigatorlist:=TList.create;
  end;

  caption:='';
  height:=25;
  width:=250;
  fparent:=aowner;
  Fdesignactive:=false;
  Fdbproc:=0;
  Fautodbproc:=true;
  fshowhint:=false;

{  if tablelist <> nil then
  begin
    for i:=0 to tablelist.count-1 do
      if tsybtable(tablelist[i]).name = tablename then
      begin
        table:=tsybtable(tablelist[i]);
        break;
      end;
    end
    else
      table:=tsybtable.create(nil);}

  btnfirst:=tspeedbutton.create(self);
  btnfirst.caption:='';
  btnfirst.name:='btn_first';
  btnfirst.height:=25;
  btnfirst.width:=25;
  btnfirst.left:=0;
  btnfirst.parent:=self;
  btnfirst.glyph.Handle := LoadBitmap(HInstance,'SYBN_FIRST');
  btnfirst.onclick:=firstclick;

  btnprior:=tspeedbutton.create(self);
  btnprior.caption:='';
  btnprior.name:='btn_prior';
  btnprior.height:=25;
  btnprior.width:=25;
  btnprior.left:=25;
  btnprior.parent:=self;
  btnprior.glyph.Handle := LoadBitmap(HInstance,'SYBN_PRIOR');
  btnprior.onclick:=priorclick;

  btnnext:=tspeedbutton.create(self);
  btnnext.caption:='';
  btnnext.name:='btn_next';
  btnnext.height:=25;
  btnnext.width:=25;
  btnnext.left:=50;
  btnnext.parent:=self;
  btnnext.glyph.Handle := LoadBitmap(HInstance,'SYBN_NEXT');
  btnnext.onclick:=nextclick;

  btnlast:=tspeedbutton.create(self);
  btnlast.caption:='';
  btnlast.name:='btn_last';
  btnlast.height:=25;
  btnlast.width:=25;
  btnlast.left:=75;
  btnlast.parent:=self;
  btnlast.glyph.Handle := LoadBitmap(HInstance,'SYBN_LAST');
  btnlast.onclick:=lastclick;

  btninsert:=tspeedbutton.create(self);
  btninsert.caption:='';
  btninsert.name:='btn_insert';
  btninsert.height:=25;
  btninsert.width:=25;
  btninsert.left:=100;
  btninsert.parent:=self;
  btninsert.glyph.Handle := LoadBitmap(HInstance,'SYBN_INSERT');

  btndelete:=tspeedbutton.create(self);
  btndelete.caption:='';
  btndelete.name:='btn_delete';
  btndelete.height:=25;
  btndelete.width:=25;
  btndelete.left:=125;
  btndelete.parent:=self;
  btndelete.glyph.Handle := LoadBitmap(HInstance,'SYBN_DELETE');

  btnedit:=tspeedbutton.create(self);
  btnedit.caption:='';
  btnedit.name:='btn_edit';
  btnedit.height:=25;
  btnedit.width:=25;
  btnedit.left:=150;
  btnedit.parent:=self;
  btnedit.glyph.Handle := LoadBitmap(HInstance,'SYBN_EDIT');

  btnpost:=tspeedbutton.create(self);
  btnpost.caption:='';
  btnpost.name:='btn_post';
  btnpost.height:=25;
  btnpost.width:=25;
  btnpost.left:=175;
  btnpost.parent:=self;
  btnpost.glyph.Handle := LoadBitmap(HInstance,'SYBN_POST');

  btncancel:=tspeedbutton.create(self);
  btncancel.caption:='';
  btncancel.name:='btn_cancel';
  btncancel.height:=25;
  btncancel.width:=25;
  btncancel.left:=200;
  btncancel.parent:=self;
  btncancel.glyph.Handle := LoadBitmap(HInstance,'SYBN_CANCEL');

  btnrefresh:=tspeedbutton.create(self);
  btnrefresh.caption:='';
  btnrefresh.name:='btn_refresh';
  btnrefresh.height:=25;
  btnrefresh.width:=25;
  btnrefresh.left:=225;
  btnrefresh.parent:=self;
  btnrefresh.glyph.Handle := LoadBitmap(HInstance,'SYBN_REFRESH');

  for i:=0 to 9 do
    tspeedbutton(components[i]).enabled:=false;

  btninsert.enabled:=true;

  fhintslist:=tstringlist.create;
  fhintslist.add('First record');
  fhintslist.add('Prior record');
  fhintslist.add('Next record');
  fhintslist.add('Last record');
  fhintslist.add('Insert record');
  fhintslist.add('Delete record');
  fhintslist.add('Edit');
  fhintslist.add('Post edit');
  fhintslist.add('Cancel update');
  fhintslist.add('Refresh data');

end;

destructor TSybNavigator.destroy;
begin
  navigatorlist.remove(self);
  inherited destroy;
end;

procedure TSybNavigator.setname(const NewName:Tcomponentname);
begin
  inherited setname(NewName);
  if navigatorlist.indexof(self) = -1 then
    navigatorlist.add(self)
  else
  begin
    navigatorlist.items[navigatorlist.indexof(self)]:=self;
  end;
end;

procedure TSybNavigator.loaded;
begin
  inherited loaded;

  btnfirst.hint:=fhintslist[0];
  btnprior.hint:=fhintslist[1];
  btnnext.hint:=fhintslist[2];
  btnlast.hint:=fhintslist[3];
  btninsert.hint:=fhintslist[4];
  btndelete.hint:=fhintslist[5];
  btnedit.hint:=fhintslist[6];
  btnpost.hint:=fhintslist[7];
  btncancel.hint:=fhintslist[8];
  btnrefresh.hint:=fhintslist[9];

end;

procedure TSybNavigator.SetDataSet(Value :SybObjectname);
begin
  Fdataset:=value;
end;

procedure TSybNavigator.setshowhint(value:boolean);
var i   :integer;
begin
  fshowhint:=value;
  for i:=0 to 9 do
  begin
    tspeedbutton(components[i]).showhint:=value;
    tspeedbutton(components[i]).parentshowhint:=false;
  end;
end;

procedure TSybNavigator.sethintslist(value:tstrings);
begin
  fhintslist.assign(value);
end;

procedure TSybNavigator.SetDbname(Value :SybObjectname);
begin
  FDbname:=value;
  get_dbproc;
end;

procedure TSybNavigator.SetDbProc(Value :integer);
begin
  FDbproc:=Value;
end;

procedure TSybNavigator.Setdesignactive(Value :boolean);
begin
  if value then
  begin
    get_dbproc;
  end;
  Fdesignactive:=Value;
end;

procedure TSybNavigator.get_dbproc;
var i         :integer;
    adatabase :tsybdatabase;
begin
  if databaseslist <> nil then
    for i:=0 to (databaseslist.count-1) do
    begin
      adatabase:=databaseslist[i];
      if FDbName = adatabase.name then
      begin
        setdbproc(adatabase.dbproc);
        break;
      end;
  end;
end;

procedure TSybNavigator.SetAutoDbPRoc(Value :boolean);
begin
  FAutoDbProc:=value;
end;

procedure TSybNavigator.firstclick(Sender:TObject);
var table :tsybtable;
    query :tsybquery;
    i     :integer;
begin
  if tablelist<> nil then
  begin
    for i:=0 to tablelist.count-1 do
    begin
      if tsybtable(tablelist[i]).name=dataset then
      begin
        table:=tsybtable(tablelist[i]);
        break;
      end;
    end;
  end;
  if querylist<> nil then
  begin
    for i:=0 to querylist.count-1 do
    begin
      if tsybquery(querylist[i]).name=dataset then
      begin
        query:=tsybquery(querylist[i]);
        break;
      end;
    end;
  end;
  if (table <> nil) and (tablelist<>nil) then
  begin
    table.firstrow;
  end;
  if (query <> nil) and (querylist<>nil) then
  begin
    query.firstrow;
  end;
end;

procedure TSybNavigator.priorclick(Sender:TObject);
var table :tsybtable;
    query :tsybquery;
    i     :integer;
begin
  if (tablelist = nil) and (querylist = nil) then
    exit;

  if tablelist <> nil then
    table:=tsybtable.create(nil);
  if querylist <> nil then
    query:=tsybquery.create(nil);

  if tablelist<> nil then
  begin
    for i:=0 to tablelist.count-1 do
      if tsybtable(tablelist[i]).name=dataset then
      begin
        table:=tsybtable(tablelist[i]);
        break;
      end;
  end;
  if querylist<> nil then
  begin
    for i:=0 to querylist.count-1 do
      if tsybquery(querylist[i]).name=dataset then
      begin
        query:=tsybquery(querylist[i]);
        break;
      end;
  end;
  if (table <> nil) and (tablelist<>nil) then
  begin
    table.prevrow;
  end;
  if (query <> nil) and (querylist<>nil) then
  begin
    query.prevrow;
  end;
end;

procedure TSybNavigator.nextclick(Sender:TObject);
var table :tsybtable;
    query :tsybquery;
    i     :integer;
begin
  if (tablelist = nil) and (querylist = nil) then
    exit;

  if tablelist <> nil then
  begin
    table:=tsybtable.create(nil);
  end;
  if querylist <> nil then
  begin
    query:=tsybquery.create(nil);
  end;

  if tablelist<> nil then
  begin
    for i:=0 to tablelist.count-1 do
      if tsybtable(tablelist[i]).name=dataset then
      begin
        table:=tsybtable(tablelist[i]);
        break;
      end;
  end;
  if querylist<> nil then
  begin
    for i:=0 to querylist.count-1 do
    begin
      if tsybquery(querylist[i]).name=fdataset then
      begin
        query:=tsybquery(querylist[i]);
        break;
      end;
    end;
  end;
  if (table <> nil) and (tablelist<>nil) then
  begin
    table.nextrow;
  end;
  if (query <> nil) and (querylist<>nil) then
  begin
    query.nextrow;
  end;
end;

procedure TSybNavigator.lastclick(Sender:TObject);
var table :tsybtable;
    query :tsybquery;
    i     :integer;
begin
  if (tablelist = nil) and (querylist = nil) then
    exit;

  if tablelist <> nil then
    table:=tsybtable.create(nil);
  if querylist <> nil then
    query:=tsybquery.create(nil);

  if tablelist<> nil then
  begin
    for i:=0 to tablelist.count-1 do
      if tsybtable(tablelist[i]).name=dataset then
      begin
        table:=tsybtable(tablelist[i]);
        break;
      end;
  end;
  if querylist<> nil then
  begin
    for i:=0 to querylist.count-1 do
      if tsybquery(querylist[i]).name=dataset then
      begin
        query:=tsybquery(querylist[i]);
        break;
      end;
  end;
  if (table <> nil) and (tablelist<>nil) then
  begin
    table.lastrow;
  end;
  if (query <> nil) and (querylist<>nil) then
  begin
    query.lastrow;
  end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -