インフレームvsます。何のためのマルチドキュメントインタフェース?
質問
昨日のきっかけでディスカッション"MDI vsブインターフェイス"です。いるかどうかをはっきの開発にはアプリのMDIとして、または必要に組み込む子形成され、フリーの状態でタブます。誰かと指摘しているつもりだったが、い利用TFrames替わり---私の質問はなぜですか?
何プを使用TFramesが埋め込みの形にTFrame?これまでにないわからない為、スイッチングはこれらの要求に書き換えの一部のコー---
(私はカメラをご使用にならない埋め込み設計時にすごい!)
かまいません。
解決
フレームを使用する理由を提供するために、コメントに答えるます:
私は、既存のコンポーネントに、より高度な部品の設計時間の組み合わせで、GUIのブロックを構築するためにフレームを検討します。デルファイ5の前に1子コントロールにTCustomPanel
の子孫を使用しているだろうし、フォームにドロップする準備ができて、新しいコンポーネントとしてこれを登録しました。フレームは少ない手間でも同じことが可能になります。
彼らは、あなたが正確に必要な機能、そして何よりもの開発に専念することができます。 Doneを右あなたは、タブコントロールシートに、モーダルかモードレスダイアログに、MDI子フレームに標準のフレームにそれらを埋め込むことができます。あなたも、一つの形にそれらのいくつかを追加することができます - 1は、おそらく埋め込みフォームとはしないだろう何かを。ポイントは、最大再利用のために層状アプローチがしばしば必要であり、フレームはそれに役立つことである。
フレームは、外出先から埋め込むに適合しています。フォームは、通常、1がCreateParams()
をオーバーライドするでしょうし、それに応じて、ウィンドウのスタイルを調整し、キャプションバーと境界線を表示しないように適合させる必要があります。ただ、埋め込みフォームの意味がありませんインスペクタで、より多くのフォームプロパティがあります。私見1で十分最も基本的で一般的なエンティティを使用する必要があります。フォームだけ埋め込むための制御容器よりもはるかにある。
大藤私は、フォームを埋め込むことがないであろうと、フレームを埋め込むのいずれかの欠点を知りません。
の編集の
フレームは持っていないことをOnCreate
またはOnShow
などのイベントに関するコメントがあります。イベントハンドラは、パラメータを持っていないとして、実際に、私は、フレームの別の利点ことを検討したいので、多くのものは、必ずしも、フォームにハードコードされ得る。
ユーザごとの設定の場合を考えてみましょう:使用可能な多くの情報がありませんOnCreate
で、その1は、常に一定のか、INIファイルのセクションのためのフォームの名前を使用して終わる、再利用することは非常に困難または不可能でさえそれを作ります形成するか、またはそれの複数のインスタンスを作成します。一方、フレームとメソッドのLoadSettings
はそれを行うには明白な方法であり、それは必要なパラメータを運ぶことができます。そのよう制御が埋め込まれたフレーム/形の容器に、それが属する場所に戻されます。動作を外部から調整することができれば再利用にのみ可能である。
のコンポーネントではなく、寿命管理する必要が含まれているオブジェクトについては、例えばAfterConstruction
とBeforeDestruction
ためあります。
他のヒント
かすか答えがこのスレッド: guiデザイン-複数の形-vsシミュレーション-mdiタブ--vs-pagecontrol
フレームを作成するときフレーム最速負荷および遅延なしを使用します。
しかし、あるべきフレームは、それを組み込みの親を持っています。なしのonCreateまたはonShowイベントの欠点は、トリガーされました。しかし、あなたはこのようなトリガーonShowイベントのためにメッセージを呼び出すことができます:
フレームのプライベートセクションに置かれます:
procedure CMShowingChanged(var M: TMessage); message CM_SHOWINGCHANGED;
とし、このようなコードを作成します:
procedure TFrame1.CMShowingChanged(var M: TMessage);
begin
inherited;
if Showing then
begin
// .... put your code for onShowing is triggered
end
else
begin
// .... put your code for onHiding is triggered
end;
end;
希望はGUIのために埋め込まれたフレームを考慮することが、あなたを助けることができます。
あなたは、フレームの開口部を制御するためにPageControlと組み合わせて検討することができる。
マンツ
私は、私たちのアプリケーションのいずれかのために数年前に同じ決断を持っていた、我々は、それが埋め込まれたフォームを見えるようにしたかった最初のIフレームを使用して、私はそれを管理するためのクラスを書いています。
その後、私はそれを非常に簡単な作業内のフォームを埋め込む作った、 LMDToolsするからTLMDDisplayFormコンポーネントを発見し、それが減少しますコードを使用して、我々はより多くの機能を持っています。
私たちは、フォームにフレームから変更の主な目標のようなTFormはいくつかのイベント欠けていたの1:ACTIVECONTROLや他のものIドン次のようないくつかのプロパティを行方不明の横に、私たちは私たちのアプリケーションでいくつかのタスクに使用OnCreateの、OnShow、OnActiveを「Tは覚えています。
あなたはフォームと一緒に行きたい場合は、私はあなたが使用することをお勧め LMDTools に簡単にタスクを作成していますあなたのために、基本的なバージョンの横に自由である: - )
は、動的に挿入された形/フレームのために私は個人的にフレーム上に埋め込まれたフォームを使用することを好みます。一つはalClientに設定されたフレームを編集するであろうときの位置を変更するであろういくつかのバージョンでは、バックフレームを編集し、フレームの右側に特異的に整列された任意のコントロール間リサイズなります。埋め込みフォームを使用している場合、これは、私はスイッチを作ったので、実現しませんでした。私は、この問題は、今のDelphiのそれ以降のバージョンで固定されていると信じています。
私は強くMghieが通知イベントを通じて埋め込まれたフォームに情報を渡すことができないことについて、先に作られたポイントに同意します。これを解決するために、私は、一般に通信のために、各埋め込み形のインターフェイスのシリーズを実装します。これは実際にコードを簡素化し、そしてあなたが埋め込みフォーム/フレームの多くの異なる種類を扱うことになるシングル「コンテナ」を持って、より汎用的な実装が可能になります。これのいくつかの例は、私が設計し、ウィザードフレームワークの一部としての私のブログの上でご利用いただけます。
私は両方を使用すべきだと思います。例えば、私は典型的なデータの閲覧のために非常に便利ですdbnavigator、DBGridのデータソースおよび成分を有する「標準」のフレームを持っています。代わりに、このようなコンポーネントを毎回挿入する、私はまた、(JVCLで:D)にそのデータをエクスポートする機能があるフレーム挿入いくつかの形式にし...しかし、私は私がデザイン時に表示したいものを知っているので、私は非常にお勧め簡単なルール:フレームを使用して、設計時にわかっている場合、それ以外の埋め込みフォームを使用
。ただし、フォームが埋め込まれるように設計されていなかったことを覚えておいてください。 (:D彼女は彼女の80歳の娘を埋め、彼女が30のように見えたとき、吸血鬼が述べたように)ので、その不自然なようにそれらを使用します。埋め込まれたフォームは、それを所有し、また、(論理的に)埋め込まれていないと仮定することができます1について少し知っています。
フレームは、フォーム内のコンポーネント、および埋め込みときに、(が所有)である、ことを補完する、フォームはそれについて知っており、フレームは、そのメソッドとプロパティを使用することができる(形態について知っている。埋め込まれた1つもでき)それを行うが、余分なコーディングが必要です。
おそらく、エンバカデロがTEmbeddableFormまたはそのような目的のためのインタフェースを作成することによって、私たちに手を与えることができる。
よろしく、 アルバロCastiello
フレームは良いです。埋め込まれたフォームは、MDI /タブ付きインターフェイスの使用のためのよりよい解決策であるように私は、タブ付きインターフェイスするためにそれらを使用しないと思います。