はフレームを使用する理由を提供するために、コメントに答える:
私は、設計時に、GUIのブロックを構築するために、フレームを検討します既存のコンポーネントとより高度なコンポーネントの組み合わせ。 Delphi 5より前のバージョンでは、子コントロールの子孫であるTCustomPanel
を使用し、これを新しいコンポーネントとして登録しました。フォームにドロップする準備ができました。フレームを使用することで、同じことが簡単にできます。
これにより、必要な機能だけを開発することに集中することができます。右クリックすると、タブコントロールシート、モーダルダイアログ、モードレスダイアログ、MDI子フレーム、標準フレームに埋め込むことができます。 1つのフォームにいくつかを追加することもできます - 埋め込まれたフォームではおそらくないものがあります。要点は、最大限の再利用性のためには、階層化されたアプローチがしばしば必要であり、フレームがそれを助けることです。
フレームは外出先から埋め込むのに適しています。キャプションバーと境界線を表示しないようにフォームを調整する必要があります。通常、CreateParams()
をオーバーライドし、それに応じてウィンドウスタイルを調整します。インスペクタには、埋め込みフォームに意味をなさない多くのフォームプロパティがあります。 IMHOは、最も基本的で一般的なエンティティを使用する必要があります。フォームは、埋め込みのためのコントロールコンテナよりもはるかに優れています。
OTOHフォームに埋め込まれていないフレームを埋め込むことの不利な点についてはわかりません。
編集:
フレームはありませんOnCreate
またはOnShow
などのイベントに関するコメントがあります。実際には、イベントハンドラにはパラメータがないため、フレームの別の利点があると考えています。そのため、多くのものがフォームにハードコードされています。
OnCreate
には、利用可能な情報が多くないため、定数またはINIファイルセクションのフォーム名が使用されてしまい、再利用が非常に困難または不可能になってしまいますフォームを作成したり、複数のインスタンスを作成することができます。一方、フレームを使用すると、メソッドLoadSettings
がそれを実行する明白な方法であり、必要なパラメータを持つことができます。このようにして、コントロールは、それが属する場所、埋め込まれたフレーム/フォームのコンテナに戻されます。再利用可能性は、外部から振る舞いを調整できる場合にのみ可能です。
コンポーネントではなく、ライフタイム管理が必要な格納オブジェクトの場合は、たとえばAfterConstruction
とBeforeDestruction
があります。
のためのインタフェースを作成することによって、私たちに手を与えることができることを行うが、余分なコーディングが必要です)
埋め込みフォームはフレームよりも優れたソリューションになります。 – mghie
mghie、私はあなたと議論しているわけではありません - 何らかの理由を提供してください** **)私はフレームが複数のドキュメントのタブ付きインターフェイスの方が優れている理由を本当に知りたいですか? – migajek
まさに私の考え:代わりにフレームを使うことができるのであれば、誰が埋め込みフォームに行くのだろうか?フレームはほんの少しだけ面倒です。後でフォームとして使用する必要がある場合でも、空のフォーム広告を作成するだけで、align = alClientというフレームを追加することができます。 – dummzeuch