以下のコードは、Toolbar2000 から複製したものです。INI ファイルからツールバーの位置とドックの状態を読み取るルーチンの一部です。初期化中にこのルーチンを呼び出します。以下のコードは、メイン フォーム (OwnerComponent) のすべてのコンポーネントを繰り返し処理し、見つかったツールバーの設定を読み込みます。
for I := 0 to OwnerComponent.ComponentCount-1 do begin
ToolWindow := OwnerComponent.Components[I]; // <------------------------
....
この繰り返しには時間がかかり (数秒 - フォーム上に 1500 個の奇数のコンポーネントがあります)、示されているポイントで範囲エラーが発生します。このループの実行中に、メイン フォームのコンポーネントから 1 つ以上のアイテムが取り除かれていることを確認したので、最終的にループは、これが発生すると、配列の末尾を超えて 1 つにアクセスしようとします (おそらく、これを次のようにコーディングする方がよいでしょう)。これを防ぐための「downto」for ループ)。
とにかく、メインフォームがコンポーネントを失っている場所を見つける必要があります。これを行う方法について、Delphi 2006 のデバッグのヒントを教えてもらえますか? プログラムのこの時点で、メイン フォーム コンポーネントが解放されることは期待できません。
アップデート
設計時にツールバーのデフォルトのドック位置を再配置したときに、別のツールバーがあったドック サイトではなく、別のツールバーに誤ってドッキングしてしまったことがわかりました。ドッキングして、代わりにドックに追加します。したがって、問題を引き起こした配置は次のとおりです。
Dock
Toolbar 1
Control 1
Control 2
Toolbar 2
Control 3
Control 4
そして、修正はそれらを次のように配置することでした:
Dock
Toolbar 1
Control 1
Control 2
Toolbar 2
Control 3
Control 4
ただし、これはまだ TB2k コードのバグを示しています。ネストされたツールバーを処理できるはずだと思われます。