Можно ли типизировать свойство TFormBorderStyle в Integer и наоборот? - PullRequest
0 голосов
/ 08 марта 2011

Похоже, я мог бы использовать 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 ]

3 голосов
/ 08 марта 2011

Хотя вы специально запрашиваете преобразование в / из целочисленных значений, преобразование в / из строки не является сложным (перспектива «использования RTTI» может вас оттолкнуть?), И я полагаю, что вам лучше использовать этис учетом требования (сохранение значений в файле INI).

Вы сможете более четко увидеть, что это за значения, даже в файле INI, например.

Код дляпреобразование в / из требует, чтобы вы использовали модуль TypInfo, поэтому с учетом:

  uses TypInfo;

этот код даст строковое представление стиля формы:

  styleName := GetEnumName(TypeInfo(TFormBorderStyle), Ord(Form.BorderStyle));

и этот код выдастзначение стиля формы строки, представляющей перечисление стиля формы:

  Form.BorderStyle := TFormBorderStyle(GetEnumValue(TypeInfo(TFormBorderStyle), styleName));

Если вы обнаружите, что делаете это чаще в своем коде, вы, конечно, можете обернуть их в некоторые милые маленькие вспомогательные функции, называемые (дляпример) BorderStyleToString (): String и BorderStyleFromString (): TFormBorderStyle

2 голосов
/ 08 марта 2011

Используйте Ord (bsDialog) для преобразования в целое число и TBorderStyle (integervalue) для возврата из целого числа.

IniFile.WriteInteger('YourForm', 'Border', Ord(YourForm.BorderStyle));
...
YourForm.BorderStyle := TFormBorderStyle(IniFile.ReadInteger('YourForm', 'Border', 0));
...