gpt4 book ai didi

delphi - 如何正确显示基于资源管理器的右键菜单

转载 作者:行者123 更新时间:2023-12-03 15:30:52 27 4
gpt4 key购买 nike

我使用 Sertac Akyuz 在此回答中放置的代码创建此菜单: Show the default right-click menu - Delphi 并且效果很好,但是有一个问题:当我单击创建的菜单:删除(删除要回收的文件)时,它会询问我:您确定要删除吗?

当我单击"is"时 - 它工作正常,但是当我单击“否”时 - 它显示一个错误,我在调试器中看到,错误在线:

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_SUCCESSNO_ERROR 相同。 p>

我的解释是,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 - 如何正确显示基于资源管理器的右键菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15452692/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com