たとえば、1 つのフォームを alTop に設定し、別のフォームを alClient に設定すると、2 つのフォームが画面領域全体を占めるようになります。これはアプリケーションで行うのが賢明なことですか?
また、アンカーがフォームに公開されていることにも気付きましたが、アンカーが何に役立つかわかりません (解像度の変更? MDI アプリ?) 何かアイデアはありますか?
編集:わかりやすくするために、この投稿に関するビデオを作成しました。
たとえば、1 つのフォームを alTop に設定し、別のフォームを alClient に設定すると、2 つのフォームが画面領域全体を占めるようになります。これはアプリケーションで行うのが賢明なことですか?
また、アンカーがフォームに公開されていることにも気付きましたが、アンカーが何に役立つかわかりません (解像度の変更? MDI アプリ?) 何かアイデアはありますか?
編集:わかりやすくするために、この投稿に関するビデオを作成しました。
プロパティTForm
を設定することで、通常のコントロールのように使用できます。Parent
procedure TForm1.Button1Click(Sender: TObject);
begin
frmEmbed:= TForm.Create(Self);
frmEmbed.Parent:= Self;
frmEmbed.Width:= 50;
frmEmbed.Height:= 50;
frmEmbed.Align:= alRight;
frmEmbed.Anchors:= [akLeft, akBottom];
frmEmbed.Visible:= True;
end;
プロパティfrmEmbed.Align:= alRight;
がどのように機能するかを確認するには、行にコメントする必要があります。Anchors
上記がどこで使用されているかに興味がある場合: キャプション バーのない親フォームはTFrame
;の代わりになります。初期の Delphi バージョンではフレームを使用できなかったため、代わりに親フォームが使用されていました。それらはレガシー コードで見つけることができます。
フォームを別のフォーム内に配置できます。しかし、それがどれほどうまくいくかはわかりません。Delphi1 の時代には、イベントをルーティングするための特別なサードパーティ コントロールがありました。今日では、モーダル ダイアログを除いて、多かれ少なかれそのままで動作するようです。このようにしてみてください:
procedure TMainForm.Button1Click(...);
begin
with TForm.Create(Self) do begin
Caption := 'Internal one';
Parent := Self;
Visible := True;
end;
end;
おそらく、このセットアップではアンカーと整列が理にかなっているでしょう。結局のところ、これは新しい「1 ウィンドウ」IDE レイアウトがどのように実装されているかのようです。
簡単なケースの 1 つは、キャプションのないフォーム (例: win-8 メトロポリス スタイル) の場合で、終了ボタンを右上隅に固定できます。
しかし、最適な使い方は、サイズ変更に対応する複雑なフォームを簡単に作成することです... akLeft と akRight を使用すると、水平方向のコントロールでスペースを水平方向に埋めることができます。4 つのアンカーをすべて使用することは、クライアントを alclient に設定するのと似ていますが、他のパネルで囲む必要はありません。
アンカーでできることの多くは、多くのパネルでも実行できますが、フォームが複雑になると、パネルごとに複数のレベルのパネルが必要になる場合があります。
もちろん、多くの場合、パネルとアンカーを組み合わせて使用するのが最良の答えです。
他のコンテナ コンポーネント内にフォームを配置できます。
これは、ドッキングに役立ちます。フォームをページ コントロール タブや実際のどこにでもドッキングできます。
これは、TFrame の代替としても役立ちます。フレームを TFrame ではなく TForm として設計すると、設計時に埋め込むことができないため、設計時のエディタで編集/妨害することはできません。
埋め込まれた TFrame は、それらが埋め込まれたフォームでプロパティまたはイベントを再定義できます。これは、特にフレームを簡単にアップグレードまたはリファクタリングできるようにしたい場合に、常に望ましいまたは実用的であるとは限りません。変更された埋め込みフレームのプロパティは、PAS ではなく DFM で終了するため、コンパイル時に表示されず、リファクタリング/名前変更/その他が簡単ではありません。