在小键盘上的0-9的9个数字键上按照手机键盘的布局方式分布字母然后实现字母输入!哪个帅哥有好的办法啊?
有Demo更好啊!

解决方案 »

  1.   

    //参考如下代码:
    type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Timer1: TTimer;
        procedure Edit1KeyDown(Sender: TObject; var Key: Word;
          Shift: TShiftState);
        procedure Edit1KeyPress(Sender: TObject; var Key: Char);
        procedure Timer1Timer(Sender: TObject);
      private
        { Private declarations }
        FReplaceKey: Boolean; // 是否取消输入,避免小键盘输入原字符
        FInputIndex: Integer; // 当前输入字符集的序号
        FInputText: string; // 当前输入的字符集
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    var
      vInputText: string;
    begin
      FReplaceKey := False;  case Key of
        VK_NUMPAD2: vInputText := 'abc';
        VK_NUMPAD3: vInputText := 'def';
        VK_NUMPAD4: vInputText := 'ghi';
        VK_NUMPAD5: vInputText := 'jkl';
        VK_NUMPAD6: vInputText := 'mno';
        VK_NUMPAD7: vInputText := 'pqrs';
        VK_NUMPAD8: vInputText := 'tuv';
        VK_NUMPAD9: vInputText := 'wxyz';
      else vInputText := '';
      end;
      if vInputText <> '' then
      begin
        if FInputText <> vInputText then // 如果按下其他键盘
        begin
          FInputIndex := 0;
          if FInputText <> '' then Timer1Timer(Timer1);
          FInputText := vInputText;
        end;
        Timer1.Enabled := False;
        Timer1.Enabled := True; //从新计时
        FReplaceKey := True;
        TEdit(Sender).SelText := FInputText[FInputIndex + 1];
        TEdit(Sender).SelStart := TEdit(Sender).SelStart - 1;
        TEdit(Sender).SelLength := 1;
        Key := 0;
        FInputIndex := (FInputIndex + 1) mod Length(FInputText); // 下一个输入字符序号
      end;
    end;procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
      if FReplaceKey then Key := #0;
    end;procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      FInputText := ''; // 1秒后确定输入
      Timer1.Enabled := False;
      Edit1.SelStart := Edit1.SelStart + 1;
      Edit1.SelLength := 0;
    end;