6

たとえば、1 つのフォームを alTop に設定し、別のフォームを alClient に設定すると、2 つのフォームが画面領域全体を占めるようになります。これはアプリケーションで行うのが賢明なことですか?

また、アンカーがフォームに公開されていることにも気付きましたが、アンカーが何に役立つかわかりません (解像度の変更? MDI アプリ?) 何かアイデアはありますか?

編集:わかりやすくするために、この投稿に関するビデオを作成しました。

4

4 に答える 4

15

プロパティ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 バージョンではフレームを使用できなかったため、代わりに親フォームが使用されていました。それらはレガシー コードで見つけることができます。

于 2012-10-10T05:06:13.020 に答える
3

フォームを別のフォーム内に配置できます。しかし、それがどれほどうまくいくかはわかりません。Delphi1 の時代には、イベントをルーティングするための特別なサードパーティ コントロールがありました。今日では、モーダル ダイアログを除いて、多かれ少なかれそのままで動作するようです。このようにしてみてください:

procedure TMainForm.Button1Click(...);
begin
  with TForm.Create(Self) do begin
       Caption := 'Internal one';
       Parent := Self;
       Visible := True;
  end;    
end;    

おそらく、このセットアップではアンカーと整列が理にかなっているでしょう。結局のところ、これは新しい「1 ウィンドウ」IDE レイアウトがどのように実装されているかのようです。

于 2012-10-10T06:57:41.667 に答える
2

簡単なケースの 1 つは、キャプションのないフォーム (例: win-8 メトロポリス スタイル) の場合で、終了ボタンを右上隅に固定できます。

しかし、最適な使い方は、サイズ変更に対応する複雑なフォームを簡単に作成することです... akLeft と akRight を使用すると、水平方向のコントロールでスペースを水平方向に埋めることができます。4 つのアンカーをすべて使用することは、クライアントを alclient に設定するのと似ていますが、他のパネルで囲む必要はありません。

アンカーでできることの多くは、多くのパネルでも実行できますが、フォームが複雑になると、パネルごとに複数のレベルのパネルが必要になる場合があります。

もちろん、多くの場合、パネルとアンカーを組み合わせて使用​​するのが最良の答えです。

于 2012-10-24T17:33:25.220 に答える
1

他のコンテナ コンポーネント内にフォームを配置できます。

これは、ドッキングに役立ちます。フォームをページ コントロール タブや実際のどこにでもドッキングできます。

これは、TFrame の代替としても役立ちます。フレームを TFrame ではなく TForm として設計すると、設計時に埋め込むことができないため、設計時のエディタで編集/妨害することはできません。

埋め込まれた TFrame は、それらが埋め込まれたフォームでプロパティまたはイベントを再定義できます。これは、特にフレームを簡単にアップグレードまたはリファクタリングできるようにしたい場合に、常に望ましいまたは実用的であるとは限りません。変更された埋め込みフレームのプロパティは、PAS ではなく DFM で終了するため、コンパイル時に表示されず、リファクタリング/名前変更/その他が簡単ではありません。

于 2012-10-24T09:15:23.070 に答える