中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Delphi > 综合文章
判断shift,ctrl,alt键是否按下
作者:未知 时间:2005-08-07 20:59 出处:编程爱好者网站 责编:chinaitpower
              摘要:判断shift,ctrl,alt键是否按下
    在组件的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键,单击或双击鼠标左键、中键和右键,观察状态栏上各面板的显示。

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有