FireMonkey でのテキスト パラメータの設定

提供: RAD Studio
移動先: 案内検索

FireMonkey アプリケーションの設計 への移動


TTextSettings クラスおよび ITextSettings インターフェイスでは、FireMonkey は、テキスト オブジェクトの表示パラメータを管理するための汎用ツールを提供しています。

テキストのビジュアル パラメータ

TTextSettings クラスでは、テキスト オブジェクトを描画するコンポーネント内における、テキスト表現のビジュアル パラメータを定義する TFont.FamilyTFont.SizeTFont.StyleFontColorHorzAlignVertAlignTrimmingWordWrapFontColorForState の各プロパティと、それらプロパティを管理するメソッドが定義されています。TTextSettings クラスには、出力テキストがコンポーネントでどう描画されるかを指定できるようにする機能が定義されています。 たとえば、次のように記述できます。


Delphi:

 Label1.TextSettings.FontColor := MyColor;


C++:

Label1->TextSettings->FontColor = MyColor;

このコードでは、TLabel 型オブジェクトの公開プロパティ TLabel.FontColor を設定しています(このプロパティは実際には TTextSettings.FontColor プロパティを継承しています)。ただし、TTextSettings のプロパティを使用するには、まず、コンポーネントの型(この例では TLabel)がわかっていなければなりません。

ITextSettings インターフェイスの使用

ITextSettings インターフェイスには、TTextSettings 型のテキスト オブジェクトにおけるテキスト表現のビジュアル パラメータを、それらのコンポーネントが含まれている特定の型に依存することなく管理するための、メソッドとパラメータが宣言されています。

TMemoTCustomEditTTextControl やその下位クラスなど、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) インターフェイス オブジェクトに、次のプロパティが含まれていることです: TextSettingsDefaultTextSettingsStyledSettings。これらのプロパティを使用して、TTextSettings 型テキスト オブジェクトのどのような型のテキスト プロパティでも変更することができます。

StyledSettings プロパティの使用

TTextSettings 型オブジェクトのテキスト表現プロパティを変更する際に覚えておくべきことは、プロパティ(前の例では TextSettings.Font.Size プロパティ)の値を変更するときは、ITextSettings.StyledSettings プロパティに TStyledSetting.Size 定数が格納されていない場合にのみオブジェクトの表示が実際に変更されることです。「TStyledSetting の定数と TTextSettings のプロパティとの関係」の表を見れば、TStyledSetting のどの定数で TTextSettings のどのテキスト表現プロパティの処理が制御されるかがわかります。

関連項目