delphi 中的edit.txt 如何控制只能通过扫描器输入,不能通过手敲键盘输入?

解决方案 »

  1.   

    procedure TRes_HrLzSQ_F.edt_cardKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    var
      card:Integer;
    begin
      if (Shift=[ssCtrl])or(Shift=[ssShift]) then
      begin
        lbl_msg.Caption:='請刷卡,不能粘貼.';
        KeyDown:=True;
      end;
      if Key=13 then
      begin
        if TryStrToInt(edt_card.Text,card)then
        begin
          qry_tmp.Close;
          qry_tmp.SQL.Text:='select cardid from RES_USERCARD where account_id='+ QuotedStr(usrid);
          qry_tmp.Open;
          if qry_tmp.FieldByName('cardid').AsInteger<>card then
          begin
            MessageDlg(_UserName+',你的卡號錯誤,不能辦理離職喲!',mtWarning,[mbOK],0);
            edt_card.Clear;
            Exit;
          end;
          if Application.MessageBox(PChar(_UserName+',你確定要申請離職嗎?'), '操作提示', MB_YESNO +MB_ICONQUESTION + MB_DEFBUTTON2)=IDYES then
          begin
            if qry_lz.State in[dsinsert,dsedit] then
            begin
              qry_lz.FieldByName('usrid').AsString:=usrid;
              qry_lz.FieldByName('usrname').AsString:=_UserName;
              qry_lz.FieldByName('qhs').AsInteger:=2;
              qry_tmp.Close;
              qry_tmp.SQL.Text:='select sjbm,bmjb from RES_DEPARTMENT where bmzz='+ QuotedStr(usrid);
              qry_tmp.Open;
              if qry_tmp.RecordCount>0 then
              begin
                qry_lz.FieldByName('nxtqh').AsString:=qry_tmp.fieldbyname('sjbm').AsString;
                if Pos('課',qry_tmp.FieldByName('bmjb').AsString)>0 then
                  qry_lz.FieldByName('qhs').AsInteger:=1;
              end
              else
              begin
                qry_tmp.Close;
                qry_tmp.SQL.Text:='select BMID from Res_User_Temp where Account_Id='+ QuotedStr(usrid);
                qry_tmp.Open;
                if qry_tmp.RecordCount=0 then
                begin
                  MessageDlg(_UserName+',查詢上階主管出錯,請稍候重試!',mtWarning,[mbOK],0);
                  edt_card.Clear;
                  Exit;
                end;
                qry_lz.FieldByName('nxtqh').AsString:=qry_tmp.fieldbyname('BMID').AsString  
              end;  
              qry_lz.Post;
              ModalResult:=mrOk;
            end;  
          end;
        end else
        begin
          lbl_msg.Caption:='卡號錯誤!!!';
          edt_card.Clear;
          Exit;
        end;  
      end;  
    end;procedure TRes_HrLzSQ_F.edt_cardKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      KeyDown:=False;
    end;
      

  2.   

    delphi 中的edit.txt 设为只读就可以了啊..扫描器输入 是给他 赋值
      

  3.   

    也就是只能通过代码输入了,做个readonly:=true就ok了,程序接扫描枪后,根据提供的接口用代码写入edit
      

  4.   

    你有必要这么干吗,你的扫描器是怎么用的,是不是跟扫描条形码那样,扫完后,自动读取文字到你的程序中呢,如果是,就设置readonly:=true,然后通过代码实现 Edit1.Text := 'xxxxxx';