さて、私の問題は次のとおりです。
基本的にDelphi 2010に移植しているDelphi 5アプリケーションがあります(古いコンポーネントを最新バージョンに置き換え、避けられないAnsi / Unicode文字列の問題を修正するなど)、ある種の問題に遭遇しました。
フォームの 1 つを作成すると、アクセス違反が発生します。調べてみたところ、この理由は、Create で呼び出されたセッターの 1 つが、フォーム上でまだ作成されていないオブジェクトのプロパティを変更しようとしたためであるという結論に達しました。
私はそれを少しトリミングしましたが、コードは基本的に次のようになります。
フォーム宣言:
property EnGrpSndOption:boolean read fEnGrpSndOption write SetGrpSndOption;
フォームの作成:
EnGrpSndOption := false;
実装中:
procedure Myform.SetGrpSndOption(const Value: boolean);
begin
fEnGrpSndOption := Value;
btGrpSnd.Visible := Value;
end;
btGrpSnd.Visible := Value の直前に ShowMessage(BooltoStr(Assigned(btGrpSend), true)) を投げ込むことで、btGrpSnd がまだ作成されていないことが問題であることを確認しました。
btGrpSend は LMDButton ですが、まだ作成されていないため、あまり関係がないと確信しています。
コントロールが割り当てられていることを確認してから値を割り当てる必要があると思いますが、実際のコントロールに設定されていない create で設定された値が発生するだけです。
だから私がやりたいことは、作成が実行される前に、フォーム上のすべてのコントロールが確実に作成されるようにする方法を見つけることです。
これを行う際の支援、または Delphi がフォームを作成する方法に関する情報をいただければ幸いです。それは Delphi 5 で機能していたので、この原因はバージョン間の変更点のリストのどこかに記載されているはずだと思います。結局、Delphi 2010 は Delphi 5 よりもかなり新しいものです。