Je sais que j'ai pu le faire avant, il y a longtemps, donc ça doit être possible.
Je voudrais convertir un élément, tel que la propriété d'alignement d'un composant alNone, en une chaîne que je peux enregistrer, afficher, peu importe. Je sais que je peux obtenir la valeur d'octet et trouver mon propre texte, mais je suis sûr qu'il existe un moyen plus direct.
Par exemple, je veux ...
var S:string;
S:= somehow(Form.Align);
ShowMessage(S);
où "en quelque sorte" est cependant, je convertis le paramètre de la propriété align du formulaire en une chaîne telle que "alNone".
Vous pouvez le faire en utilisant RTTI:
uses
RTTI;
procedure TForm40.FormCreate(Sender: TObject);
var
sAlign: string;
eAlign: TAlign;
begin
//Enum to string
sAlign := TRttiEnumerationType.GetName(Align);
//string to enum
eAlign := TRttiEnumerationType.GetValue<TAlign>(sAlign);
end;
Form.Align
n'est pas une valeur de TPersistent
. C'est une valeur de TAlign
qui est un type d'énumération.
Vous pouvez convertir une valeur d'énumération en chaîne avec ce morceau de code:
type TEnumConverter = class
public
class function EnumToInt<T>(const EnumValue: T): Integer;
class function EnumToString<T>(EnumValue: T): string;
end;
class function TEnumConverter.EnumToInt<T>(const EnumValue: T): Integer;
begin
Result := 0;
Move(EnumValue, Result, sizeOf(EnumValue));
end;
class function TEnumConverter.EnumToString<T>(EnumValue: T): string;
begin
Result := GetEnumName(TypeInfo(T), EnumToInt(EnumValue));
end;
Vous devez ajouter System.TypInfo
aux usages.
Faites ceci pour obtenir Form.Align
en tant que chaîne:
S := TEnumConverter.EnumToString(Form.Align)