Raizeコンポーネントのタブ コントロールに代わるものを探しています。
各ページの上部に閉じるボタンを追加する機能が必要で、タブに傾斜したタブと色を使用したいと考えています。ああ、私は FireMonkey 2 を使用しています。
//raize がfirmonkey をサポートしていないことは知っています。
Raizeコンポーネントのタブ コントロールに代わるものを探しています。
各ページの上部に閉じるボタンを追加する機能が必要で、タブに傾斜したタブと色を使用したいと考えています。ああ、私は FireMonkey 2 を使用しています。
//raize がfirmonkey をサポートしていないことは知っています。
Firemonkey はページ内に独自のものTTabControl
を持っていCommon Controls
ます (デフォルト)。を使用してこれをスタイルできますTStylebook
。たとえば、閉じるボタンをタブ自体に追加することは可能だと確信しています。
結局のところ、FMX はベクターベースのフレームワークであるため、すべてのビジュアル要素がスタイル内に存在する必要があります。デフォルトのスタイルを TStylebook にロードする方法が見つからないため、おそらくスタイルを TStylebook にロードすることをお勧めします。に移動するtabitemstyle
と、そこから外観を微調整できます。必要に応じて閉じるボタンを追加するだけです (配置、レイアウトなど)。
アプリケーション コードに戻ると、FindStyleResource
コードをセットアップするためにルーチンを使用することになります (XE2 は使用するため、代わりにプロパティをFindBinding
設定しBindingName
ます)。閉じるボタンの名前は「CloseButton」(引用符なし) であると仮定します。
var
MyTab : TTabItem;
begin
MyTab := ((TabItem1 as TTabItem).FindStyleResource('CloseButton') as TButton).OnClick := TabClose;
end;
最初にタブを作成するときにそのコードを追加するか、設計時にすべてのタブを作成する場合は、FormCreate で実行する必要があります。基本的に、CloseButton がクリックされたときに、通知イベント/プロシージャを呼び出したいことを伝えていますTabClose
。この手順は、ボタンのクリックと同じです。
StyleName
タブのプロパティをCloseButton
+Index_of_tabに変更することもできます。
さて、タブ自体を閉じるコードについては、このテストされていない例のようなものが機能する可能性がありますが、それを繰り返したいと思うでしょう。
procedure TForm1.TabClose(Sender: TObject);
var
_mytab : Integer;
_activetab : Integer;
begin
_activetab := ((Sender as TTabItem).Parent as TTabControl).ActiveTab.Index;
_mytab := ((Sender as TTabItem).Parent as TTabControl).ActiveTab.Index;
((Sender as TTabItem).Parent as TTabControl).Tabs[_MyTab].Free;
((Sender as TTabItem).Parent as TTabControl).TabIndex := _activetab;
end;
さて、これは巧妙な部分であり、フレームワークの設計を利用しています。別の要素内にあるスタイル要素をクリックすると、デフォルトで親要素が選択されます。この例では、ユーザーがクリックした閉じるボタンを含むタブを選択します。これから、そのタブを閉じます(技術的には解放します。開発中はタブをあまり扱っていないので、タブを「閉じる」適切な方法を調べてください)。
ただし、これには 1 つの問題があります。元のタブに戻りたい場合は、以前にアクティブだったタブを検出するより良い方法を見つける必要があるでしょう。現時点では、閉じたタブの次のタブを開くだけです (タブ数が 1 つ減ったため、アクティブなタブ インデックスは次の物理タブを選択します)。_activetab
コードを別の場所に分割することで、おそらくこれを行うことができます。
私は自分のプログラムのいくつかで同様のことを行いました.これは、通常、「ハイブリッド」コンポーネントを作成する方法です. 基本的に、フレームワークのモジュラー設計を利用して、サードパーティのコンポーネントに依存することなく、やりたいことを実行します。
FMX はかなり新しいフレームワークであるため、これをサポートするサードパーティ コンポーネント ベンダーはまだ多くありません。
FMX 用のサード パーティの TabControl コンポーネントは見たことがありません。Google で簡単に検索すると、何もないことがわかります。だからあなたは運が悪いかもしれません。