Delphi 模拟DBNavigation的前4个按钮
我的程序中只需要DBNavigation的前四个按钮。
首先您别告诉我用个panel或是什么玩意儿把后面几个按钮遮住。。。这个我也能想到o(╯□╰)o
所以我用了4个Button:Button1【首条】,Button2【前一条】,Button3【后一条】,Button4【尾条】。代码如下:
procedure TForm7.Button1Click(Sender: TObject);
begin
ADOQuery1.First;
Button1.Enabled:=False;
Button2.Enabled:=False;
Button3.Enabled:=True;
Button4.Enabled:=True;
end;
procedure TForm7.Button2Click(Sender: TObject);
begin
ADOQuery1.Prior;
Button3.Enabled:=True;
Button4.Enabled:=True;
if ADOQuery1.Bof then begin
Button1.Enabled:=False;
Button2.Enabled:=False;
end
else begin
Button1.Enabled:=True;
Button2.Enabled:=True;
end;
end;
procedure TForm7.Button3Click(Sender: TObject);
begin
ADOQuery1.Next;
Button1.Enabled:=True;
Button2.Enabled:=True;
if ADOQuery1.Eof then begin
Button3.Enabled:=False;
Button4.Enabled:=False;
end
else begin
Button3.Enabled:=True;
Button4.Enabled:=True;
end;
end;
procedure TForm7.Button4Click(Sender: TObject);
begin
ADOQuery1.Last;
Button1.Enabled:=True;
Button2.Enabled:=True;
Button3.Enabled:=False;
Button4.Enabled:=False;
end;
但是有点问题:运行时,单按这四个按钮时,他们的Enabled是能够根据首尾与否而变化的,但当我用鼠标单击DBGrid的首尾条、或是用【↑】【↓】将记录移到首尾条的时候,他们的Enabled却变不了,甚至,比如我刚打开Form7,DBGrid默认指向第一条,Button1和Button2都是灰色不可用的,但当我单击中间的任意一条记录时(即记录已经不是首条了),他们并没有变成可用状态,甚至我再用方向键向下走两个记录,还是没变化,甚至走到了最后一条,【首条】和【上一条】还是灰色不可用,【下一条】和【尾条】还是可用的。简而言之就是无法感应键盘的上下键动作和鼠标直接单击DBGrid单元格的动作。我特地用DBNavigation做了下对比,DBNavigation则比较智能,该什么时候变就什么时候变。小弟再次请教诸位大神,应该怎样修改这4个Button的代码呢?
[解决办法]
DBNavigator.VisibleButtons := [nbFirst, nbPrior, nbNext, nbLast];
DBNavigator.VisibleButtons设置这个属性就可以了呀!
[解决办法]
procedure TForm7.SetButton();begin if ADOQuery1.State in [dsInsert,dsEdit] then begin Button1.Enabled:=False; Button2.Enabled:=False; Button3.Enabled:=False; Button4.Enabled:=False; end else begin Button1.Enabled:=not ADOQuery1.Bof; Button2.Enabled:=not ADOQuery1.Bof; Button3.Enabled:=not ADOQuery1.Eof; Button4.Enabled:=not ADOQuery1.Eof; end end;procedure TForm7.Button1Click(Sender: TObject);begin ADOQuery1.First;end;procedure TForm7.Button2Click(Sender: TObject);begin ADOQuery1.Prior;end;procedure TForm7.Button3Click(Sender: TObject);begin ADOQuery1.Next;end;procedure TForm7.Button4Click(Sender: TObject);begin ADOQuery1.Last;end;procedure TForm7.ADOQuery1AfterScroll(DataSet: TDataSet);begin SetButton(); end;