判断shift,ctrl,alt键是否按下
2014-10-18 15:53
423 查看
在组件的OnKeyDown、OnKeyUp 、OnMouseDown和OnMouseUp等事件的处理过程中,有一个TShiftState类型的变量Shift ,
TShiftState类型定义如下:
1 type TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble);
所以根据Shift的值就可以判断当键盘上的键按下时Shift 、Alt和Ctrl键的状态,或者按下鼠标左键、鼠标右键、鼠标中键、任意按键双击时的状态。
下面的例程说明了如何检测Shift、Alt和Ctrl 键是否按下。
通过菜单File | New Application 创建一个新的工程,在窗体中添加一个StatusBar组件,并在状态栏编辑器中为其添加6 个面板。
然后为窗体Form1添加OnKeyDown 、OnKeyUp 、OnMouseDown和OnMouseUp等事件的处理过程如下:
OnKeyDown事件:
1 procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
2 begin
3 if Shift>=[ssShift] then {如果按下了Shift键则在第一个面板上显示Shift}
4 StatusBar1.Panels[0].Text:= 'Shift';
5
6 if Shift>=[ssAlt] then {如果按下了Alt键则在第二个面板上显示Alt}
7 StatusBar1.Panels[1].Text:= 'Alt';
8
9 if Shift>=[ssCtrl] then {如果按下了C t r l 键则在第三个面板上显示Ctrl}
10 StatusBar1.Panels[2].Text:= 'Ctrl';
11
12 end;
OnKeyUp事件:
1 procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
2 begin
3 {在Shift、Alt 和Ctrl键弹起时清除状态栏中相应面板上的内容 }
4 if not(Shift>=[ssShift]) then
5 StatusBar1.Panels[0].Text:=' ';
6
7 if not(Shift>=[ssAlt]) then
8 StatusBar1.Panels[1].Text:=' ';
9
10 if not(Shift>=[ssCtrl]) then
11 StatusBar1.Panels[2].Text:=' ';
12 end;
13
OnMouseDown事件:
1 procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
2 begin
3
4 if Shift>=[ssLeft] then {按下了左键则在第四个面板上显示left}
5 Statusbar1.Panels[3].Text:= 'left';
6
7 if Shift>=[ssMiddle] then {如果按下了中键则在第五个面板上显示Middle}
8 StatusBar1.Panels[4].Text:= 'Middle';
9
10 if Shift>=[ssDouble] then {如果是双击则在第六个面板上显示Double }
11 StatusBar1.Panels[5].Text:='Double';
12 end;
13
OnMouseUp事件:
1 procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
2 begin
3 {在鼠标按键弹起时清除状态栏中相应面板上的内容 }
4 if not(Shift>=[ssLeft]) then
5 StatusBar1.Panels[3].Text:=' ';
6
7 if not(Shift>=[ssMiddle]) then
8 StatusBar1.Panels[4].Text:=' ';
9
10 if not(Shift>=[ssDouble]) then
11 StatusBar1.Panels[5].Text:=' ';
12 end;
程序运行后,读者可以尝试按下Shift、Alt 和Ctrl键,单击或双击鼠标左键、中键和右键,观察状态栏上各面板的显示。
TShiftState类型定义如下:
1 type TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble);
所以根据Shift的值就可以判断当键盘上的键按下时Shift 、Alt和Ctrl键的状态,或者按下鼠标左键、鼠标右键、鼠标中键、任意按键双击时的状态。
下面的例程说明了如何检测Shift、Alt和Ctrl 键是否按下。
通过菜单File | New Application 创建一个新的工程,在窗体中添加一个StatusBar组件,并在状态栏编辑器中为其添加6 个面板。
然后为窗体Form1添加OnKeyDown 、OnKeyUp 、OnMouseDown和OnMouseUp等事件的处理过程如下:
OnKeyDown事件:
1 procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
2 begin
3 if Shift>=[ssShift] then {如果按下了Shift键则在第一个面板上显示Shift}
4 StatusBar1.Panels[0].Text:= 'Shift';
5
6 if Shift>=[ssAlt] then {如果按下了Alt键则在第二个面板上显示Alt}
7 StatusBar1.Panels[1].Text:= 'Alt';
8
9 if Shift>=[ssCtrl] then {如果按下了C t r l 键则在第三个面板上显示Ctrl}
10 StatusBar1.Panels[2].Text:= 'Ctrl';
11
12 end;
OnKeyUp事件:
1 procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
2 begin
3 {在Shift、Alt 和Ctrl键弹起时清除状态栏中相应面板上的内容 }
4 if not(Shift>=[ssShift]) then
5 StatusBar1.Panels[0].Text:=' ';
6
7 if not(Shift>=[ssAlt]) then
8 StatusBar1.Panels[1].Text:=' ';
9
10 if not(Shift>=[ssCtrl]) then
11 StatusBar1.Panels[2].Text:=' ';
12 end;
13
OnMouseDown事件:
1 procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
2 begin
3
4 if Shift>=[ssLeft] then {按下了左键则在第四个面板上显示left}
5 Statusbar1.Panels[3].Text:= 'left';
6
7 if Shift>=[ssMiddle] then {如果按下了中键则在第五个面板上显示Middle}
8 StatusBar1.Panels[4].Text:= 'Middle';
9
10 if Shift>=[ssDouble] then {如果是双击则在第六个面板上显示Double }
11 StatusBar1.Panels[5].Text:='Double';
12 end;
13
OnMouseUp事件:
1 procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
2 begin
3 {在鼠标按键弹起时清除状态栏中相应面板上的内容 }
4 if not(Shift>=[ssLeft]) then
5 StatusBar1.Panels[3].Text:=' ';
6
7 if not(Shift>=[ssMiddle]) then
8 StatusBar1.Panels[4].Text:=' ';
9
10 if not(Shift>=[ssDouble]) then
11 StatusBar1.Panels[5].Text:=' ';
12 end;
程序运行后,读者可以尝试按下Shift、Alt 和Ctrl键,单击或双击鼠标左键、中键和右键,观察状态栏上各面板的显示。
相关文章推荐
- 判断shift,ctrl,alt键是否按下
- 判断是否按下鼠标按钮的时候并按下了CTRL,SHIFT等键
- 判断Shift,Alt,Ctrl是否被按下
- 判断集合从属关系的练习: 是否同时按下了 Ctrl 和 Shift 键
- C#-判断Shift,Alt,Ctrl是否被按下,确定所按下的组合键
- CListCtrl在处理NM_CLICK的时候,如何判断Ctrl SHIFT ALT键是否按下
- C#-判断Shift,Alt,Ctrl是否被按下
- 判断集合从属关系的练习: 是否同时按下了 Ctrl 和 Shift 键
- C# 判断键盘Ctrl、Shift、Alt键
- 在delphi根据TshiftState值来判断用户按下Ctrl,shift,alt等键的方法
- 在delphi根据TshiftState值来判断用户按下Ctrl,shift,alt等键的方法
- winform在鼠标操作时要判断是否按下Ctrl键
- 判断是否shift按键
- 是否同时按下了 Ctrl 和 Shift 键
- 如何判断是否按下Ctrl键 - C#
- OnMouseMove() 判断ctrl是否按下的问题
- 在delphi根据TshiftState值来判断用户按下Ctrl,shift,alt等键的方法
- c# 中判断用户是否按下CTRL键
- 判断哪个修改键(Shift、Ctrl 和 Alt)处于按下状态的值。
- BCB key事件中判断Shift、Alt、Ctrl状态