为什么我的 Delphi FindDialog 中的光标没有变成沙漏形?

2024-06-26

我只是用以下命令打开 FindDialog:

FindDialog.Execute;

在我的 FindDialog.OnFind 事件中,我想将光标更改为沙漏以搜索大文件,这可能需要几秒钟。所以在 OnFind 事件中我这样做:

Screen.Cursor := crHourglass;
(code that searches for the text and displays it) ...
Screen.Cursor := crDefault;

发生的情况是,在搜索文本时,光标正确地变为沙漏形(或 Vista 中的旋转圆圈),然后在搜索完成时返回到指针。

然而,这只发生在主窗体上。 FindDialog 本身不会发生这种情况。搜索期间默认光标保留在 FindDialog 上。当搜索发生时,如果我将光标移到 FindDialog 上,它会更改为默认值,如果我将其移开并移到主窗体上,它会变成沙漏。

这似乎不应该发生。我是否做错了什么,或者是否需要做一些特殊的事情才能使光标在所有表单上成为沙漏?

作为参考,我使用的是 Delphi 2009。


我想这其中的原因是有的。与查找对话框不是一个表单而是一个对话框(通用对话框)有关。

您可以尝试设置类光标(对对话框的控件没有影响);

procedure TForm1.FindDialog1Find(Sender: TObject);
begin
  SetClassLong(TFindDialog(Sender).Handle, GCL_HCURSOR, Screen.Cursors[crHourGlass]);
  try
    Screen.Cursor := crHourglass;
    try
//    (code that searches for the text and displays it) ...
    finally
      Screen.Cursor := crDefault;
    end;
  finally
    SetClassLong(TFindDialog(Sender).Handle, GCL_HCURSOR, Screen.Cursors[crDefault]);
  end;
end;

EDIT

另一种方法是在搜索期间子类化 FindDialog 并使用“SetCursor”响应 WM_SETCURSOR 消息。如果我们阻止进一步处理消息,对话框上的控件将不会设置自己的光标。

type
  TForm1 = class(TForm)
    FindDialog1: TFindDialog;
    ...
  private
    FSaveWndProc, FWndProc: Pointer;
    procedure FindDlgProc(var Message: TMessage);
    ...
  end;

....
procedure TForm1.FormCreate(Sender: TObject);
begin
  FWndProc := classes.MakeObjectInstance(FindDlgProc);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  classes.FreeObjectInstance(FWndProc);
end;

procedure TForm1.FindDialog1Find(Sender: TObject);
begin
  FSaveWndProc := Pointer(SetWindowLong(FindDialog1.Handle, GWL_WNDPROC,
        Longint(FWndProc)));
  try
    Screen.Cursor := crHourGlass;
    try
//    (code that searches for the text and displays it) ...
    finally
      Screen.Cursor := crDefault;
    end;
  finally
    if Assigned(FWndProc) then
      SetWindowLong(FindDialog1.Handle, GWL_WNDPROC, Longint(FSaveWndProc));
//    SendMessage(FindDialog1.Handle, WM_SETCURSOR, FindDialog1.Handle,
//        MakeLong(HTNOWHERE, WM_MOUSEMOVE));
    SetCursor(Screen.Cursors[crDefault]);
  end;
end;

procedure TForm1.FindDlgProc(var Message: TMessage);
begin
  if Message.Msg = WM_SETCURSOR then begin
    SetCursor(Screen.Cursors[crHourGlass]);
    Message.Result := 1;
    Exit;
  end;
  Message.Result := CallWindowProc(FSaveWndProc, FindDialog1.Handle,
      Message.Msg, Message.WParam, Message.LParam);
