一个很简单的问题(50分)

  • 主题发起人 主题发起人 FoxSky
  • 开始时间 开始时间
F

FoxSky

Unregistered / Unconfirmed
GUEST, unregistred user!
我写了一个简单的计算器程序,但是只能用鼠标操作,我想把它加上支持键盘操作,
但又不想为响应每个按钮重写大量的代码,而是尽量利用鼠标的OnClilk事件,请问该如
何处理?
还有程序在启动时和鼠标点击按钮时,会在按钮上出现一个虚线框,影响美观,请
问如何才能使虚线框不出现(和Windows自带的计算器一样)?
 
》还有程序在启动时和鼠标点击按钮时,会在按钮上出现一个虚线框,影响美观,请
》问如何才能使虚线框不出现(和Windows自带的计算器一样)?
这是焦点设置问题,你把焦点重新设置就可以了!
 
前者看不懂,如果你使用按钮(Button),用鼠标点击和用空格键等按下是等效的
(有例外情况,例如 MessageBox 中的按钮)
第二个问题:改用 SpeedButton
 
1.只要在键盘按下或者抬起事件里调用onclick事件就可以了
2.用speedbutton就没有虚线框了,ms的我看就是speedbutton做的
 
最简单的办法是给按钮定义热键,
问题2可用楼上的办法。
 
to sundart:
如何给按钮定义热键?
 
To wdl: 如何在键盘按下或者抬起事件里调用onclick事件?
我在FormMain.onKeyDown()事件中加入:
if key = 96 then
Btn_0.onClick;
if key = 97 then
Btn_1.onClick;
......
if Key = 105 then
Btn_9.onClick;
if Key = 187 then
Btn_DENGYU.onClick;
//"="的键值
if Key = 107 then
Btn_Add.onClick;
//"+"
......
但是却出现:not enough actual parameters,请问是什么原因?
 
to sundart:
对呀,如何给按钮定义热键,我用了几种按钮都找不到?
 
你只需在onkeypress事件里判断是否是‘1’--‘9’之间的数字如果是的话就
产生操作。
if not (key in ['0'..'9']) then

key := chr(0) --过滤掉其他按键

 
给按钮定义热键的方法是
假设有一按钮,其caption为Save。
要使用户按alt+s相当于点击这个按钮,可将其caption改为&Save
这样按钮的caption 中的S会加下划线。热键就是S。
 
楼上说的是不错,但是例如退格、sqrt等按钮如何定义快捷键?
 
1.将form的keypreview属性设为true,然后处理form.onkeypress
用huhui的方法。
2.改用speedbutton
 
南宫吹去的方法是最好的
keypreview:=ture;
是让消息先传递给窗口处理
 
截获form的keydown消息转发给edit应该可以的吧
procedure TForm1.appmsg(var msg:TMsg;var handled:boolean);
begin
if ((msg.message = WM_KEYDOWN) and (msg.hwnd<>Edit1.Handle)) then

begin
SendMessage(Edit1.Handle,257,msg.wParam,msg.lParam);
SendMessage(Edit1.Handle,258,msg.wParam,msg.lParam);
SendMessage(Edit1.Handle,280,msg.wParam,msg.lParam);
end;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
Application.OnMessage := appmsg;
end;
 
To huhui:
if Key = 107 then
Btn_Add.onClick(self);
//"+"
同意 huhui 及 南宫吹云﹐ 不懂编程 的可參考
 
To WilliamGui
编译时不出错了,但按键却无反应
 
To 不懂编程:
你写的太深奥了,新手我看不懂,能解释一下吗?我把这些代码加入程序编译运行
后,按数字键时出现小写的字母,如按1出现a,按字母键时出现大写的字母,不知如何
解决?再者,在计算器中如何屏蔽一些无用的键?
 
To wdl:
用speedbutton后,焦点移到edit上,如何才能不显示焦点?
 

To huhui:
我試了一試﹐真是I服了You!
你把代碼鄴在FormKeyPress事件里﹐并且窗口的KeyPreview設為真﹐
在事件中改為這樣寫:
if Key = '+' then
//當然你也可以用 #?? 的方式
Btn_Add.onClick(self);
//"+"
通過了。

 
To WilliamGui:
老兄,我这还是不行,你的妹儿是多少,我把源代码发给你,帮我看看?(我是新手,多多包含)
 
后退
顶部