Показать сообщение отдельно
  #7  
Старый 11.02.2013, 10:34
Аватар для morebeauty
morebeauty morebeauty вне форума
Начинающий
 
Регистрация: 21.06.2012
Сообщения: 106
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Код:
Var1 := Opt['Category','Option2'];
Var1 := Opt['Category']['Option2'].get
 
Var0 := Opt['Category','Sub'].get('Option1');
with Opt['Category','Sub'] do
begin
  Var1 := get('Option2')
  Var2 := get('Option3')
end
Да, это все, что я смог осуществить. Ну, разве что get(string) я сделал в виде дефолтной property. Но количество подкатегорий при этом ограниченное. Не больше и не меньше чем я сделал (то есть если я указал, что их 3, то нужно использовать именно 3).
Это не то, что я хотел, но пока будет так. Во всяком случае, если мне удастся сделать то, что я задумал (переделать класс), то это никак не повлияет на уже написанный код с использованием данного класса. Так что вопрос остается открытым.

Пока что обращение к классу выглядит так:
Код:
var
Var1:string;
Var2:integer;
Opt:TMyClass;
Begin
Opt:=TMyClass.Create;
Opt['Category']['SubCategory']['Option1']:=5;
Opt['Category']['SubCategory']['Option2']:=6;
Opt['Category']['SubCategory']['Option3']:='qwe';

Var1:=Opt['Category']['SubCategory']['Option3'][1];
Var2:=Opt['Category']['SubCategory']['Option2'] - Opt['Category']['SubCategory']['Option1'];
end;
В результате Var1 = 'q'
Var2 = 1
То есть средствами класса определяются нужные типы данных (принимаются и возвращаются не variant, а именно string или integer или real, в зависимости от типа переменной, в которую считывается или из которой записывается).

Не получается лишь сделать путь к опции в виде правильного Х-уровневого дерева. То есть для сей конструкции есть класс Опции, в котором хранится экземпляр класса Категории, в нем экземпляр класса Подкатегории, а в нем уже екземпляр класса Настройки. Если захочу сделать больше подкатегорий, то придется делать дополнительные классы для них. Если завяжу класс категории сам на себя, то не смогу в нужный момент извлечь таким же способом опцию (точнее смогу, только способом .get('Option1'), а мне надо дефолтной property, но в дефолтной property уже будет стоять ссылка на класс категорий). Вот такие дела...
Ответить с цитированием