FireMonkey のプリミティブ コントロールとスタイル付きコントロール
目次 |
プリミティブ コントロール
FireMonkey のプリミティブ コントロールは FMX.Objects.TShape を継承しているため、自分自身の描画方法がわかっています。描画は Paint メソッドで行われますが、このメソッドは FMX.Controls.TControl に導入されており、各プリミティブ コントロールで上書きされます。
プリミティブ コントロールのルック アンド フィールは、Fill、Stroke、StrokeCap、StrokeDash、StrokeJoin、StrokeThickness といった、それ自身のプロパティで定義されます。
FireMonkey プリミティブ コントロールは以下のとおりです。
- FMX.Objects.TLine
- FMX.Objects.TRectangle
- FMX.Objects.TRoundRect
- FMX.Objects.TEllipse
- FMX.Objects.TCircle
- FMX.Objects.TArc
- FMX.Objects.TCustomPath
- FMX.Objects.TText
「FireMonkey のプリミティブ コントロールを作成する」では、独自の FireMonkey プリミティブ コントロールを作成する手順を示しています。
スタイル付きコントロール
FireMonkey のスタイル付きコントロールは、アプリケーションのルック アンド フィールを定義するものではありません。そうではなく、これらはスタイル ファイル(またはスタイルブック コンポーネントで定義されているスタイル)を読み込み、プリミティブ コントロールとそれらのプロパティのリストを動的に選択します。したがって、スタイル付きコントロールは、アプリケーションが新しいスタイルに切り替えたとき(新しいスタイル定義を読み込んだとき)にルック アンド フィールを変更できます。
スタイル付きコントロールは、プリミティブ コントロール、スタイル付きコントロール、効果を任意に組み合わせて作成することができます。たとえば、FMX.StdCtrls.TCheckBox は以下のプリミティブ コントロールと効果から作成されています。
- TLayout(CheckBoxstyle)
- TLayout
- TRectangle(背景)
- TGlowEffect
- TRectangle
- TRectangle
- TColorAnimation
- TColorAnimation
- TPath(チェック マーク)
- TColorAnimation
- TText(テキスト)
- TRectangle(背景)
- TLayout
スタイル付きコントロールが読み込まれると、StyleName('<クラス名>style')のオブジェクトが読み込まれます。その後、コントロールのインスタンスが作成されます。以下に例を示します。
object TLayout StyleName = 'checkboxstyle' Position.Point = '(352,391)' Width = 121.000000000000000000 Height = 21.000000000000000000 DesignVisible = False object TLayout Align = alLeft Width = 20.000000000000000000 Height = 21.000000000000000000 object TRectangle StyleName = 'background' Align = alCenter Position.Point = '(3,4)' Locked = True Width = 13.000000000000000000 Height = 13.000000000000000000 HitTest = False Fill.Color = xFFEFEFEF Stroke.Kind = bkNone object TGlowEffect Trigger = 'IsFocused=true' Enabled = False Softness = 0.200000002980232200 GlowColor = x82005ACC Opacity = 0.899999976158142100 end object TRectangle Align = alContents Locked = True Width = 13.000000000000000000 Height = 13.000000000000000000 HitTest = False Fill.Kind = bkGradient Fill.Gradient.Points = < item Color = x5FA7A7A7 end item Color = x5FFFFFFF Offset = 1.000000000000000000 end> Stroke.Color = x90404040 end object TRectangle Align = alContents Position.Point = '(2,2)' Locked = True Width = 9.000000000000000000 Height = 9.000000000000000000 Padding.Rect = '(2,2,2,2)' HitTest = False Fill.Kind = bkNone Stroke.Color = x30505050 end object TColorAnimation Duration = 0.100000001490116100 Trigger = 'IsMouseOver=true' StartValue = xFFEFEFEF StopValue = xFFA5D9FF PropertyName = 'Fill.Color' end object TColorAnimation Duration = 0.100000001490116100 Inverse = True Trigger = 'IsMouseOver=false' StartValue = xFFEFEFEF StopValue = xFFA5D9FF PropertyName = 'Fill.Color' end object TPath StyleName = 'checkmark' Align = alCenter Position.Point = '(2,2)' Locked = True Width = 9.000000000000000000 Height = 9.000000000000000000 HitTest = False Fill.Color = claNull Stroke.Kind = bkNone Data.Path = { 1200000000000000000000000000000001000000CDCC4C3E0000000001000000 0000003F9A99993E01000000CDCC4C3F00000000010000000000803F00000000 010000000000803FCDCC4C3E010000003333333F0000003F010000000000803F CDCC4C3F010000000000803F0000803F01000000CDCC4C3F0000803F01000000 0000003F3333333F01000000CDCC4C3E0000803F01000000000000000000803F 0100000000000000CDCC4C3F010000009A99993E0000003F0100000000000000 CDCC4C3E010000000000000000000000030000000000000000000000} object TColorAnimation Duration = 0.100000001490116100 Trigger = 'IsChecked=true' TriggerInverse = 'IsChecked=false' StartValue = x00034E9E StopValue = xFF034E9E PropertyName = 'Fill.Color' end end end end object TText StyleName = 'text' Align = alClient Position.Point = '(21,2)' Locked = True Width = 99.000000000000000000 Height = 19.000000000000000000 Padding.Rect = '(1,2,1,0)' HitTest = False Text = 'CheckBox' end end