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的问题 的相关文章

  • 如何解决内存分段并强制FastMM释放内存给OS?

    注意 32 位应用程序不计划迁移到 64 位 我正在使用一个非常消耗内存的应用程序 并且几乎优化了与内存分配 取消分配相关的所有相关路径 应用程序本身没有内存泄漏 没有句柄泄漏 没有任何其他类型的泄漏 据我所知并经过测试 我无法触及的第 3
  • delphi检查ini文件是否存在

    如何检查 INI 文件是否存在 在特定路径和特定名称下 比如这样 if FileExists c yourinifile ini then ShowMessage c yourinifile ini exists
  • Delphi - 如何将通用参数传递给接受 const 参数数组的函数

    我有一个 基类 其中包含一个 函数 该函数接受 const 数组 类型的参数 如下所示 type TBaseClass class TObject public procedure NotifyAll const AParams array
  • MySQL查看数据是否为NULL

    我需要在 Select 中放置一个 Case 来检查我添加到视图中的数据是否为 NULL 在这种情况下我希望它只输入零 或者不输入零 你的意思是这样的吗 SELECT IF field IS NULL 0 field 还有 IFNULL S
  • 有什么办法可以将2个数组添加到一个数组中吗?

    有没有一种简单通用的方法可以将两个数组添加到一个数组中 在下面的情况下 不可能简单地使用C A B陈述 我想避免每次都为它制定算法 TPerson record Birthday Tdate Name Surname string end
  • Delphi错误数据集未处于插入或编辑模式

    客观的 单击 TRxDBCombo 上的按钮调用搜索框 从搜索框中选择记录时 结果将设置为 TComboEditBox 的字段值 并发布在 TRxMemoryData 数据集中 错误 第二次调用此函数时出现数据集未处于插入或编辑模式 TDB
  • ADODB 组件导致 Win7/Server 2008 上的访问冲突

    我有一段用 Delphi 2005 编写的代码 用于在 LDAP 中搜索用户的特定属性 当在 Windows 7 或 Server 2008 上运行时 我遇到访问冲突 但在 XP 或 2003 上则没有 Function IsSSOUser
  • 使用普通画布/文本输出更新LayeredWindow

    有没有一种方法可以使用画布在表单上绘图 然后使用 updatelayeredwindow 这样表单就不可见 但文本可见 就像只显示文本的半透明表单一样 如果没有 那么有没有办法只用画布 opengl directx 制作某种半透明形式 我想
  • 我可以在“Delphi 2007 for Win32”中使用.NET DLL吗?

    是否可以在 Delphi 2007 for Win32 中使用 NET DLL 我尝试以与 ActiveX 组件相同的方式导入 DLL 但它似乎不起作用 组件菜单 gt 导入组件 gt 导入 NET 程序集 是否可能 如果可以 步骤是什么
  • Delphi线程死锁

    我有时会在销毁某些线程时遇到死锁问题 我尝试过调试该问题 但在 IDE 中调试时似乎从未存在死锁 可能是因为 IDE 中的事件速度较低 问题 当应用程序启动时 主线程会创建多个线程 线程始终处于活动状态并与主线程同步 完全没有问题 当应用程
  • 如何在 Delphi REST 中发布内容类型为“multipart/form-data”的数据?

    我正在尝试使用 REST API 发送请求multipart form data作为内容类型 我总是收到 HTTP 1 1 500 Internal Error 作为响应 我尝试向需要的方法发送请求application x www for
  • Delphi - 自XE8以来如何正确注册图形类?

    我正在编写一个 Delphi 包 它提供了一个新的自定义 TGraphic 对象 允许读取 VCL 组件 如 TImage 中的新图像格式 我最初使用 RAD Studio XE7 开发了这个包 并且运行良好 然而 我最近迁移到了较新的 R
  • 运行delphi客户端自动化程序后excel.exe保持加载状态的原因是什么?

    我编写了一个 Delphi 程序 该程序从单个 XLS 文件的多个不同电子表格中提取数据并将其合并到文本文件中以供以后处理 这是德尔福7console程序 最相关的代码片段的摘录将向您表明 显然 我的程序表现得相当好 或者至少达到了它需要的
  • 使用 OLE 和 Delphi 提高 Word 文档中搜索替换的性能

    经过一些实验 我最终得到了以下代码来在 MSWord 中执行搜索和替换 此代码在页眉和页脚中也能完美运行 包括首页或奇数 偶数页的页眉和 或页脚不同的情况 问题是我需要打电话MSWordSearchAndReplaceInAllDocume
  • 带位图的简单组合框

    如何将位图放入组合框中并将样式设置为简单 例如 Google Chrome 的右侧有星号 Firefox 的右侧有箭头 我尝试了这段代码 procedure TForm2 ComboBox1DrawItem Control TWinCont
  • 如何仅使用 TADOQuery 组件将图像插入数据库

    我有一个简单的基本问题 我正在尝试使用将图像插入数据库Insert与其他列值的语句也使用TADOQuery成分 由于代码已经由某人编写 因此我想在此处放置一些虚拟示例代码 以供您澄清相应的步骤 请注意 这可以正常工作TQuery组件 因为我
  • 如何遍历任意给定集合中的枚举?

    我有很多枚举类型 它们与相应的集合相结合 例如 type TMyEnum meOne meTwo meThree TMyEnums set of TMyEnum 我正在尝试提出一组可以运行的函数any枚举集 而不是为每个枚举编写单独的函数
  • TOpenDialog/NSOpenPanel 无法在沙盒 Delphi 应用程序中工作

    Firemonkey 应用程序中的 TOpenDialog 似乎存在问题 该应用程序已针对 Mac Appstore 进行沙箱处理 我使用XE3 但它也存在于XE2中 我其实在这里找到了一份QC报告 但仍然没有解决 http qc emba
  • Word 2010 自动化:“转到书签”

    我有一个用 Delphi 7 编写的程序 它打开一个基于模板的新 Word 文档 文档打开后 系统会自动跳转到书签 在模板中预定义 并在其中添加一些文本 以下代码在 Word 2003 中工作正常 但会导致invalid variant o
  • 石和磅的格式正确吗?

    我有一个图表 用于显示重量 以英石和磅 lbs 为单位 该图表由记录中的数据填充 对于权重 数据类型为 Double 记录数据是在运行时编辑的 我需要知道一种正确格式化输入数据的方法 为了更好地理解 首先看一下这些示例值 它们表示为石和磅

随机推荐

  • 我可以以某种方式“__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