Board logo

Subject: 关于 CnShellUtils 中DisplayContextMenu显示文件上下文右键菜单bug [Print This Page]

Author: dongshengyun    Time: 2011-4-13 14:59     Subject: 关于 CnShellUtils 中DisplayContextMenu显示文件上下文右键菜单bug

我利用关CnShellUtils单元中DisplayContextMenu函数,来显示我需要的右键上下文菜单。
右键上下文菜单显示了,但是其中cut和Copy不起作用。在详细一些就是我选择了一个文件或文件夹,调用DisplayContextMenu函数,右键菜单出来了。点击cut或copy但是在别去paste按钮是灰色不能用。

调用代码如下:

[Copy to clipboard]
CODE:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Menus,
  Dialogs, StdCtrls, VirtualTrees, ImgList, ExtCtrls, ComCtrls, AppEvnts, CnShellUtils;

type  
  TForm1 = class(TForm)
    btn4: TButton;
    btn1: TButton;
    procedure btn4Click(Sender: TObject);
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses
  ShellAPI;

{$R *.dfm}

procedure TForm1.btn4Click(Sender: TObject);
var
  pos: TPoint;
begin
  GetCursorPos(pos);
  pos:= ScreenToClient(pos);
  DisplayContextMenu(Self.Handle, 'C:\Documents and Settings\admin\Desktop\????\Everything\', pos);
end;

procedure TForm1.btn1Click(Sender: TObject);
var
  pos: TPoint;
begin
  GetCursorPos(pos);
  pos:= ScreenToClient(pos);
  DisplayContextMenu(Self.Handle, 'C:\Documents and Settings\admin\Desktop\????\Everything\Everything-1.2.1.371.exe', pos)
end;

end.

希望cnpack的大侠们给解决一下。
Author: dongshengyun    Time: 2011-4-13 15:47

怎么没有人回答解决问题呢?
Author: dongshengyun    Time: 2011-4-18 17:49     Subject: 本文自己回答。

此问题已解决。
因为剪切板是com组件范畴,所以在调用之前应该初始化。
顾在程序主单元加入如下代码即可:
initialization
  OleInitialize(nil);

finalization
  try
    OleUninitialize;
  except
  end;

end.




Welcome to CnPack Forum (http://bbs.cnpack.org/) Powered by Discuz! 5.0.0