我在出窗口上有一个TEdit控件和一个TButton控件在Form.Create时,我设置了KeyPreview:= True;
然后在KeyDown事件中过滤按键
procedure TfrmMain.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
case Key of
VK_F2: ;//按下F2
VK_F3{, VK_ADD小键盘+}: ;//按下F3,和小键盘的"+"号键 $30..$39{ VK_0,VK_1,VK_3 - VK_9 },
$41..$5A{ VK_A - VK_Z },
VK_NUMPAD0..VK_NUMPAD9,
VK_HOME, VK_END,
VK_BACK, VK_DELETE:
begin
if (Shift = [ssAlt]) and (Key = $32) then begin
// 按下 ALT+2 时
end else begin
// 当焦点不在Edit上时,按下 A-Z,0-9,Home,End,Back,Delete键都会自动回到Edit,并且输入按下的Key
if not Edit1.Focused then begin
Edit1.SetFocus;
// 这里暂时用了模拟键盘的方法
keybd_event(Key, 0, 0, 0);
keybd_event(Key, 0, KEYEVENTF_KEYUP, 0);
end;
end;
end;
end;
end;
问题1:
当按下Alt+2时,会正确跳到处理Alt+2的地方,但如果当前焦点在Edit的时候,在Edit中同样会输入"2"这个字符。有没有方法不让Edit输入这个字符呢?问题2:
在焦点不在Edit上时,按下A-Z,0-9等按键会自动将焦点返回到Edit,但如果不写keybd_event这2行模拟键盘敲击事件的代码,在Edit中就不会输入按下的字符。
我只查到通过SendMessage(hwnd, WM_SETTEXT, 0, Longint(str));的方法。但这个方法是设置整个Edit.Text,并不是往后加一个字符。
能不能通过发送消息或其他方法实现模拟键盘敲击的功能,当然并不是光增加字符,因为还有Home,End,Back和Delete键。
解决方案 »
- delphi怎样从linux服务器下载文件
- 位图旋转后失真
- RAVE:二个打印机在程序中选择打印的问题
- 关于TreeView控件的stateimages属性关联上TImageList控件后,TImageList中图标不能超过15个的问题,否则在TreeView中就显示不了
- 请教两个小问题?
- DBGrid的问题
- 请教我一步一步设置Dbchart的柱型图,我搞了很多次没成功!?
- 求一段代码
- delphi5新建unit,保存的时候,报'$'is not a valid identifier错误。
- 请问各位大侠:怎么让鼠标移到某一列中,某一列改变颜色,移开,另一列不改变颜色?
- 请教一个判断数据插入或修改的判断!?急等
- IdUDPServer发送字符串的问题, 急
begin
Edit1.SetFocus;
edit1.Text:=edit1.Text+char(Key);
end;
用
edit1.Text:=edit1.Text+char(Key);
当然对字符 0-9,A-Z都能适用,但对 Home,End,Delete,Back(退格)键就不能这样做了主要是针对这些按键,用模拟键盘毕竟感觉不牢靠,希望能有其他的方法。