16,748
社区成员
发帖
与我相关
我的任务
分享
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.