Доступ к глубоким полям ActiveX объектов

Доступ к глубоким полям ActiveX объектов

Сообщение coldfire » Вт сен 04, 2007 3:48 pm

Добрый день !

Может кто сталкивался... Надо получить доступ к глубоким полям ActiveX объектов, условно говоря: #Object1.Fields[N].NeededField

InTouch ругается на такую конструкцию, конкретно на точку после Fields[N] - видимо, он ожидает увидеть число. Завести локальную переменную SubObj, куда запихнуть #Object1.Fields[N], а уже потом обратиться через нее SubObj.NeededField к также невозможно - нет такого типа данных в интаче. Или есть ?!

Каким образом можно обратиться к указанному полю ?
coldfire
 
Сообщения: 4
Зарегистрирован: Вт сен 04, 2007 3:44 pm

Сообщение Admin » Ср сен 05, 2007 1:15 pm

Типы данных можно создавать и свои, но только из данного набора.
По крайней мере массив полей можно запихать в Group Var. Но это вряд ли поможет, поскольку Needed Field не существует вне ActiveX.
Кстати, Вы уверены что правильно представляете структуру объекта,
что Needed Field это не Field[N=8] ?

Так с ходу, советую попробовать такие варианты:
1) заключить имя переменной в кавычки.
2) писать FieldN вместо Field[N]
Если не поможет, будем разбираться
Admin
Site Admin
 
Сообщения: 294
Зарегистрирован: Пт май 04, 2007 7:32 pm

Сообщение coldfire » Ср сен 05, 2007 4:23 pm

Совершенно точно уверен. Причем писалось даже не N, а конкретное число:
if #Object1.Fields[1].Selected then
Tag = 1;
endif

Ругается на точку после Fields[1]...
coldfire
 
Сообщения: 4
Зарегистрирован: Вт сен 04, 2007 3:44 pm

Сообщение Admin » Чт сен 06, 2007 1:09 pm

Я бы так написал
Код: Выделить всё
if (#Object1.Field1.Selected == 1 ) then
Tag = value;
endif

Но дело в том что у Field1 может не быть такого поля Selected..
Admin
Site Admin
 
Сообщения: 294
Зарегистрирован: Пт май 04, 2007 7:32 pm

Сообщение coldfire » Чт сен 06, 2007 11:11 pm

Admin писал(а):Я бы так написал
Код: Выделить всё
if (#Object1.Field1.Selected == 1 ) then
Tag = value;
endif

Но дело в том что у Field1 может не быть такого поля Selected..


Нет, это _СОВСЕМ_ не то. Нет никакого поля Field1 у Object1. Есть индексированное свойство Fields[...], возвращающее условно говоря отдельный объект TField, у которого свой набор свойств, в частности, Selected.

Суть проблемы в том, что если к одиночным свойствам InTouch отлично обращается, то индексированные вводят его в ступор.
coldfire
 
Сообщения: 4
Зарегистрирован: Вт сен 04, 2007 3:44 pm

Сообщение Admin » Пт сен 07, 2007 2:17 pm

Послушайте, для начала неплохо было бы рассказать что за ActiveX Вы используете (или разрабатываете).
Далее, в Интаче вообще не существует массивов, поэтому запись [N] и
"вводит его в ступор"
Что касается свойств объекта, все они доступны по двойному клику.
Методы некоторых встроенных объектов описаны в одноименных файлах chm в директории Интача.
Например, метод GetItem используется для обращения к данным объекта (таблицы) AlmDbView1:
Код: Выделить всё
tagname = #AlmDbView1.GetItem(1, "Group");

здесь 1 - это номер строки; 'Group' - имя столбца.
Admin
Site Admin
 
Сообщения: 294
Зарегистрирован: Пт май 04, 2007 7:32 pm

Сообщение coldfire » Пт сен 07, 2007 8:34 pm

Спасибо, собственно видимо в этом и был вопрос - нет ли обходного способа обратиться к свойству-массиву.

Пытаемся мы использовать стандартный Microsoft ListView, импортированный из ActiveX. Слава богу, нам удалось найти обходной путь в виде SelectedItem, хотя это и не совсем то, что хотелось бы. А хотелось бы получить доступ к конкретным элементам индексированного свойства #ListControl1.ListItems.

К большому сожалению, возможности в плане ActiveX заставляют прибегать к помощи внешних средств вроде Delphi, т.к. InTouch показывает только первый ярус свойств объектов, а там могут быть вложенные свойства и т.д.
coldfire
 
Сообщения: 4
Зарегистрирован: Вт сен 04, 2007 3:44 pm


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9