Хочу настройки окна(формы "Form1") вынести в файл
И чтобы я мог рукам или другой программой залезть в конфиг и подправить.
(пример: config_window.txt )
- Код: Выделить всё
//[biSystemMenu,biMinimize,biMaximize,biHelp]
BorderIcons = [biSystemMenu]
//fsNormal, fsSplash, fsStayOnTop, fsSystemStayOnTop
FormStyle =
//bsSizeable, bsSingle, bsDialog, bsNone
BorderStyle =
Height = 100
Top =
Width =
Left = 30
Caption = "Привет мир"
код который выставляет настройки:
- Код: Выделить всё
uses ... TypInfo
...
var p : PPropInfo;
//это кусок из цикла, который обходит файл конфигурации
//sKey - это название свойства (string)
//sVal - это значение свойства (string)
//к примеру Caption = "Привет мир"
//sKey = Caption
//sVal = "Привет мир"
...
if sVal <> '' then //если нет значения у переменной файле, то ничего не меняем, оставляем настройки формы по умолчанию
begin
p := GetPropInfo(Form1, sKey); //получаем PPropInfo для sKey, для проверки на НАЛИЧИЕ свойства (мало ли что я наваяю руками)
if Assigned(p) then begin //Проверка на существование, если есть значение sKey продолжаем
if lib.IsInteger(sVal) then begin //эта функция проверки на число, внутри её - Val, и код читается хорошо
SetInt64Prop(Form1, sKey, IntToStr(sVal])); //Поскольку мы убедились что это значение инт, то пишем его как инт
//По хорошему я должен был получить руками "тип свойства" из описания класса.
//Хотя можно и из класса в который хочу писать. И потом смотреть, что вообще можно писать, это я int хочу,
//а может низя int
//Но пользоваться этим я буду , и как-нибудь прослежу, хотя надо конечно нормально написать
end
else if Copy(sVal,0,1) = '"' then begin //Лошарский признак строки, если первый символ двойная кавычка, значит строка
SetStrProp(Form1, sKey, Copy(sVal,1, Length(sVal)-2)); //Пишем строку "Caption", вырезая первую и последнюю двойную кавычку
end
else if (sVal = 'true') or (sVal = 'false') then begin
//Сдесь должна быть обработка булевых, я предполагаю что их надо писать как int 0 и 1, и проблем вроде не должно возникнуть, наверно...
end else begin
//*****************************************************************************
// Здесь должна располагаться строчка обработки объектов
// к примеру
//sKey = BorderIcons
//sVal = [biSystemMenu,biMinimize,biMaximize,biHelp]
// А вот тут располагается МОЙ вопрос
// Проблему опишу ниже, вне кода
//*****************************************************************************
end;
end;
end;
Мне необходимо создать объект из строки
Это нужно для вот такой функции:
procedure SetObjectProp(
Instance: TObject;
const PropName: string;
Value: TObject
);
Итак вот строка конфига:
BorderIcons = [biSystemMenu,biMinimize,biMaximize,biHelp]
или вот:
FormStyle = bsSingle
теоретически, насколько я понимаю, должно получиться что-то типа(без переменных)
- Код: Выделить всё
SetObjectProp(Form1, 'BorderIcons', TBorderIcons('[biSystemMenu,biMinimize,biMaximize,biHelp]'));
Это всё работать не будет, т.к. я должен передать нормальный объект с нормальными свойствами, а не строку
Может мне надо взять, к примеру, копию Form1.BorderIcons как обычный объект, занулить его,
и потом как-то магически перенсети все свойства...
В общем я не знаю что мне делать. Совсем.
примечание: через if не интересно:
- Код: Выделить всё
Form1.BorderIcons:=[];
if Pos(sVal, 'biSystemMenu') > 0 then Form1.BorderIcons:= Form1.BorderIcons+[biSystemMenu];
if Pos(sVal, 'biMinimize') > 0 then Form1.BorderIcons:= Form1.BorderIcons+[biMinimize];
if Pos(sVal, 'biMaximize') > 0 then Form1.BorderIcons:= Form1.BorderIcons+[biMaximize];
if Pos(sVal, 'biHelp') > 0 then Form1.BorderIcons:= Form1.BorderIcons+[biHelp];
Спасибо, что дочитали до конца =)
С уважением