Delphi中OnKeyDown的问题

2023-11-29

我正在与德尔福合作。我想跟踪按下了哪个键。我正在使用 TForm 的 KeyDown 事件。它工作正常,但问题是,如果我按小写字母,但它会给出该字母的大写字母。如何识别按下的按键是小写还是大写?


如果您想跟踪字母数字键,那么您应该使用KeyPress。尝试这个:

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  ShowMessage(Key);
end;

问题在于KeyDown是对按下的键做出响应,当然,如果你想在键盘上输入“K”或“k”,你按下同一个按钮,对吗?所以如果你想坚持KeyDown,则需要单独检查Caps Lock键是否打开,或者Shift键是否按下。要测试切换键(例如 Caps Lock)是否打开,或者是否按下常规键,您可以使用

function IsKeyDown(const VK: integer): boolean;
begin
  IsKeyDown := GetKeyState(VK) and $8000 <> 0;
end;

function IsKeyOn(const VK: Integer): boolean;
begin
  IsKeyOn := GetKeyState(VK) and 1 = 1;
end;

要检查 Caps Lock 键是否打开,请使用IsKeyOn(VK_CAPITAL)。要检查是否按下了 Shift 键,请使用IsKeyDown(VK_SHIFT).

检查 Shift 键是否按下的另一种方法,仅适用于OnKeyDown事件处理程序,用于检查是否ssShift in Shift, where Shift是该事件处理函数的参数。

