判断shift,ctrl,alt键是否按下

 我来答
石铺刻杂感开4124
2013-11-06 · TA获得超过280个赞
知道答主
回答量:181
采纳率:100%
帮助的人:113万
展开全部
type TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble);所以根据Shift的值就可以判断当键盘上的键按下时Shift 、Alt和Ctrl键的状态,或者按下鼠标左键、中键时的状态或者是否双击了按键。当然,如果有OnMouseDown事件发生了,而又不是按下左键和中键,则按下的一定是右键。下面的例程说明了如何检测Shift、Alt和Ctrl 键是否按下。 通过菜单File | New Application 创建一个新的工程,在窗体中添加一个StatusBar组件,并在状态栏编辑器中为其添加6 个面板。然后为窗体Form1添加OnKeyDown 、OnKeyUp 、OnMouseDown和OnMouseUp等事件的处理过程如下: procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);beginif Shift=[ssShift] then // 如果按下了Shift键则在第一个面板上显示Shift StatusBar1 .Panels[0] .Text:= 'Shift'; if Shift=[ssAlt] then // 如果按下了Alt键则在第二个面板上显示Alt StatusBar1.Panels[1] .Text:= 'Alt'; if Shift=[ssCtrl] then // 如果按下了C t r l 键则在第三个面板上显示Ctrl StatusBar1.Panels[2].Text:= 'Ctrl'; procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);begin// 在Shift、Alt 和Ctrl键弹起时清除状态栏中相应面板上的内容 if not(Shift=[ssShift]) then StatusBar1.Panels[0].Text:=' '; if not(Shift=[ssAlt]) then StatusBar1.Panels[1].Text:=' '; if not(Shift=[ssCtrl]) then StatusBar1.Panels[2].Text:=' '; procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);beginif Shift=[ssLeft] then // 如果按下了左键则在第四个面板上显示left Statusbar1.Panels[3].Text:= 'left'; if Shift=[ssMiddle] then // 如果按下了中键则在第五个面板上显示Middle StatusBar1.Panels[4].Text:= 'Middle'; if Shift=[ssDouble] then // 如果是双击则在第六个面板上显示Double StatusBar1.Panels[5].Text:='Double';end;procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);begin// 在鼠标按键弹起时清除状态栏中相应面板上的内容 if not(Shift=[ssLeft]) then StatusBar1.Panels[3].Text:=' '; if not(Shift=[ssMiddle]) then StatusBar1.Panels[4].Text:=' ';
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式