效果图:
嗯我们今天主要看下面这一部分的实现:
四个按钮是TscGPCharGlyphButton控件。上面一行显示记录位置和快速跳转的那一坨,它其实是由四个TscGPEdit控件拼接构成的。 红色括号3那里,其实是把边设置成了红色,而4这个则是设置边框不显示.然后两个控件高度一致,但要比最外面的1小一点,恰好把外层的边框漏出来.而2这里,也是一个无边框的TscGPEdit.这里为什么是这一坨?因为我不会设置TscGPEdit只显示右边框或者左边框.还有,TscGPEdit的内边距我不会设置.所以才有了2
以下是实现代码:
procedure TFrmChangeGYS.FormShow(Sender: TObject); begin Res := dm.FDQGYS.RecordCount;//全局变量 NavClick(5); //初始化导航条 ,这里参数5表示不执行导航任务.因为最高只到3 scGPEdit1.Clear; end; procedure TFrmChangeGYS.NavClick(const i: integer); //每次点击事件都要执行一次 begin with dm.FDQGYS do begin case i of 0: First; 1: Prior; 2: next; 3: Last; end; if Res = 1 then SetNavState(False, False, False, False) else if RecNo = 1 then SetNavState(False, False, True, True) else if RecNo = Res then SetNavState(True, True, False, False) else SetNavState(True, True, True, True); if IsDisabled.Tag = 0 then BtnAllow.Down := True else BtnNotAllow.Down := True; //显示当前数据的位置 EditPosition.Text := recno.ToString + ' / ' + Res.ToString; end; end;
procedure TFrmChangeGYS.SetNavState(const F, P, N, L: Boolean); //设置导航打状态 begin BtnFrist.Enabled := F; BtnPrevious.Enabled := P; BtnNext.Enabled := N; BtnLast.Enabled := L; end;
然后是四个按钮的共用代码:
procedure TFrmChangeGYS.BtnFristClick(Sender: TObject); begin NavClick(TscGPButton(Sender).Tag);//按钮的TAG属性分别设置了从0-3 end;
最后是限制2那里的输入只能是整数
procedure TFrmChangeGYS.scGPEdit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var Value: Integer; begin if not (Char(Key) in ['0'..'9', AnsiChar(#8), AnsiChar(#13)]) then // 只允许输入数字和退格键 Key := 0; if Char(Key) = #13 then EditToPositionRightButtonClick(Sender); end;
procedure TFrmChangeGYS.EditToPositionRightButtonClick(Sender: TObject); begin var i := StrToInt(scGPEdit1.Text); if i < 1 then i := 1 else if i > Res then i := res; scGPEdit1.Clear; dm.FDQGYS.RecNo := i; NavClick(5); //更新按钮状态 end;
标签:begin,False,Sender,delphi,太丑,TFrmChangeGYS,导航条,end,True From: https://www.cnblogs.com/yoooos/p/17342226.html