(顺便说一句,因为 Caps Lock 开启的操作会被 Shift 键抵消(也就是说,如果在 Caps Lock 开启时按 Shift+A,则会出现small插入“a”),测试大写字母时使用的检查是

IsKeyOn(VK_CAPITAL) xor IsKeyDown(VK_SHIFT)

使用异或运算符。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Delphi中OnKeyDown的问题 的相关文章

  • 能否从 Vista Shell 获取 48x48 或 64x64 图标?

    如果 Vista Shell 中存在 48x48 或 64x64 图标 如何使用 SHGetFileInfo 获取在 TImage 中显示图标的句柄 我想从图像列表中选择一个代表文件夹路径的图标 并在 Timage 中显示 48x48 或
  • 获取字符、整数和日期字段的字段 oldValue 和 newValue

    我试图只保留表更改的历史记录 所以我想获取一个字段在更改为oldValue之前的值 然后获取它更改为newValue的值 两个值都应转换为字符串 因此 这是该表的一个示例 PartNumber Description 12345 Test
  • 我应该害怕使用 UDP 进行客户端/服务器广播通话吗?

    我在过去的两天里阅读了每一篇StackOverflow问题和答案 以及googling当然 关于印地TCP and UDP协议 以便决定在我的用户应用程序和 Windows 服务之间的通信方法中应该使用哪一种 从我目前所看到的来看 UDP是
  • 将记录转换为序列化表单数据以通过 HTTP 发送

    有没有办法转换此记录 TError record code Word message String end TState record caption String address Cardinal counters TArray
  • Delphi 2007 中的 HelpInsight 文档

    我正在使用 D2007 并尝试使用 HelpInsight 功能 自 D2005 起提供 来记录我的源代码 我主要对让 HelpInsight 工具提示正常工作感兴趣 通过各种网上冲浪和实验 我发现了以下内容 使用三斜杠 注释样式比其他记录
  • 在 SQLite 数据库中存储日期时间值的最佳方式(Delphi)

    我将把日期时间值存储在 SQLite 数据库中 使用 Delphi 和 DISqlite 库 数据库的本质是它永远不需要在计算机或系统之间传输 因此互操作性不是一个限制 相反 我的重点是阅读速度 日期时间字段将被索引 我将对其进行大量搜索
  • 如何将 JSON 字符串转换为图像?

    我有一个将图像转换为 JSON 数组的应用程序 并将其保存到 blob 字段中 function getImage String var memorystream TMemoryStream jsonArray TJSONArray beg
  • 如何追踪手柄泄漏?

    在我的一个应用程序中 我观察到句柄数量不断增加 在不使用应用程序的情况下 该数字大约每秒增加一次 因此后台处理代码的某些部分一定存在句柄泄漏 我如何追踪此类泄漏 有什么工具可以帮助解决这个问题吗 跟踪句柄泄漏时要寻找哪些模式 导致手柄泄漏的
  • 以 png 格式剪辑幻灯片 (Delphi 2010)

    I have a filmstrip of images in png format like this 我想知道如何剪辑每个图像并将这些图像放入 TImageList 控件中 并始终保留透明度 EDIT 是的 在设计时 RRUZ 提到的技
  • 在TImageViewer中,如何获取用户点击图片的位置?

    在TImageViewer控件中 用户可以缩放或平移图片 我的问题是 当用户点击图片时 如何获取用户在图片上的点击位置 尤其是用户可以对图片进行放大 缩小或平移之后 如何获取对应的图片点击位置呢 As shown below How to
  • TColorProperty德尔福柏林10.1.2?

    我正在尝试将组件从 Delphi 7 转换为 Delphi Berlin 平面组件 https sourceforge net projects flatstyle https sourceforge net projects flatst
  • 使用项目中的波形文件

    我目前只能通过将波形文件放在已编译的 exe 旁边来播放背景声音 但我实际上想要一个包含波形文件的静态可执行文件 这在Delphi XE2中可能吗 这是我的代码 SndPlaySound Raw wav SND ASYNC or SND L
  • 如何释放 TInterfacedObject 中的 TObject 成员

    我知道接口对象是引用计数的 因此不需要手动释放它 但如果它有一个 TObject 继承成员 我是否应该在析构函数中手动释放该成员 考虑以下代码 program Project2 APPTYPE CONSOLE R res uses Syst
  • 如何使用 Gmail 的 SMTP 和 Indy 10 发送电子邮件?

    我正在使用 Delphi 2009 和 svn 中最新的 Indy 10 通过 SMTP 发送电子邮件 但它不适用于 Gmail Google Apps 托管域 当我尝试发送电子邮件时 我收到 必须首先发出 STARTTLS 命令 我尝试用
  • 如何在Delphi中显示Vista风格的气球提示?

    在输入验证时 我使用气球提示而不是消息框 我的问题是 在 Vista 上 它们具有带圆角的旧 XP 样式 而不是较新的矩形外观 我尝试使用 CreateWindowEx 创建它们并且tooltips class32或使用 SendMessa
  • 如何比较枚举类型集

    从某个时刻开始 我厌倦了编写设定条件 and or 因为对于更多的条件或更长的变量名 重新编写会变得笨拙且烦人 所以我开始写助手这样我就可以写ASet ContainsOne ceValue1 ceValue2 代替 ceValue1 in
  • 如何从该 JAVA 文件中提取 Delphi 类以与 Android 一起使用?

    我的Delphi XE7项目需要与FTDI FT311 Android 配件芯片 http www ftdichip com Products ICs FT311D html 他们帮助提供了一个 Android 演示 其中包括他们的 JAV
  • 使用 PutBlock 并将字节数组全部设置为零的 EIPHTTPProtocolExceptionPeer 异常

    使用 Delphi XE2 Update 3 我在将零字节块上传到 Azure 时遇到问题 当我说零字节时 我指的是每个元素设置为零的字节数组 不是零长度 例如 var ConInfo TAzureConnectionInfo RespIn
  • Delphi 中表单分发与其生命周期相关的接口对象的安全方法?

    我有一个 Delphi 表单 它提供接口对象背后的功能 代码的其他部分也通过属于该表单的属性获取引用 我无法将接口功能委托给子对象 因为太多的功能是由表单上的控件 组件提供的 我无法使用 TAggregateObject 或 TContai
  • Delphi 的内存分析工具?

    我建立了一个项目并运行它 然后在 Process Explorer 中查看它 结果发现它在启动时使用的 RAM 比我想象的要多 5 倍 现在 如果我的程序运行得太慢 我会将其连接到分析器并让它告诉我什么正在使用我的所有周期 有没有类似的工具

随机推荐

  • 我可以以某种方式“__restrict__ this”吗?

    我一直在看Mike Acton 关于 C 中面向数据的设计的演讲在 CppCon 2014 上 他给出了这个例子 int Foo Bar int count int value 0 for int i 0 i lt count i if m
  • 无法打开文件(截断文件:eof = 7340032,sblock->base_addr = 0,stored_eof = 126651688)

    我在 Google colab 中训练了我的模型 然后使用保存它model1 save thebestonesofar57block5 h5 之后我将文件下载到我的 Windows 机器上 将其上传到新的 google colab 会话后
  • 活动视图指示器在 LaunchScreen.storyboard 上没有动画

    我想在我的应用程序加载时使用活动视图指示器 所以我有 LaunchScreen storyboard 我在 AVI 上使用 行为 动画 但它不是动画 当我使用 Act V Indic 时 不在 LaunchScreen 中 它是动画 Lau
  • 如何运行 SecureSocial 演示?

    我从以下位置下载了 securesocial master ziphttps github com jaliss securesocial tree master 1 解压后 切换目录 cd C Users ddd play secures
  • 如何优化通过经纬度计算距离的SQL查询?

    我有一个结构如下的表 table name shop id shop int 10 name varchar 200 latitude double longitude double 我想计算给定坐标与数据库中保存的坐标之间的距离 我当前的
  • 旋转时更改应用程序后面的颜色

    When an iOS app rotates it will reveal a black background when the app is between portrait and landscape Is it possible
  • SQL 中的名字、姓氏太复杂?

    这个 SQL 看起来很复杂 当一个或两个字段都可以为 NULL 时 是否有更简单的方法来获取 FirstName LastName SELECT COALESCE LastName CASE WHEN LastName FirstName
  • 在泛型方法中,为什么泛型重载优于具有父类型的实现方法?

    假设我创建了一个泛型方法 并实现了一些类型 如下面的代码所示 我也有两个对象 一个Foo and a Bar where Bar继承自Foo 然后我实现通用方法Foo 如果我用以下方式调用该方法Bar 为什么它没有击中Foo方法的重载 我测
  • 有没有更好的写法 v = (v == 0 ? 1 : 0); [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我想在 0 和 1 之间切换变量 如果它是 0 我想将其设置为 1 否则如果它是 1 我想将其设置为 0 这是一个非常基本的操作 我经常写 所以我想研究最短 最清晰的实现方法 这是我迄今为
  • 如何将 CocoaPod 框架添加到 Xcode 8 Playground

    我尝试在 Xcode 项目中向 Playground 添 加一些 pod 不幸的是 唯一支持的范围是更新后的目标 并且link with不再支持 ERROR 无效的Podfile文件 的规范link with现在不支持 Podfile 中的
  • 获取两个日期之间的日期

    我有两个这样的表 Table1 emp leave summary id emp id leave from date leave to date leave type Table2 emp leave daywise id emp id
  • ASP.Net 回发 get 时找不到指定的 URL

    当单击 ASP NET Web 表单页面上的 保存 按钮时 我立即收到以下信息 找不到指定的URL 当我在网络服务器上使用浏览器尝试此操作时 不会发生这种情况 以前有人遇到过这个问题吗 这是某种安全问题吗 More information
  • Laravel preg_match():找不到结束分隔符“/”

    我正在开发 Laravel 4 2 我尝试使用验证器通过正则表达式验证名称字段 这是我的规则如下 public static rules save class subjects gt required regex 0 9 0 9 但是 一旦
  • C# 序列化对象集合

    我正在开发一个 ASP NET 应用程序 该应用程序有一个继承自定义对象列表的类 public class UserRoleList List
  • Express.js 无效的 JSON GET 请求

    在编写 API 时 我遇到了一个非常棘手的错误 当我尝试执行res send INSERT JSON 带有 Content Type 标头application json 大多数 AJAX 的默认设置 我得到一个invalid json错误
  • 使用命令将单词与 vim 中的指定列对齐

    如何将整个文件中的单词移动或移动到指定列 例如如下所示 前 123 ABC 112 XYZS 15925 asdf 1111 25asd 1 qwer After 123 ABC 112 XYZS 15925 asdf 1111 25asd
  • 在一组两种可能性中选择唯一的行

    问题本身很简单 但我无法找出在一个查询中完成此任务的解决方案 这是我对问题的 抽象 以便进行更简单的解释 我将保留我最初的解释 但这里有一组示例数据和我期望的结果 好的 这是一些示例数据 我用空行分隔对 Key Col Together t
  • JQuery 表单验证不适用于新创建的元素

    我在使用 Jquery 验证插件时遇到了一些问题 想知道是否有人可以提供帮助 目前 该插件适用于当前页面上的任何表单元素 addRelease validate submitHandler function form form submit
  • 如何在 XSD 中引用全局类型?

    如何实现对 simpleType 的 XSD 内部引用 我遇到了您在下图中看到的错误 XSD
  • Delphi中OnKeyDown的问题

    我正在与德尔福合作 我想跟踪按下了哪个键 我正在使用 TForm 的 KeyDown 事件 它工作正常 但问题是 如果我按小写字母 但它会给出该字母的大写字母 如何识别按下的按键是小写还是大写 如果您想跟踪字母数字键 那么您应该使用KeyP