end;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我的 Delphi FindDialog 中的光标没有变成沙漏形? 的相关文章

  • EOutOfMemory 使用 Delphi 创建大型 XML

    我正在使用 Delphi 从关系数据库中的数据创建 XML 文档 它在小数据集上测试得很好 但是当我尝试将数据集的大小扩展到生产级别时 它最终在节点创建期间因 EOutOfMemory 异常而崩溃 我正在使用放在表单上的 TXMLDocum
  • 在 Delphi 中的 SOAP 标头中发送简单字符串

    我需要发送这样的东西
  • 供所有 Win32 程序员在 Windows Aero Glass(DWM、GDI、GDI+)上绘图的文档和 API 示例

    我正在寻找良好的资源来学习使用 Win32 GDI API 或任何替代它的内容 以便使用 Win32 API 直接在玻璃窗体上进行绘制和绘制 当我使用 Delphi 时 我将其标记为 Delphi 或 Visual C 您能找到的任何代码示
  • 任意通用列表的通配符

    我有一个类 MyClass 它不是通用的 包含任意 TList 并对其执行某些操作 我希望用通用 TList 替换 TList 但 MyClass 必须保持非通用 由于 Delphi 是不变的 这样的事情是行不通的 list1 TList
  • 将delphi stringgrid导出到excel

    我正在尝试将数据从delphi 7 中的stringgrid 导出到microsoft excel 我一直在使用这段代码来做到这一点 objExcel TExcelApplication Create nil objExcel Visibl
  • delphi THashSHA2 在大文件上返回错误的 SHA256

    Data Cloud CloudAPI pas has class function TCloudSHA256Authentication GetStreamToHashSHA256Hex const Content TStream str
  • 如何使用 Delphi 播放单音或自定义波形?

    我查了一些代码 似乎一切都在创建一些数学函数波 但我想要一个单音 或者用自定义单音制作的自定义波 我读了这个如何生成不同频率的连续音调 https stackoverflow com questions 7742377 how can i
  • 使用 Delphi 的 7-Zip?

    我想使用 Delphi 的 7 Zip DLL 但一直找不到合适的文档或示例 有谁知道如何使用 Delphi 的 7 Zip DLL 自版本 1 102 起JEDI 代码库 http wiki delphi jedi org index p
  • 当系统文件实际存在时找不到它

    系统找不到alg exe但它确实存在 c windows system32 alg exe 我最近从 Win 7 x86 迁移到 x64 当我使用 x86 时 我对此没有任何问题 尝试了 Delphi 7 和 XE2 我正在使用的代码 if
  • 如何制作自定义组件属性?

    我需要帮助来制作一个控件属性 当您单击它时 它会弹出一个自定义对话框 例如设置 就像 TPicture 一样 有什么想法或建议吗 如果您的类用作其他组件的属性 并且您想使用对象检查器来调用对话框 那么您必须实现并注册一个自定义属性编辑器 例
  • 在这些情况下限制破折号的正则表达式模式

    Scenario 我正在使用第三方文件重命名软件 该软件是用 Delphi 编写的 并且具有 pascal 脚本支持 该应用程序允许使用正则表达式来重命名文件 这意味着 如果我需要对文件名执行的操作不能仅使用一个正则表达式来完成 那么我可以
  • 控制台应用程序比 GUI 应用程序运行得更快吗? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我对编程世界比较陌生 我有几个性能问
  • 惠普定制 OEM Windows 上的 Delphi 平台错误

    我在设置我的计算机以便运行 Delphi 时不断遇到相同的错误 我已经在PLATFORM环境变量 将其转换为 win32 但仍然给出相同的错误 错误错误 平台变量 HPD 无效 PLATFORM 必须是以下之一 Win32 Win64 An
  • Delphi XE3,丑陋的 StringGrid 边框

    与 Delphi 7 相比 为什么 XE3 中的 String Grid 边框如此不清晰 如何解决这个问题 Delphi 2010 之后所有的网格都是主题化的 要在网格上禁用新主题 您必须设置属性 在对象检查器中将 DrawingStyle
  • Chrome扩展程序自定义光标

    我构建了一个 Google Chrome 扩展程序 在网站中放置一些 IMG 标签 hover 上的此 img 标记必须显示自定义光标 该扩展使用 jQuery 作为其注入的核心脚本 我尝试了以下方法 1 var cursor url ch
  • Delphi 生成的 Dylib 在 OSX 上的可靠部署

    我想在 OSX 上部署一个 dylib 它是用 Delphi 创建的 这个 dylib 应该是可由第三方应用程序加载 这看起来像是一个重复的问题 但经过大量搜索后 我找不到答案 这和这个是同一个问题 https forums embarca
  • 就 ADO 而言,nvarchar(max) 有多大?

    我正在尝试使用针对 ADO 的参数化查询 http msdn microsoft com en us library windows desktop ms677209 28v vs 85 29 aspx INSERT INTO Foo 名称
  • 对角画笔样式给我黑色区域

    我想用以下代码在画布上绘制一个对角线十字 InFlateRect r 1 1 Canvas Brush Color clYellow Canvas Brush Style bsFDiagonal Canvas Pen Color clRed
  • 如何使用 Delphi XE 发送 WCF 的 ClientCredentials

    我开发了一个带有自定义的 WCF 服务UserNamePasswordValidator with a basicHttpBinding使用 HTTPS 它与 Net 客户端配合得很好 使用 ClientCredentials 发送用户名和
  • 使用 Indy 组件下载、暂停和恢复下载

    实际上我正在使用 TIdHTTP 组件从互联网下载文件 我想知道是否可以使用此组件或另一个 indy 组件暂停和恢复下载 这是我当前的代码 这可以正常下载文件 没有简历 但是 现在我想暂停下载关闭我的应用程序 当我的应用程序重新启动时 然后

