0

古い Delphi 7 アプリケーションを持っていますが、いくつかの変更を行った後、「アクセス違反 ... 'ntdll.dll' で ...」というメッセージが表示されます。このメッセージは 4 回繰り返されます。おそらく、Windows がペイントできないことを意味します。何か:その後、すべてが正しく機能します。

メッセージをトリガーする実際の行は次のとおりです。

Tester.FormTester.Parent := main.FormMain.TesterSheet;

エラーメッセージの後、親は正しく設定されています。

  Tester.FormTester.Align := alClient;

FormTester を TesterSheet のクライアント領域に合わせて正しく動作します。

FormTester は以前に作成されていますが、表示されていません。最初に表示しても問題は解決しません。TesterSheet は以前に作成されていますが、表示されていません。他の親 (Nil 以外) を使用しても問題は解決しません。待っても問題は解決しません。Win7 と WinXP の間で移動しても、問題は変わりません。

Delphi IDE で実行すると、IDE がキャッチして例外として表示する同じエラーのみが表示されます。例外を処理 (トレース イン) すると、以前と同じエラー メッセージ ボックスが表示されます。(例外/メッセージを繰り返す)

この問題の原因は何ですか? 提案された解決策は何ですか?

4

2 に答える 2

0

コメントで示唆されているように、「すべてのフォームとコンポーネントをチェックしました」。私はすでにすべてのイベントに精通していたので、問題の原因がイベント プロパティではないことをすでに知っていました。

しかし、予想していなかったコンボボックスが 2 つ見つかりました。

Delphi / Windows コンボ ボックスの空の文字列がアクセス例外を引き起こす で説明されているように、Delphi 7.0 コンボ ボックスには、空の行にアクセスするとアクセス違反エラーが発生するという既知の問題があります: http://qc.embarcadero.com/ wc/qcmain.aspx?d=2246 .

明確な理由はありませんが、この既知の問題は、フォームの親が設定されたときに発生しました。

考えられる解決策には、コンボボックスの削除、ライブラリへのパッチ適用、7.1 サービス パックの適用、またはアップグレードが含まれます。

この場合、コンボ ボックスのデフォルトの文字列リストから空の行を削除することで問題が解決されました。

于 2013-07-23T04:00:16.373 に答える