Delphi如何实现像资源管理器一样的右键菜单显示功能?

2026-04-10 16:572阅读0评论SEO基础
  • 内容介绍
  • 相关推荐

本文共计424个文字,预计阅读时间需要2分钟。

Delphi如何实现像资源管理器一样的右键菜单显示功能?

我使用Sertac Akyuz的代码在这里创建了菜单:显示默认的右键菜单 - Delphi,它运行良好,但有个问题:当我点击创建菜单时:删除(删除文件到回收站) - 它问我:你确定要删除吗?

我使用Sertac Akyuz在这里回答的代码创建了这个菜单:
Show the default right-click menu – Delphi
它运作良好,但有问题:
当我点击创建菜单时:删除(删除文件到回收) – 它问我:你确定要删除吗?

当我点击是 – 它工作正常,但当我点击否 – 它显示我的错误,
我在调试器中看到错误在线:

OleCheck(ContextMenu.InvokeCommand(CommandInfo)); Error: ###(gdb unparsed remainder:s 0x0 out of bounds>)###.

我使用Lazarus,但我认为,在Delphi中它也是实际的.

在我看来,菜单(窗口)尝试返回我的程序答案 – 不,并在这种情况下发生错误.

如何解决这个问题呢?如何正确解决这种情况并回答“否”?

您尚未指定错误编号,但是当我尝试复制这些步骤时,OleCheck调用失败并显示0x80270000.保存错误位的高字部分是0x27(39),即’winerror.h’中定义的FACILTY_SHELL.如您所见,低位字为’0′,shell不提供任何特定的错误代码,实际上代码与ERROR_SUCCESS或NO_ERROR相同.

我的解释是,shell只是通知命令(删除操作)失败.失败是由于用户取消操作.我的建议是,根据需要相应地修改代码.您知道操作失败,但您可以选择忽略它,或者可能通知用户.也许是这样的:

var ... InvokeResult: HRESULT; begin ... // OleCheck(ContextMenu.InvokeCommand(CommandInfo)); InvokeResult := ContextMenu.InvokeCommand(CommandInfo); if not Succeeded(InvokeResult) then begin if LoWord(InvokeResult) = NO_ERROR then ShowMessage('Command did not carried out') else OleError(InvokeResult); end; ...

Delphi如何实现像资源管理器一样的右键菜单显示功能?

本文共计424个文字,预计阅读时间需要2分钟。

Delphi如何实现像资源管理器一样的右键菜单显示功能?

我使用Sertac Akyuz的代码在这里创建了菜单:显示默认的右键菜单 - Delphi,它运行良好,但有个问题:当我点击创建菜单时:删除(删除文件到回收站) - 它问我:你确定要删除吗?

我使用Sertac Akyuz在这里回答的代码创建了这个菜单:
Show the default right-click menu – Delphi
它运作良好,但有问题:
当我点击创建菜单时:删除(删除文件到回收) – 它问我:你确定要删除吗?

当我点击是 – 它工作正常,但当我点击否 – 它显示我的错误,
我在调试器中看到错误在线:

OleCheck(ContextMenu.InvokeCommand(CommandInfo)); Error: ###(gdb unparsed remainder:s 0x0 out of bounds>)###.

我使用Lazarus,但我认为,在Delphi中它也是实际的.

在我看来,菜单(窗口)尝试返回我的程序答案 – 不,并在这种情况下发生错误.

如何解决这个问题呢?如何正确解决这种情况并回答“否”?

您尚未指定错误编号,但是当我尝试复制这些步骤时,OleCheck调用失败并显示0x80270000.保存错误位的高字部分是0x27(39),即’winerror.h’中定义的FACILTY_SHELL.如您所见,低位字为’0′,shell不提供任何特定的错误代码,实际上代码与ERROR_SUCCESS或NO_ERROR相同.

我的解释是,shell只是通知命令(删除操作)失败.失败是由于用户取消操作.我的建议是,根据需要相应地修改代码.您知道操作失败,但您可以选择忽略它,或者可能通知用户.也许是这样的:

var ... InvokeResult: HRESULT; begin ... // OleCheck(ContextMenu.InvokeCommand(CommandInfo)); InvokeResult := ContextMenu.InvokeCommand(CommandInfo); if not Succeeded(InvokeResult) then begin if LoWord(InvokeResult) = NO_ERROR then ShowMessage('Command did not carried out') else OleError(InvokeResult); end; ...

Delphi如何实现像资源管理器一样的右键菜单显示功能?