看起来我可以使用RTTI将TFormBorderStyle属性的枚举类型转换为String,并将其存储在我的IniFile中,反之亦然。但是,我假设我也可以从整数来回对它进行类型转换,但它似乎不起作用。为什么?
var
Border: Integer = 3;
procedure TfrmMain.FormCreate(Sender: TObject);
begin
BorderStyle:= TFormBorderStyle(Border);
pnlHeader.Visible:= ShowHeader;
btnConfigure.Visible:= Configure;
pnlFooter.Visible:= ShowFooter;
end;
答案 0 :(得分:3)
虽然您特别要求转换为/从整数值转换,但转换为/来自字符串并不复杂(“使用RTTI”的前景可能会让您失望?)我相信您可能会更好地使用这些给定要求(将值存储在INI文件中)。
例如,即使在INI文件中,您也可以更清楚地看到这些值是什么。
转换为/的代码要求您使用TypInfo单元,因此给出:
uses TypInfo;
此代码将生成表单样式的字符串表示形式:
styleName := GetEnumName(TypeInfo(TFormBorderStyle), Ord(Form.BorderStyle));
并且此代码将生成表示表单样式枚举的字符串的表单样式值:
Form.BorderStyle := TFormBorderStyle(GetEnumValue(TypeInfo(TFormBorderStyle), styleName));
如果您发现自己在代码中更频繁地执行此操作,您当然可以将它们包含在一些不错的小辅助函数中,这些函数称为(例如) BorderStyleToString():String 和 BorderStyleFromString ():TFormBorderStyle
答案 1 :(得分:2)
使用Ord(bsDialog)转换为整数,使用TBorderStyle(integervalue)从整数返回。
IniFile.WriteInteger('YourForm', 'Border', Ord(YourForm.BorderStyle));
...
YourForm.BorderStyle := TFormBorderStyle(IniFile.ReadInteger('YourForm', 'Border', 0));