DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: diga
今日帖子: 30
在线用户: 13
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 zxdcj (月下舞者) ★☆☆☆☆ -
盒子活跃会员
2003/12/1 20:15:24
标题:
各位英雄好汉请帮忙:KeyDown事件中的shift参数为何不响应。 浏览:1817
加入我的收藏
楼主: procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (key=vk_control) and (shift=[ssDouble]) then
    memo1.Clear;
end;
运行程序后按下Ctrl键并双击鼠标则清除Memo1中的内容,可是(shift=[ssDouble])不执行,为什么呀?谢谢!按此在新窗口浏览图片 按此在新窗口浏览图片 按此在新窗口浏览图片 按此在新窗口浏览图片 按此在新窗口浏览图片
按此在新窗口浏览图片
----------------------------------------------
-
作者:
男 bryan (bao) ★☆☆☆☆ -
盒子活跃会员
2003/12/1 20:21:54
1楼: Keydown是键盘事件啊,关鼠标事吗?
----------------------------------------------
-
作者:
男 bios (阿贡) ★☆☆☆☆ -
盒子中级会员
2003/12/1 20:35:46
2楼: var
  b:boolean;//全局变量


procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
b:=false;
if (key=vk_control) then
  b:=true;
end;

procedure TForm1.Memo1DblClick(Sender: TObject);
begin
if b then
memo1.Clear ;
end;
----------------------------------------------
按此在新窗口浏览图片
按此在新窗口浏览图片
作者:
男 dfw@107866 (jacky_shen) ★☆☆☆☆ -
普通会员
2003/12/1 23:30:17
3楼:   if (key=vk_control) and (shift=[ssDouble]) then  <----

在这句下断点,发现shift始终不是ssDouble,而是ssCtrl等。。

估计不行。

你可以看bios (ergong)的方法。
----------------------------------------------
----
VCL
作者:
男 zxdcj (月下舞者) ★☆☆☆☆ -
盒子活跃会员
2003/12/2 8:58:50
4楼: 多谢各位的支持!
特别是bios兄不辞辛苦的给出了代码,以及dfw@107866兄给的建议及调试过程,
bryan兄可能是没理解我的意思,但同样感谢你的疑问,这是由于我未表达清楚所致,我会汲取教训的。
dfw@107866兄所说正是我所遇到的情况,shift始终不能得关于鼠标的值,我想这不应该是delphi的bug吧,如何才能得到呢希望大家继续帮助!
----------------------------------------------
-
作者:
男 bios (阿贡) ★☆☆☆☆ -
盒子中级会员
2003/12/2 9:06:23
5楼: type

  TKeyEvent = procedure (Sender: TObject; var Key: Word; Shift: TShiftState) of object;

property OnKeyDown: TKeyEvent;

Description

Use the OnKeyDown event handler to specify special processing to occur when a key is pressed. The OnKeyDown handler can respond to all keyboard keys, including function keys and keys combined with the Shift, Alt, and Ctrl keys, and pressed mouse buttons. 

The TKeyEvent type points to a method that handles keyboard events. 

The Key parameter is the key on the keyboard. For non-alphanumeric keys, use virtual key codes to determine the key pressed. For more information, see Virtual Key codes. 

The Shift parameter indicates whether the Shift, Alt, or Ctrl keys are combined with the keystroke.


这是BORLAND中的帮助 写的

从最后一行看 SHIFT参数和鼠标无关

KEYDOWN事件 中不 截获 鼠标消息

只截获 键盘消息

而type TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble);
中的真正有用 也经常使用的只有ssShift, ssAlt, ssCtrl,

后面4个偶也不知道 来干嘛的
----------------------------------------------
按此在新窗口浏览图片
按此在新窗口浏览图片
作者:
男 zxdcj (月下舞者) ★☆☆☆☆ -
盒子活跃会员
2003/12/2 12:27:37
6楼: 谢谢bios兄,BORLAND真是让人不明白,希望有一天我们都能够知道后面的四个是用来干什么的。
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行74.21875毫秒 RSS