2013-03-16 56 views
3

我創建一個使用代碼此菜單按Sertac Akyuz在回答放在這裏: Show the default right-click menu - Delphi 和它的作品不錯,但有問題:當我在創建菜單中單擊 :刪除(刪除文件來回收) - 它問我:Are you sure want to delete?如何正確顯示的基於Internet Explorer的右鍵菜單

當我點擊是 - 它工作正常,但是當我點擊沒有 - 它讓我看到一個錯誤, 我在調試器中看到的,錯誤是路線:

OleCheck(ContextMenu.InvokeCommand(CommandInfo)); 

Error: ###(gdb unparsed remainder:s 0x0 out of bounds>)###. 

我使用拉撒路,但我認爲,噸德爾福的帽子也是實際的。

在我看來,菜單(Windows)試圖返回到我的程序的答案 - 沒有,並在這種情況下發生錯誤。

如何解決這個問題?如何正確解決這個問題,回答「否」?

+0

請不要標記爲德爾福調試運行時問題在拉撒路。這很混亂。如果你問一個調試問題,請選擇一個工具。 – 2013-03-16 21:39:53

+1

嘗試在[Double Commander](http://doublecmd.sourceforge.net/)資源中挖掘它的實現:'svn co https://doublecmd.svn.sourceforge.net/svnroot/doublecmd doublecmd'。
我不確定,但可能會在這個文件中找到答案:'doublecmd \ trunk \ src \ platform \ win \ ushellcontextmenu.pas' – Abelisto 2013-03-16 20:10:07

回答

3

您還沒有指定錯誤號碼,但是當我嘗試複製這些步驟時,OleCheck呼叫失敗,請撥打0x80270000。高位字部分保存錯誤位,爲0x27(39),即'winerror.h'中定義的FACILTY_SHELL。正如你所看到的,低字是'0',外殼沒有給出任何特定的錯誤代碼,實際上代碼與ERROR_SUCCESSNO_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; 
    ... 
+0

謝謝先生。塞爾特克Akyuz。有用。 – user2154246 2013-03-17 05:07:28

+0

但是,如果我不想分析結果,我可以這樣做: 嘗試OleCheck(ContextMenu.InvokeCommand(CommandInfo));除了結束; 或簡單地說:InvokeResult:= ContextMenu.InvokeCommand(CommandInfo);而不分析結果。 – user2154246 2013-03-17 05:15:40

+0

你的代碼是正確的 - 沒有菜單項:重命名。 在我的應用程序中,我不需要此項目,但理論上:我們如何修改代碼以顯示項目:重命名並處理該項目的單擊,並顯示特殊窗體,用戶可以在其中重命名。 – user2154246 2013-03-17 05:36:32

相關問題