Delphi 2009 ShellTreeView / ShellListView修复

时间:2008-12-31 16:39:22

标签: delphi delphi-2009

当在IDE中的主窗体上使用ShellTreeView / ShellListView关闭Delphi 2009项目时,索引超出范围(0)会生成异常。是否修复了ShellTreeView / ShellListView,以便消除异常?

4 个答案:

答案 0 :(得分:3)

这是我第一次听说过这个。如果有任何安慰我可以在这里重现它。

您应该做的第一件事可能是在Quality Central中提交错误报告,并询问Codegear NNTP新闻组。

另外,尝试将TCustomShellListView.GetFolder更改为下面的代码,看看你是如何继续的。您需要重建软件包 - 并注意由于某种原因D2009在Windows \ System32中安装此软件包的第二个副本。我改名(到目前为止)没有任何不良影响。

function TCustomShellListView.GetFolder(Index: Integer): TShellFolder;
begin
  if Index < FFolders.Count then
    Result := TShellFolder(FFolders[Index])
  else
    Result := NIL;
end;

答案 1 :(得分:0)

{ TCustomShellTreeView }
...
  TCustomShellTreeView = class(TCustomTreeView, IShellCommandVerb)
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override; //$$jp shellctrl.pas 26.08.2007: missing "override"
    procedure Refresh(Node: TTreeNode);
...

destructor TCustomShellTreeView.Destroy;
begin
  //$$jp: ClearItems;
  //$$jp: raises EInvalidOperation and access-violations (shellctrl.pas 26.08.2007)
  FRootFolder.Free;
  inherited;
end;

答案 2 :(得分:0)

到目前为止,没有任何建议可以解决问题...但是如果我从一个演示项目中删除ShellListView组件然后关闭项目,则不会创建任何异常。我认为问题在于ShellListView组件而不是ShellTreeView。

问题可能比看上去要大。

答案 3 :(得分:0)

问题在设计时出现

以下是TShellListView组件应用于ShellCtrls.pas文件的解决方案:

destructor TCustomShellListView.Destroy;
begin
  ClearItems;
  if not (csDesigning in ComponentState) then // Avoid design time error
  FFolders.Free;
  FreeAndNil(FRootFolder);
  inherited;
end;

procedure TCustomShellListView.DestroyWnd;
begin
  ClearItems;

  // Avoid error in inherited DestroyWnd procedure :
  if csDesigning in ComponentState then
  Items.Count := 0;
  inherited DestroyWnd;
end;