3

フォームを開くと、突然エラー メッセージが表示されます。

"フォームの読み取りエラー: 'X'"

キャッシュが初期化されていません。最初に TCache.Initialise を呼び出す必要があります。エラーを無視して続行しますか? 注: エラーを無視すると、コンポーネントが削除されるか、プロパティ値が失われる可能性があります"

「キャッシュが初期化されていません」ビットは、クラスの 1 つによって発生する例外です。

私の最初の質問は、「プログラムの実行」を要求せずに Delphi IDE が私のコードを実行するのはなぜですか? どのコードを実行しますか? これをオフにする方法はありますか?

第二に、このエラーをデバッガーでトラップして、コール スタックのどこでこの例外が発生したかを特定する方法はありますか? 例外がスローされる場所にブレークポイントを設定しようとしましたが、Delphi はそれを無視します。

また、この例外がどこから来ているのかを突き止めたら、「デザインモード」になっていて、そのコードを実行していないか、別のコードを実行しているのかを知る方法はありますか? または、デザイン モードの場合は、そのコードをまったく実行しないでください。[更新: デザイン モードで実行中のコードを停止する方法については、Francois の回答を参照してください。]

4

2 に答える 2

4

IDE が DFM をロードすると、フォーム デザイナ内にライブ オブジェクトが作成されます。これは、コンポーネントのランタイム コードが実際に IDE 内で実行されることを意味します。そのため、コンポーネント コードは、設計時にコードの一部の実行をスキップする場合TComponent.ComponentState、フラグのプロパティをチェックする必要があります。csDesigning

于 2012-06-07T06:41:54.593 に答える
4

IDE が dfm を読み込もうとしているときに実行される、作成したコンポーネント コードがいくつかあります。

コンポーネントが「デザインモード」であるかどうかをコードでテストできます

  if (csDesigning in ComponentState) then
于 2012-06-07T02:16:39.587 に答える