質問

私たちは、そのフォームのデータベースにEXEへの外部に保持されているアプリケーションのためのC ++ Builderを使用しています。アプリケーションコードであるC ++

これは、私たちは再コンパイルせずにフォームとフォーム/アクションを変更することができます。ここでは、フォームを読み込むの仕事を取得するコードの抜粋です。

 RegisterClass(__classid(TButton));
 RegisterClass(__classid(TEdit));
 RegisterClass(__classid(TRadioGroup));
 RegisterClass(__classid(TGroupBox));
 RegisterClass(__classid(TCheckBox));
 RegisterClass(__classid(TRadioButton));
 RegisterClass(__classid(TTimer));
 RegisterClass(__classid(TListBox));
 RegisterClass(__classid(TComboBox));
 RegisterClass(__classid(TBitBtn));
 RegisterClass(__classid(TSpeedButton));
 RegisterClass(__classid(TMaskEdit));
 RegisterClass(__classid(TProgressBar));

 ms  = new TMemoryStream;
 ms2 = new TMemoryStream;

 // Loading Module into Memory Stream
 ms->Position = 0;
 ms->LoadFromFile(Filename->Text);
 ms->Position = 0;
 pModule = new TForm(this);

 // Reading Module Definition
 if( !Inputisbin->Checked )
 {
        ms2->Position = 0;
        ObjectTextToBinary(ms, ms2);
        ms2->Position = 0;
        ms2->ReadComponent(pModule);
 }
 else
        ms->ReadComponent(pModule);


 Log->Lines->Add("Displaying Module");
 pModule->Show();

私は、私が参照されるすべてのクラスを登録するために呼び出すことができます任意の組み込み関数があるかどうかを知るために興味があります。私はそれがすべてのオブジェクトのために自分をメモリストリームまたはファイルをスキャンし、それぞれのRegisterClassを呼び出すことが可能だが、誰かが既にこれをしなかった機能を知っていた期待していたと仮定します。

など、すべてのフォームは、すべてのこれらのクラスを使用するかので、唯一の実際に継承されたものを登録するにはいいだろうと。

役に立ちましたか?

解決

あなたがここに持っているアプローチは、私の意見では、正確に正しいです。私はVCLで取り上げたことがない)ReadComponent(としての私自身のクラスファクトリとObjectToText / TextToObject機能を実装する必要がありましたが、私は、Delphi2を使用して、同じアプローチ年前にかかっています。

唯一必要なクラスを登録するあなたの第二の点では、確かに彼らは一度だけ登録する必要がありますか?そして、クラスが登録する必要があるかどうかを判断するのオーバーヘッドは、すべてのものを登録するコストを上回るだろう。そのまま繰り返しますが、私はそれを残してます。

他のヒント

私は、既存の機能を知らない - 私には、しなければならないことは非常に稀なことです。データベースにフォームDFMSを格納するアプローチは、(彼らは?ユニットのためのCPPおよびHファイルに分けて保存されている)も奇数です。私は、あなたが「これは、私たちは、再コンパイルせずにフォームとフォーム/アクションを変更することができます」と言う知っているが、個人的に私は、DLL、再コンパイルでそれらを格納します - 少なくとも、その後、ビルドシステムに依存し、それはなるだろうバージョン管理とあなたのユニットは、「単位」として保存されています。私は、私はあなたのシステム要件を知らない認め、あなたはおそらくそれをあなたの方法を行うための十分な理由を持っています。

しかし、あなたのアプローチ与えられた私は、ストリームをスキャン対象の句を探しているとReadComponentはおそらく最善のアプローチで呼び出す前に、それらのコンポーネントを登録すると考えます。

別途DFMを保存する(だけのイベントおよびアクションハンドラを変更するために)まだメインアプリケーションにコンパイルCPPおよびHファイルを残します。それから、あなたはすでにコンポーネントが登録して内蔵持っているので、これは完全に不必要ではないでしょうか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top