编程日日帖(37)

软件世界

  VB

  延时功能巧实现

  编的程序精巧美妙,运行速度快是一个目标。可有时来得早不如来得巧,也有太快反而不爽的时候。例如动画效果的实现,时间的控制就成了一个不大不小的问题,有时为了实现比较好的效果,往往需要将时间拖延一下,那我们如何来实现呢?

  通过对当前时间的控制可达到延时的目的,先取得当前时间,过一段时间后,将此时取得的当前时间和上一个当前时间比较,可控制延时的长短。如何实现呢,VB中Timer正好可以帮我们实现此功能,此函数得到一个从午夜开始到现在经过的秒数,通过对它两次对比,可实现延时。下面是延时子程序,amount来控制具体要延时的秒数。

  Sub delay(amount As Single) '延时子程序

  Dim starttime As Single

  Dim currenttime As Single

  starttime = Timer '取得当前时间

  Do

  currenttime = Timer

  DoEvents

  Loop While currenttime < startti

  me + amount

  End Sub  (山东 赵玉勇)

  Delphi

  在DBGrid里控制回车

  在Delphi中,DBGrid的默认控件都是Edit,形成了一个表格。但是在这个二维表里进行操作时,每次按回车都是使单元格置于编辑状态,并选定单元格中的内容。可是如果使用DBGrid作为录入数据的控件时,这样的操作很不方便。我们希望回车时,DBGrid可以像在Excel中一样自动地往下移动单元格。

  下面说明如何在DBGrid里的一个列里按回车使记录连续往下跳转(或可以执行其他的操作)。方法很简单,只要在DBGrid的KeyDown事件中添加如下代码:

  procedure TfrmMain.DBGrid1Key

  Down(Sender: TObject; var Key: Word;

  Shift: TShiftState);

  begin

  if key=VK_RETURN then //按键是否为回车

  begin

  {如果记录指针尚未到达表末尾,就使记录指针下移一个位置(注:①缺少这一语句时,单元格焦点将无法下移;②如果下移前,当前记录已作修改,记录会自动保存。)}

  if not ADOQuery1.Eof then

  ADOQuery1.Next;

  key:=VK_DOWN; //模拟方向键盘的下箭头,使焦点下移一个单元格

  end;

  end;  (湖南 覃坤)