随机推荐

  • 如何将宏定义从“make”命令行参数(-D)传递到C源代码?

    我通常使用以下选项将宏定义从 make command line 传递到 makefile D名称 值 该定义可在 makefile 中访问 我还使用类似的编译器选项将宏定义从 makefile 传递到 源代码 Dname value 许多
  • Webpack,优化分块给出“冲突:多个块将资源发送到同一文件名”错误

    Info 我正在尝试生成自己的 webpack 配置 但在使其正常工作时遇到一些问题 Problem 当尝试使用优化将文件分割成块时 我收到如下错误 错误 冲突 多个块将资产发送到相同的文件名 static js bundle js 块 m
  • 需要使用 SQL 查询中的值更新 XML 字符串中的多个节点

    我有一个 SQL 存储过程局部变量 DocList 声明 DocList XML 其中包含以下 XML 数据
  • 升级 PHP 本地实现的 Olson tz 数据库

    我正在开发一个大量使用时区的网站 该网站需要处于可用的绝对最新 tz 信息的最前沿 我已经通过tz 邮件列表 http news gmane org gmane comp time tz 我不知道的是如何让 PHP 安装在我的开发计算机和
  • 如何配置 Teamcity 以忽略某些测试

    有没有办法配置 Teamcity 忽略某些测试 我只需要在本地运行这些测试 当它们在 Teamcity 中运行时 必须被忽略 我正在使用 nunit 这可以是指令 属性等 您可以通过向测试中添加测试类别来做到这一点 Category Loc
  • 滚动/缩放 pixi.js 画布

    下面是在 pixi js 使用 WebGL 画布上放置一些文本的简单方法 我们如何滚动 缩放画布的显示部分 即鼠标按下 拖动应该移动 我想实现的示例 http s419743653 onlinehome fr things test2 ht
  • Windows 上的 ruby​​ 中出现 SSL 错误

    我收到以下错误 C Users user Desktop folder gt ruby exchange rate rb C Ruby23 x64 lib ruby 2 3 0 net http rb 933 in connect nonb
  • 识别出现在指定位置的所有元素

    jQuery 中是否有任何方法可以选择位于特定位置的所有元素 例如选择位于 left 100 和 top 300 的元素 另一个 div 位于同一位置 单击时我想获取两个 Div 的 ID 如果我可以选择位于一系列位置的元素 那就太好了 h
  • 是否有与可移植类库一起使用的 RestSharp 实现?

    当我尝试使用 nuget 将 RestSharp 添加到可移植类库项目时 我得到以下信息 无法安装软件包 RestSharp 104 1 您正在尝试安装 这个包到一个目标项目中 NETPortable Version v4 0 Profil
  • 为什么 ColdFusion 的设计者决定从 1 而不是从 0 开始索引数组?

    我只是很好奇这一点 有谁知道他们为什么打破惯例 谢谢 夏兰 Cory 如果你知道谁潜伏在 StackOverflow 上 你会感到惊讶 你说得非常对 CFML 的最初设计是为了允许非程序员构建复杂的 Web 应用程序 ColdFusion
  • Android - 滑动删除RecyclerView

    我正在尝试实现与 Gmail 应用程序 滑动到存档 相同的滑动删除功能 我尝试了很多教程 但没有一个像 gmail 那样运行得那么快 我不喜欢在外部库上工作 我该怎么做 Edit 到目前为止我的代码 ItemTouchHelper Simp
  • 如何正确调用 LsaLogonUser 进行交互式登录?

    我正在尝试使用 LsaLogonUser 创建交互式登录会话 但它总是返回STATUS INVALID INFO CLASS 0xc0000003 从网上查到的内存布局KERB INTERACTIVE LOGON结构很棘手 但我很确定我做得
  • 将环境变量从 fastlane 传递到 Xcode 构建阶段脚本

    是否可以 如果可以 如何 将环境变量从运行 fastlane 的脚本传递到 Xcode 运行脚本阶段 我的最终目标是在运行脚本阶段读取当前的 git 分支名称 我们的 CI 由 Team Foundation Server 运行 它执行以下
  • ListView选择单个项目,wpf

    我有一个列表视图 它的项目源是一个列表 我希望用户只选择一项 当我将列表视图的 SelectionMode 设置为 single 时 用户仍然可以选择多个项目 并且列表视图似乎变得疯狂并选择用户未选择的项目 看起来很奇怪 任何人都知道可能是
  • 捕获非特定异常(例如 System.Exception)是一种不好的做法吗?为什么?

    我目前正在进行代码审查 下面的代码让我跳了起来 我发现这段代码存在多个问题 你是否同意我的观点 如果是这样 我该如何向我的同事解释这是错误的 顽固型 捕获一般异常 Exception ex 使用 if ex 是某物 而不是另一个 catch
  • CSS 底部边框悬停“抖动”

    我有一个导航栏 当您将鼠标悬停在导航按钮上时 我想给它一个橙色的底部边框 唯一的问题是 每当您悬停时 边框都会使内容 导航按钮 抖动 这是不应该的 另外 我的导航栏上已经有一个黑色的底部边框 因此无法更改它 HTML div ul li a
  • 关闭表单多选按钮单击 vuejs

    我有 vue 材质多选的 html 设计 我希望单击按钮即可关闭多选选项 Here is my design 我试过这个 methods selectAgents this refs selectAgent el children 0 cl
  • 数据库设计:循环依赖

    想象一下以下数据库 表 companies 包含字段 id name 和旗舰产品 ID 表 products 有字段 id name 和 company id 一家公司必须有一款旗舰产品 1 1关系 所有产品都有一个公司 1 N关系 当使用
  • 如何找出在哪个提交中添加了特定代码?

    我想知道我在哪个提交中添加了下面给出的代码 if getListView getChildCount 0 getActivity findViewById android R id empty setVisibility View VISI
  • 为什么我的 Delphi FindDialog 中的光标没有变成沙漏形?

    我只是用以下命令打开 FindDialog FindDialog Execute 在我的 FindDialog OnFind 事件中 我想将光标更改为沙漏以搜索大文件 这可能需要几秒钟 所以在 OnFind 事件中我这样做 Screen C