FireMonkey でのテキスト パラメータの設定
TTextSettings クラスおよび ITextSettings インターフェイスでは、FireMonkey は、テキスト オブジェクトの表示パラメータを管理するための汎用ツールを提供しています。
テキストのビジュアル パラメータ
TTextSettings クラスでは、テキスト オブジェクトを描画するコンポーネント内における、テキスト表現のビジュアル パラメータを定義する TFont.Family、TFont.Size、TFont.Style、FontColor、HorzAlign、VertAlign、Trimming、WordWrap、FontColorForState の各プロパティと、それらプロパティを管理するメソッドが定義されています。TTextSettings クラスには、出力テキストがコンポーネントでどう描画されるかを指定できるようにする機能が定義されています。 たとえば、次のように記述できます。
Delphi:
Label1.TextSettings.FontColor := MyColor;
C++:
Label1->TextSettings->FontColor = MyColor;
このコードでは、TLabel 型オブジェクトの公開プロパティ TLabel.FontColor を設定しています(このプロパティは実際には TTextSettings.FontColor プロパティを継承しています)。ただし、TTextSettings のプロパティを使用するには、まず、コンポーネントの型(この例では TLabel)がわかっていなければなりません。
ITextSettings インターフェイスの使用
ITextSettings インターフェイスには、TTextSettings 型のテキスト オブジェクトにおけるテキスト表現のビジュアル パラメータを、それらのコンポーネントが含まれている特定の型に依存することなく管理するための、メソッドとパラメータが宣言されています。
TMemo、TCustomEdit、TTextControl やその下位クラスなど、TTextSettings 型のテキスト オブジェクトを使用するクラスは、TTextSettings 型の TextSettings という public プロパティを持っていて、ITextSettings インターフェイスを実装しています。ITextSettings に宣言されているメソッドやプロパティを使用すると、TTextSettings に宣言されているテキスト表現プロパティを、コンポーネントの型に依存することなく管理できます。
たとえば、コンポーネント内のテキスト オブジェクトの具体的な型がわからないとしましょう。たとえば、TText 型や TTextControl 型のテキスト オブジェクトの可能性があります。これらのクラスのうち、前者には Color、後者には FontColor という色プロパティがあります。一般に、どちらかのプロパティに色を設定するには、以下のように、まずオブジェクト インスタンスの型を確認したあと、色の型をキャストする必要があります。
if Obj is TText then TText(Obj).Color := MyColor else if Obj is TTextControl then TTextControl(Obj).FontColor := MyColor;
ITextSettings インターフェイスを使用すると、この作業がはるかに単純かつ汎用的になります。
Delphi:
procedure TForm12.Button1Click(Sender: TObject);
var
Settings: ITextSettings;
Instance: TComponent;
I: Integer;
begin
Instance := Button1;
for I := 0 to ChildrenCount - 1 do
begin
Instance := Children[I];
if IInterface(Instance).QueryInterface(ITextSettings, Settings) = S_OK then
begin
// using ITextSettings methods and properties:
// TextSettings: TTextSettings,
// DefaultTextSettings,
// StyledSettings
// to change properties of text objects
Settings.TextSettings.BeginUpdate;
try
Settings.TextSettings.Font.Size := 18;
if TStyledSetting.Size in Settings.StyledSettings then
Settings.StyledSettings := Settings.StyledSettings - [TStyledSetting.Size]
// show Font.Size := 18
else
Settings.StyledSettings := Settings.StyledSettings + [TStyledSetting.Size];
// restore showing Font.Size loaded from a style
finally
Settings.TextSettings.EndUpdate;
end;
end;
end;
end;
C++:
void __fastcall TForm1::Button1Click(TObject *Sender) {
_di_ITextSettings Settings;
TComponent* Instance = new TComponent(Form1);
int I;
Instance = Button1;
for (I = 0; I < ChildrenCount ; I++) {
Instance = Children->Items[I];
if (Instance->GetInterface(Settings)) {
Settings->TextSettings->BeginUpdate();
try {
Settings->TextSettings->Font->Size = 18;
if (Settings->StyledSettings.Contains(TStyledSetting::Size)) {
Settings->StyledSettings =
Settings->StyledSettings >> TStyledSetting::Size;
}
else {
Settings->StyledSettings =
Settings->StyledSettings << TStyledSetting::Size;
}
}
catch (Exception* e) {
Settings->TextSettings->EndUpdate();
}
Settings->TextSettings->EndUpdate();
}
}
}
Settings
変数から ITextSettings インターフェイス型オブジェクトは単純に取得します。成功した場合、Settings
の戻り値は nil
ではありません。この場合、Instance
の具体的な型は重要ではありません。 大切なのは、取得した IInterface(Instance)
インターフェイス オブジェクトに、次のプロパティが含まれていることです: TextSettings、DefaultTextSettings、StyledSettings。これらのプロパティを使用して、TTextSettings 型テキスト オブジェクトのどのような型のテキスト プロパティでも変更することができます。
StyledSettings プロパティの使用
TTextSettings 型オブジェクトのテキスト表現プロパティを変更する際に覚えておくべきことは、プロパティ(前の例では TextSettings.Font.Size
プロパティ)の値を変更するときは、ITextSettings.StyledSettings プロパティに TStyledSetting.Size 定数が格納されていない場合にのみオブジェクトの表示が実際に変更されることです。「TStyledSetting の定数と TTextSettings のプロパティとの関係」の表を見れば、TStyledSetting のどの定数で TTextSettings のどのテキスト表現プロパティの処理が制御されるかがわかります。