9

ソフトウェアを開発しました。このソフトウェアでは、さまざまな状況に応じて、さまざまな入力画面でいくつかのコントロールを表示および非表示にしています。

コントロールを非表示にすると、そのコントロールが占めていたスペースがそのまま残され、レイアウトが非常に悪く見えることがあります。コントロールの数が多い画面で。私たちのクライアントはこれを気に入らず、これについて何かをするように私たちに依頼しました.

私の質問: 流体レイアウトを作成して、コントロールが非表示のときに残りのコントロールが自動的に調整されて、非表示のコントロールによって残された空のスペースを埋め、コントロールが表示されているときに自動的に道を譲る方法はありますか?コントロールのために、それに応じて自分自身を調整します。

コーディングによってこれを達成できることはわかっていますが、レイアウトを調整するために各画面で多くのコードが必要になります。80 以上の画面があるため、各画面のコーディングを削減するものを探しています。

エラーが少なく、各入力画面で不要なコーディングを取り除くことができる方法を提案してください。

4

5 に答える 5

10

最良の選択肢は、実行時にフォーム上の vcl コントロールのレイアウトを処理するコンポーネントを使用することだと思います (定義する条件によって異なります)。Devexpress ExpressLayout Controlを試すことをお勧めします

ここで 2 つの優れたデモ ビデオを見つけることができます

代替テキスト
(ソース: devexpress.com )

これらの機能を確認できます

自動管理- コントロール グループと個々のコントロール要素は、レイアウト コントロールによって自動的に管理されます。ピクセルごとの配置について心配する必要はありません。

フォームの自動サイズ変更 - フォームは、コンテンツに最適なサイズに自動的に変更できます。

さよなら。

于 2009-11-23T05:43:47.470 に答える
4

レイアウトがどれほど複雑かはわかりませんが、これには TFlowPanel や TGridPanel を使用できると思います。Flowpanel は、可視性を変更するコンポーネントを適切に処理します。gridpanel が同じことをどれだけうまく処理できるかはわかりません...

于 2009-11-23T07:59:20.387 に答える
1

動的に非表示にしているコントロールの種類と、自動塗りつぶしスペースとはどういう意味ですか?

これが単純かどうかはわかりません。パネルにコントロールを配置し、alTop/alClient/alBottom の配置を使用します。パネルを非表示にすると、他のすべてのパネルが自動的に上に移動します。ただし、1 つの問題: パネルを再度表示したい場合、パネルの順序が時々めちゃくちゃになる可能性があります..Top プロパティを手動で設定するか、.Height := 1; を設定して「非表示」にすることで修正できます。

于 2009-11-23T07:50:26.823 に答える
0

Raize コンポーネントには TRzFlowPanel UI コンポーネントがあります。まさにあなたが求めていることをします。

TRzFlowPanel を使用して、空のフロー パネルをフォームに配置します。従来のパネルとフロー パネルの主な違いは、コントロールの配置方法です。従来のパネルでは、コントロール (ボタンなど) を特定の場所に配置します。このコントロールは、マウスを使用してパネル内の任意の場所に自由に移動できます。フロー パネルでは、マウスで配置した場所に関係なく、各コントロールが特定の場所に配置されます。自動位置は FlowStyle プロパティによって制御されます。たとえば、LeftRightTopBottom のデフォルトの FlowStyle プロパティを使用すると、フロー パネルに最初に追加したコントロールが左上隅にスナップされます。追加する 2 番目のコントロールは、最初のコントロールの横にスナップします。

于 2009-11-25T02:26:33.373 に答える
0

私が複雑なレイアウトで行うことは、実際には複数のタブに分割することです。これには 2 つの利点があります。フォームのレイアウトが簡素化され、他のタブでの選択に応じてタブ全体を表示または非表示にすることができます。

于 2009-11-24T11:42:23.080 に答える