1

この記事では、DelphiPageControlでTTabSheetsの代わりにTFrameを使用する方法について説明します。

私は同様の演習を熟考してきましたが、上記は解決策を提供していないようであり、私の解決策は非常に複雑であるようです。

要件はタブ付きインターフェースであり、各タブはさまざまなデザインの1つにすることができます。各デザインはTFrameとして実装されます。

設計されているアプリケーションの性質上、ユーザーが2/3の異なる詳細を比較できるように、特定の時点で任意のフレームの複数のコピーを開いている場合があります(各タブのコンテンツは異なりますが、デザインは異なります)。同時にアイテム。

たとえば、あるセッションでは、すべてのフレームデザインAの3つのタブを開くことができます。別の場合には、フレームA、B、およびCのそれぞれで3つのタブを開くことができます。

デザインは、リクエストに応じてフレームをデザインに追加できるように、十分に柔軟である必要があります。

現時点で私が持っている解決策は、開いている各タイプのフレームを管理する個別のTListを用意し、開いているタブを追跡するためのマスターTListを使用することです。私が言ったように、複雑すぎます。

これをもっと簡単に処理する方法について誰かが提案していますか?

4

3 に答える 3

1

フレームインスタンスのマスターTListはおそらく省略します。

それらが必要な場合は、TPageControlに直接問い合わせるか、フレームタイプごとに個別のTListを介して、それらを取得できます。

それとは別に、あなたのアプローチは合理的に聞こえます。

于 2011-01-20T20:19:23.527 に答える
1

表示するフレームを制御する独自のメニューコントロールを使用して、単一のパネルでフレームを管理するアプリケーションがあります。フレームを表示する必要がある場合は、必要なフレームを除くパネル上のすべてのフレームに対して、単純にvisible:=falseを設定します。私はパネルに何を表示するかを制御しているので、少なくとも各コントロールはTframeであり、PanelのControlsプロパティを反復処理することで各フレームに到達できることを知っています。次に、インターフェイスを使用してメインフォームとフレームの間で通信します。

これで、標準のWindowsタブ付きインターフェイスを使用する場合でも、提案したとおりにページコントロールを使用できます。各TtabSheetには単一のTframeがあり、そのタイプを確認して、必要に応じて操作できます。Tlistが必要な理由はわかりません。なぜなら、本当に「Tframeのリスト」を取得する必要がある場合は、ページコントロールのTtabSheetsを反復処理することで、とにかく動的にTlistを作成できるからです。

私の最初のアプローチと同様に機能しますが、Windowsのタブが優れている別の方法は、TpageControlの代わりにTtabControlを使用することです。TtabControlを使用すると、基本的に、すべてのタブを表すTstringsインスタンス(Tabsプロパティ内)を取得するだけです。これはTstringsであるため、オブジェクト(つまり、Tframe)を各アイテム、つまり各タブに関連付けることができます。タブをクリックすると、すべてが非表示になり、正しいTframeが表示されます。また、Tabsプロパティを介してTtabControlにアタッチされているため、リストもあります。フレームの可視性を自分で処理する必要があります。

于 2011-01-20T23:59:16.000 に答える
0

TPageControlを使用して、ランタイムにTTabSheetの子孫を作成します。これには、独自のTFrameの新しいプロパティがあります(フレームを毎回検索するために.Controlsまたは.Componentsをスキャンする必要はありません)。

于 2011-01-21T08:17:23.580 に答える