现在红框内的信息都是通过扫描一维码。
但是有些人不规范操作,就用手输入这些信息,然后敲个回车。
有什么好方法可以杜绝这中情况吗?就是一定是扫描才可以。
跪求

解决方案 »

  1.   

    在 KeyPress 事件中屏蔽一切按键
      

  2.   

    把它的属性设为ReadOnly=True,这样不影响扫描的输入
      

  3.   

    给你个Demo,我在公司是这么用的:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Math;type
      TForm1 = class(TForm)
        Edit1: TEdit;
        procedure FormCreate(Sender: TObject);
        procedure Edit1KeyPress(Sender: TObject; var Key: Char);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
      private
        { Private declarations }
        tKeyIn: TDateTime;
        FOldWndProc: TWndMethod;
      public
        { Public declarations }
        procedure NewWndProc(var Message: TMessage);
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
      tKeyIn := Now;
      FOldWndProc := Edit1.WindowProc;
      Edit1.WindowProc := NewWndProc;
    end;procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    var
      n: integer;
    begin
      if Length(Edit1.Text) < 2 then
      begin
        tKeyIn := Now;
        exit;
      end;  n := Round((Now - tKeyIn) *24*60*60);
      if n >= Ceil(Length(Edit1.Text) / 10) then//这里的10是一秒内允许输入的最大字符不超过10,你可以改大来
      begin
        MessageDlg('掃描時間超過' + IntToStr(Ceil(Length(Edit1.Text) / 20))
          + '秒!不可手動輸入,請用掃描槍掃描!', mtError, [mbCancel], 0);
        Key := #0;
        Edit1.Text := '';
        Edit1.SetFocus;
      end;
    end;procedure TForm1.NewWndProc(var Message: TMessage);
    begin
      if (Message.Msg <> WM_CUT) and (Message.Msg <> WM_COPY) and (Message.Msg <> WM_PASTE) then
        FOldWndProc(Message);
    end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Edit1.WindowProc := FOldWndProc;
    end;end.
      

  4.   


    那这和timer控件差不多吧?
    我要输入的字符就是F1020-056  ,就这9个。
    时间点掐不好啊,
      

  5.   

    提供一个间接招:界面放两个Edit, 
    Edt1(只读, 供显示扫描码, 可获取焦点)
    Edt2(藏起来, 别让用户操作到, Tabstop设为false, 扫描枪的码首先进入edt2, 然后在Onchange事件中赋给Edt1)