网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > DELPHI > 正文
判断shift,ctrl,alt键是否按下
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/12
下载{$ArticleTitle}原创论文样式

    在组件的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 .Text:= ''Alt'';
if Shift>=[ssCtrl] then // 如果按下了C t r l 键则在第三个面板上显示Ctrl
StatusBar1.Panels.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.Text:='' '';
if not(Shift>=[ssCtrl]) then
StatusBar1.Panels.Text:='' '';
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
begin
if Shift>=[ssLeft] then // 如果按下了左键则在第四个面板上显示left
Statusbar1.Panels.Text:= ''left'';
if Shift>=[ssMiddle] then // 如果按下了中键则在第五个面板上显示Middle
StatusBar1.Panels.Text:= ''Middle'';
if Shift>=[ssDouble] then // 如果是双击则在第六个面板上显示Double
StatusBar1.Panels.Text:=''Double'';
end;
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
begin
// 在鼠标按键弹起时清除状态栏中相应面板上的内容
if not(Shift>=[ssLeft]) then
StatusBar1.Panels.Text:='' '';
if not(Shift>=[ssMiddle]) then
StatusBar1.Panels.Text:='' '';
if not(Shift>=[ssDouble]) then
StatusBar1.Panels.Text:='' '';
end;
程序运行后,读者可以尝试按下Shift、Alt 和Ctrl键,单击或双击鼠标左键、中键和右键,观察状态栏上各面板的显示。

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号