掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
TabContorolのTab毎に背景色を変えたい(FMX) (ID:151427)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
あ、KONNOYA様と被ってしまったかもです。 まず、フォームにTTabControlを配置して、タブを3つ入れます。 FormのOnCreateでTabItem1~3のそれぞれにTRectを入れてしまい、もともと配置してあるコンポーネントは各TRectに配置してしまう方法です。 DelphiXE10.2 FMXで動かしたのですが、DELPHI XE6で動作するかどうかは不明です。 外していたらすいません。 unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.TabControl; type TForm1 = class(TForm) TabControl1: TTabControl; TabItem1: TTabItem; TabItem2: TTabItem; TabItem3: TTabItem; procedure FormCreate(Sender: TObject); private { private 宣言 } procedure TabItemPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); public { public 宣言 } end; var Form1: TForm1; //各タブの色 const TabCol:array[0..2] of TAlphaColor=($FFFF0000,$FF00FF00,$FF0000FF); implementation {$R *.fmx} uses FMX.Objects; procedure TForm1.FormCreate(Sender: TObject); var i,j,k:Integer; r:TRectAngle; begin for i := 0 to TabControl1.TabCount-1 do begin TabControl1.Tabs[i].OnPaint:=TabItemPaint; r:=TRectangle.Create(self); r.Fill.Color:=TabCol[i]; r.Stroke.Color:=TabCol[i]; r.Parent:=TabControl1.Tabs[i]; r.Align:=TAlignLayout.Client; for j := TabControl1.Tabs[i].Children[1].ChildrenCount-1 downto 0 do begin if not(TabControl1.Tabs[i].Children[1].Children[j] is TRectangle) then TabControl1.Tabs[i].children[1].Children[j].Parent:=r; end; end; end; procedure TForm1.TabItemPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); begin Canvas.BeginScene(); Canvas.Fill.Color:=TabCol[TTabItem(Sender).Index]; Canvas.FillRect(ARect,0,0,[],1); Canvas.Fill.Color:=$FF000000; Canvas.FillText(ARect,TTabItem(Sender).Text,true,1,[],TTextAlign.Center,TTextAlign.Center); Canvas.EndScene; end; end.
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.