在小键盘上的0-9的9个数字键上按照手机键盘的布局方式分布字母然后实现字母输入!哪个帅哥有好的办法啊?
有Demo更好啊!
有Demo更好啊!
解决方案 »
- 无法弹出对话框的问题,句柄相关?
- 大虾请教:编译错误信息“method identifier expected”,以下是源代码,请大虾出手~
- 动态控件的问题
- 请大家帮忙解决问题?
- 求救,怎么做触发器?
- 高手请进,确实是MIDAS 中最难的问题。如何在应用服务器端 强制关掉应用服务器?
- 求表中几行的列相加,结果赋值于第1行的sql最简单写法(菜鸟级)!
- 三层系统中客户端向服务端提交数据的问题,欢迎大侠们近来讨论
- 如何利用form的帮助按钮(就是标题栏上带问号的那个按钮)?
- 怎样当鼠标在RichEdit上移动时检测鼠标下的文字?
- 如何制作xp风格的窗体,说得详细一点,我是初学者
- 在选中DBGrID的CELL的位置弹出个窗口FORM,如何实现?
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;