一个计算器
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if char(key)=#97 then
begin
button1.SetFocus;
.....//执行语句
end;
end;
上面的为按小键盘对应数字键所对应的执行语句,为了看出按的是哪个键,所以每次先用setfocus
语句来取得焦点,即按数字键1就焦点跑到界面上1对应的button1,并执行相应的语句,按2就焦点定位到界面上的button2.
可是当焦点在数字键例如button1时,当按小键盘的Enter(本意是作为等于号计算结果时)时,
if char(key)=#13 then
begin
button15.setfocus //button15为等于号,并没有取得焦点
end;
此时由于焦点定位在button1上,按回车时并没有使button15即等于号取得焦点,而是变成在button1上再次执行了。
请问该如何解决,已经设数字键button的default为false,而回车是还是执行了该按键,而没有使button15取得焦点。谢了
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if char(key)=#97 then
begin
button1.SetFocus;
.....//执行语句
end;
end;
上面的为按小键盘对应数字键所对应的执行语句,为了看出按的是哪个键,所以每次先用setfocus
语句来取得焦点,即按数字键1就焦点跑到界面上1对应的button1,并执行相应的语句,按2就焦点定位到界面上的button2.
可是当焦点在数字键例如button1时,当按小键盘的Enter(本意是作为等于号计算结果时)时,
if char(key)=#13 then
begin
button15.setfocus //button15为等于号,并没有取得焦点
end;
此时由于焦点定位在button1上,按回车时并没有使button15即等于号取得焦点,而是变成在button1上再次执行了。
请问该如何解决,已经设数字键button的default为false,而回车是还是执行了该按键,而没有使button15取得焦点。谢了
解决方案 »
- delphi到底卖给哪家公司拉啊?
- 两个ado查询.AdoQuery1查询出来的数据,如果把这个ADO的记录加入另一个ADO。
- 使用adoquery把image中的图片保存到sql2000中的?
- 各诸帮帮小弟:小弟作一个万能查询,请高手指教!!!
- dbExpress的问题
- treeview的使用.
- 关于treeview的data!属性的类型转换问题!
- 谁能提供一些常用的图标?
- 怎样利用已有的帮助文件(COL文件打不开)
- 请问大家兼职开发一个小软件(一个人员管理软件)大概收多少钱合适啊?
- 怎么在IIS中发布Delphi开发的CGI类型的Web Service并在Delphi中调用?
- 将dbgrid保存为word碰到的问题?
问题是我按小键盘的Enter是想激发界面上的button15(等于号按钮)的事件,可由于焦点定位在前面按的数字键上,按回车时变成了再次单击前面的button了
你可以每次执行完了之后把焦点再放回到form1上
form1.setFocus;不就可以了吗?!
有啊~ 我开始也这样认为可是不行,执行完button1焦点还是在button1上
if char(key)=#97 then begin
button1.setfocus;
button1click(sender);
form1.setfocus; //焦点还是在button1上
end;if char(key)=#13 then begin
button12.setfocus; 还是没有取得焦点
button12click(sender);
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
if char(key)=#97 then begin //小键盘 1
button1.setfocus;
button1click(sender); //执行button1的代码
form1.setfocus;
end;
if char(key)=#98 then begin //小键盘 2
button2.setfocus;
button2click(sender); //执行button2的代码
form1.setfocus;
end;
...
....
if char(key)=#13 then begin //小键盘的回车
button12.SetFocus;
button12click(sender); //执行button12的代码
end;
end;
回车键不要用#13直接写13 其他的如:VK_DOWN VK_UP VK_SPACE VK_END VK_HOME 等等
你可以到window.pas中查看!
我就是用vk_return来测试的,根本没办法捕获回车事件。估计要用消息拦截来处理。
(我初学delphi),我就是用D7~if key=VK_ENTER then begin
button12.SetFocus;
button12click(sender);
end;
结果提示[Error] Unit1.pas(119): Undeclared identifier: 'VK_ENTER'我在keyup试了也和上面提示同样请问两位如何特殊处理或消息拦截,谢谢了!!
if char(key)=#13 then
begin
button15.setfocus //button15为等于号,并没有取得焦点
end;
key:=#0; //<-------------------------注意此处
写上以下语句:
if Key=#13 then begin
Key := #0;
button15.setfocus;
end;
to:Alphen(正在学习VC) 和 kiboisme(蓝色光芒) 两位大哥
如果我在FormKeyDown
if char(key)=#13 then begin
char(key):=#0;
button15.SetFocus;
button15click(sender);
end;
[Error] Unit1.pas(198): Left side cannot be assigned to而放在FormKeyPress
则和上面一样等于号button15没法取得焦点
if key=#13 then begin
key:=#0;
button15.SetFocus;
button15click(sender);
end;
则等于号还是无法取得焦点
Shift: TShiftState);
beginif char(key)=#97 then begin
button1.SetFocus ;
button1click(sender); 小键盘数字键1
form1.setfocus;
end;if char(key)=#98 then begin
button2.setfocus;
button2click(sender); //小键盘数字键2
form1.setfocus;
end;if char(key)=#107 then begin
button13.setfocus; //小键盘的加号
button13click(sender);
form1.setfocus;
end;end;procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
beginif key=#13 then begin
key:=#0;
button15.SetFocus; //小键盘的Enter ,即作为等于键使用
button15click(sender);
end; end;我就是用上面的代码,试一下1+2 但就是不能当按小键盘的Enter使button15(等于号)取得焦点