Définition des paramètres de texte dans FireMonkey

De Appmethod Topics
Aller à : navigation, rechercher

Remonter à Conception d'applications FireMonkey


Paramètres de texte visuels

La classe TTextSettings déclare les propriétés TFont.Family, TFont.Size, TFont.Style, FontColor, HorzAlign, VertAlign, Trimming, WordWrap et and FontColorForState définissant les paramètres visuels d'une représentation texte et des méthodes gérant ces propriétés dans des composants restituant des objets texte. La classe TTextSettings définit des fonctionnalités offrant la possibilité de spécifier comment le texte en sortie est dessiné dans les composants. Par exemple, vous pouvez écrire :

Object Pascal :

 Label1.TextSettings.FontColor := MyColor;

C++ :

Label1->TextSettings->FontColor = MyColor;

Ce code définit la propriété publiée TLabel.FontColor de l'objet de type TLabel, qui hérite en fait de la propriété TTextSettings.FontColor. Toutefois, pour utiliser les propriétés TTextSettings, il est nécessaire de connaître le type du composant (TLabel dans cet exemple).

Utilisation de l'interface ITextSettings

L'interface ITextSettings déclare les méthodes et les propriétés permettant de gérer les paramètres visuels de représentation de texte dans des objets texte de type TTextSettings, indépendamment des types particuliers contenant les composants.

Les classes utilisant les objets texte de type TTextSettings, c'est-à-dire TMemo, TCustomEdit, TTextControl et leurs descendants, ont la propriété public TextSettings du type TTextSettings et implémentent l'interface ITextSettings. En utilisant les méthodes et les propriétés déclarées dans ITextSettings, vous pouvez gérer les propriétés de représentation de texte déclarées dans TTextSettings dans le style indépendant du type de composant.

Supposons, par exemple que vous ne connaissiez pas le type particulier d'un objet texte dans un composant. Par exemple, un objet texte peut être du type TText ou TTextControl. Ces classes ont respectivement les propriétés de couleur Color et FontColor. En principe, pour définir la couleur sur l'une de ces propriétés, il est nécessaire de vérifier au préalable le type d'une instance d'objet puis de transtyper le type de couleur comme suit :

if Obj is TText then
  TText(Obj).Color := MyColor
else if Obj is TTextControl then
  TTextControl(Obj).FontColor := MyColor;

L'utilisation de l'interface ITextSettings rend cette tâche plus simple et universelle :

Object Pascal :

 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();
		}

	}

}

Vous pouvez simplement récupérer l'objet du type d'interface ITextSettings dans la variable Settings. En cas de réussite, la valeur de retour de Settings ne doit pas être nil. Dans ce cas, le type particulier de Instance n'est pas important. Ce qui est important, c'est que l'objet interface IInterface(Instance) obtenu contient les propriétés suivantes : TextSettings, DefaultTextSettings, StyledSettings. En utilisant ces propriétés, vous pouvez changer les propriétés texte de n'importe lequel des types d'objets texte de type TTextSettings.

Utilisation de la propriété StyledSettings

Lorsque vous changez les propriétés de représentation de texte des objets de type TTextSettings, n'oubliez pas que vous changez la valeur d'une propriété (celle de la propriété TextSettings.Font.Size dans l'exemple précédent). Le changement effectif de l'affichage de l'objet n'a lieu que si la propriété ITextSettings.StyledSettings ne contient pas la constante TStyledSetting.Size. Le tableau illustrant la "relation entre les constantes TStyledSetting et les propriétés TTextSettings" montre quelles constantes TStyledSetting contrôlent la gestion des propriétés de représentation de texte TTextSettings.

Voir aussi