从输入首字符开始计时 到edit框失去焦点的时候结束 如果输入时间超过1秒 则清空edit框的内容
我是像下面这样写的 针对edit1 但是感觉如果edit多了的话 扩展性不好 请指正 谢谢
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls;type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Timer1: TTimer;
    Edit2: TEdit;
    procedure Timer1Timer(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
    procedure ClearEditText(Sender:TEdit);
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.DFM}procedure TForm1.ClearEditText(Sender: TEdit);
begin
  Sender.Text := '';
  Timer1.Enabled := False;
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if Edit1.Focused then
    ClearEditText(Edit1);
end;procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  Timer1.Enabled := true;
  if key = #13 then
  begin
    edit2.SetFocus;
    Timer1.Enabled := false;
  end;
end;end.

解决方案 »

  1.   

    主要是禁用键盘 但允许条码枪输入 条码枪是键盘口的 不是com口的
    条码枪输入 时间不会超过1秒
      

  2.   

    不知道下面的可否:
    onEnter里面timer1 := GetTickCount;
    onExit里面timer2 := GetTickCount;
    if (timer2 - timer1) > 1000 then
      edit.clear;
      

  3.   

    自己继承一个EDIT,里面放一个TIMER,设置计时间隔(1秒),用KEYDOWN接收有效字符开始激活TIMER(注意判断TIMER没激活的时候才激活,避免激活状态中输入字符时重新激活),TIMER的ONTIMER中写清空EDIT的代码,同时关闭计时器;在WM_KILLFOCUS消息里关闭TIMER计时(如果此时还在计时时间内,则会因停止计时而不清空输入)
      

  4.   

    同意Harry. 创建一个继承于edit的类,然后重写KeyPress方法. 
    接着再动态生成edit控件就行了...只能提供思路,具体的你自己解决吧.
      

  5.   

    条码枪也是模拟KeyEvent,所以禁止了键盘事件同时也屏蔽了条码枪的输入!解决办法其实很简单:Edit1设置为ReadOnly,Edit2设置为Visible = False,置于后台,条码枪发送数据到Edit2,在Edit2的change事件里,当接收到完整的条码数据,就把数据发到前台的Edit1。