当前位置:首页 > 网络编程 > 软件语言 > DELPHI > 判断shift,ctrl,alt键是否按下

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

点击次数:83 次 发布日期:2008-11-09 08:39:05 作者:源代码网
源代码网推荐
广告载入中
在组件的OnKeyDown 、 OnKeyUp 、OnMouseDown和OnMouseUp等事件的处理过程中,有一个TShiftState类型的变量Shift ,TShiftState类型定义如下:
源代码网推荐 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);
源代码网推荐 begin
源代码网推荐 if 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);
源代码网推荐 begin
源代码网推荐 if 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:=" ";
源代码网推荐 if not(Shift>=[ssDouble]) then
源代码网推荐 StatusBar1.Panels[5].Text:=" ";
源代码网推荐 end;
源代码网推荐 程序运行后,读者可以尝试按下Shift、Alt 和Ctrl键,单击或双击鼠标左键、中键和右键,观察状态栏上各面板的显示。


源代码网推荐

源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华