📄 sybnavigator.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 + -