FireMonkey のプリミティブ コントロールとスタイル付きコントロール
プリミティブ コントロール
FireMonkey のプリミティブ コントロールは FMX.Objects.TShape を継承しているため、自分自身の描画方法がわかっています。描画は Paint メソッドで行われますが、このメソッドは FMX.Controls.TControl に導入されており、各プリミティブ コントロールにより上書きされます。
基本コントロールのルック&フィールは、それぞれのプロパティ(Fill や Stroke)によって定義されます。
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 = '<classname>style'
で読み込まれます。その後、コントロールが構築されます。
例:
objectTLayout
StyleName = 'checkboxstyle'
Position.Point = '(352,391)'
Width = 121.000000000000000000
Height = 21.000000000000000000
objectTLayout
Align = Left
Width = 20.000000000000000000
Height = 21.000000000000000000
objectTRectangle
StyleName = 'background'
Align = Center
Position.Point = '(3,4)'
Locked = True
Width = 13.000000000000000000
Height = 13.000000000000000000
HitTest = False
Fill.Color = xFFEFEFEF
Stroke.Kind = None
objectTGlowEffect
Trigger = 'IsFocused=true'
Enabled = False
Softness = 0.200000002980232200
GlowColor = x82005ACC
Opacity = 0.899999976158142100
end
objectTRectangle
Align = Contents
Locked = True
Width = 13.000000000000000000
Height = 13.000000000000000000
HitTest = False
Fill.Kind = Gradient
Fill.Gradient.Points = <
item
Color = x5FA7A7A7
end
item
Color = x5FFFFFFF
Offset = 1.000000000000000000
end>
Stroke.Color = x90404040
end
objectTRectangle
Align = Contents
Position.Point = '(2,2)'
Locked = True
Width = 9.000000000000000000
Height = 9.000000000000000000
Padding.Rect = '(2,2,2,2)'
HitTest = False
Fill.Kind = None
Stroke.Color = x30505050
end
objectTColorAnimation
Duration = 0.100000001490116100
Trigger = 'IsMouseOver=true'
StartValue = xFFEFEFEF
StopValue = xFFA5D9FF
PropertyName = 'Fill.Color'
end
objectTColorAnimation
Duration = 0.100000001490116100
Inverse = True
Trigger = 'IsMouseOver=false'
StartValue = xFFEFEFEF
StopValue = xFFA5D9FF
PropertyName = 'Fill.Color'
end
objectTPath
StyleName = 'checkmark'
Align = Center
Position.Point = '(2,2)'
Locked = True
Width = 9.000000000000000000
Height = 9.000000000000000000
HitTest = False
Fill.Color = claNull
Stroke.Kind = None
Data.Path = {
1200000000000000000000000000000001000000CDCC4C3E0000000001000000
0000003F9A99993E01000000CDCC4C3F00000000010000000000803F00000000
010000000000803FCDCC4C3E010000003333333F0000003F010000000000803F
CDCC4C3F010000000000803F0000803F01000000CDCC4C3F0000803F01000000
0000003F3333333F01000000CDCC4C3E0000803F01000000000000000000803F
0100000000000000CDCC4C3F010000009A99993E0000003F0100000000000000
CDCC4C3E010000000000000000000000030000000000000000000000}
objectTColorAnimation
Duration = 0.100000001490116100
Trigger = 'IsChecked=true'
TriggerInverse = 'IsChecked=false'
StartValue = x00034E9E
StopValue = xFF034E9E
PropertyName = 'Fill.Color'
end
end
end
end
objectTText
StyleName = 'text'
Align = Client
Position.Point = '(21,2)'
Locked = True
Width = 99.000000000000000000
Height = 19.000000000000000000
Padding.Rect = '(1,2,1,0)'
HitTest = False
Text = 'CheckBox'
end
end