![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как обратиться к свойству объекта [D7, Win2k, WinXP]
pavel_guzhanov © (2005-01-25 14:14:00)Вопрос такой: У Объекта имеется множество свойств. Мне нужно получить значение только одного свойства, например свойства "name". Приходится в цикле перебирать все свойства, и, дойдя до свойства "name" присвоить его значение какой- либо переменной. А можно ли обратиться к свойству непосредственно по его имени, не перебирая все остальные? И если можно, то как?
pavel_guzhanov (2005-01-25 16:03:00) [21]
> разве не так ?
Так.
> если имя св-ва ТЕКУЩЕГО объекта равно "Name"
Я как раз спрашиваю, как мне сделать имя свойства текущего объекта равным 'Name'b получить его Value? Можно ли это сделать без цикла переборки?
Digitman (2005-01-25 15:44:00) [22]
> pavel_guzhanov (25.01.05 15:16) [7]
следы ведут к тому, ЧТО есть метод PropEnum..
а он есть функц.метод некоего интерфейса, возвращающий некий интерфейсный объект..
Digitman (2005-01-25 15:41:00) [23]
> мне кажется, из приведенного примера должен быть понятен
> смысл вопроса
Он мне как раз и вполне понятен.
Ты перебираешь некий список объектов, какжый из которых реализует интерфейс SWBemProperty. Этот интерфейс предоставляет как минимум 2 св-ва : Name и Value. И если св-во Value (OleVariant) не равно Null, то если имя св-ва ТЕКУЩЕГО объекта равно "Name", то ты получаешь зн-е св-ва Value ТЕКУЩЕГО объекта и обрываешь цикл.
разве не так ?
pavel_guzhanov (2005-01-25 15:16:00) [24]
> не "перебока свойств" у тебя идет, а перебор объектов
Возможно я путаюсь в терминологии, но, как мне кажется, из приведенного примера должен быть понятен смысл вопроса....
Digitman (2005-01-25 15:08:00) [25]
> где идет переборка свойств объекта SProp
не "перебока свойств" у тебя идет, а перебор объектов !
pavel_guzhanov (2005-01-25 15:01:00) [26]Вот фрагмент кода, где идет переборка свойств объекта SProp
while (PropEnum.Next(1, TempObj, Value) = S_OK) do
begin
SProp:= IUnknown(TempObj) as SWBemProperty;
if (SProp.Get_Value <> null) then
begin
if SProp.Name = 'Name' then
begin
Result:=Trim(SProp.Get_Value);
break;
end;
end;
end;{while}
Вопрос заключается в том, чтобы установить(Без переборки) SProp.Name равным 'Name', а потом получить значение, находящееся в этом свойстве, т.е. SProp.Get_Value. Извиняюсь, если как-то сумбурно объяснил задачу, но по другому не получается...
PVOzerski (2005-01-25 14:32:00) [27]2pavel_guzhanov (25.01.05 14:27) [2]
Тебе же, кажется, получить значение, а не присвоить надо.
Например, MyStringVariable:=ThisObject.Name;
Pentium133 (2005-01-25 14:31:00) [28]Ха, ну так если проперти ТОЛЬКО ДЛЯ ЧТЕНИЯ, чего вы еще хотите?
pavel_guzhanov (2005-01-25 14:27:00) [29]В ответ на это получаю сообщение об ошибке, Cannot assign to a read-only property. Так что это не прокатывает....
Pentium133 (2005-01-25 14:21:00) [30]Объек.Name := 'pavel_guzhanov'