首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

(如图)delphi中有关开发的一个有关问题。请大哥给出思路代码

2013-08-10 
(如图)delphi中有关开发的一个问题。请大哥给出思路代码。现在红框内的信息都是通过扫描一维码。但是有些人不

(如图)delphi中有关开发的一个问题。请大哥给出思路代码。
(如图)delphi中有关开发的一个有关问题。请大哥给出思路代码

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


跪求
[解决办法]
给你个Demo,我在公司是这么用的:


unit Unit1;

interface

uses
  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.

热点排行