3

IDE のメインフォームで ShellTreeView/ShellListView を使用して Delphi 2009 プロジェクトを閉じると、Index out of bounds(0) 例外が生成されます。例外を排除できるように、ShellTreeView/ShellListView の修正はありますか?

4

4 に答える 4

3

それは私がこれについて聞いたのは初めてです。慰めになる場合は、ここで再現できます。

最初に行うべきことは、おそらくQuality Centralにバグ レポートを提出し、Codegear NNTP ニュースグループで質問することです。

また、TCustomShellListView.GetFolder を以下のコードに変更してみて、うまくいくかどうかを確認してください。パッケージを再構築する必要があります。また、何らかの理由で D2009 がこのパッケージの 2 つ目のコピーを Windows\System32 にインストールすることに注意してください。私はそれを(今のところ)何の悪影響もなく改名しました。

function TCustomShellListView.GetFolder(Index: Integer): TShellFolder;
begin
  if Index < FFolders.Count then
    Result := TShellFolder(FFolders[Index])
  else
    Result := NIL;
end;
于 2008-12-31T16:57:39.963 に答える
0

これまでのところ、問題を解決するために提案されたものは何もありません...しかし、デモ プロジェクトから ShellListView コンポーネントを削除してからプロジェクトを閉じても、例外は作成されません。問題は、ShellTreeView ではなく、ShellListView コンポーネントにあると思います。

問題は見た目よりも大きい場合があります。

于 2009-01-01T14:51:32.323 に答える
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;
于 2009-09-14T14:50:32.027 に答える
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;
于 2009-01-01T01:26:01.183 に答える