是否可以将TFormBorderStyle属性打字为Integer,反之亦然?

时间:2011-03-07 23:31:56

标签: delphi configuration delphi-2010 enumeration ini

看起来我可以使用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;

2 个答案:

答案 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));