Перейти к содержимому

Фотография

Не находит объект


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 32

#1 Cyrilka

Cyrilka

    Новый участник

  • Members
  • Pip
  • 15 сообщений
  • ФИО:Лола

Отправлено 29 марта 2011 - 02:31

Здравствуйте!
Помогите разобраться.
В дереве объектов объект имеется, инициализирую в скрипте:
Panel := Sys.Process('InfinityCfg').VCLObject('ModuleCfgForm').VCLObject('Panel1').VCLObject('ChannelsPanel').VCLObject('GroupBox5')

При исполнении скрипта ошибка - "Unable to find the object VCLObject('ChannelsPanel')".
Уже использовала вместо VCLObject - WaitVCLObject
Иногда скрипт на этом месте не спатыкается, но чаще выдает эту ошибку.
Что тут может быть?
  • 0

#2 SergeyP

SergeyP

    Специалист

  • Members
  • PipPipPipPipPip
  • 651 сообщений
  • Город:Москва

Отправлено 29 марта 2011 - 04:03

Здравствуйте!
Помогите разобраться.
В дереве объектов объект имеется, инициализирую в скрипте:
Panel := Sys.Process('InfinityCfg').VCLObject('ModuleCfgForm').VCLObject('Panel1').VCLObject('ChannelsPanel').VCLObject('GroupBox5')

При исполнении скрипта ошибка - "Unable to find the object VCLObject('ChannelsPanel')".
Уже использовала вместо VCLObject - WaitVCLObject
Иногда скрипт на этом месте не спатыкается, но чаще выдает эту ошибку.
Что тут может быть?


Возможно, проблема в том, что в свойствах объекта VCLObject('ChannelsPanel') используется свойство, которое меняется от запуска к запуску.
Попробуйте проанализировать это..
  • 0

#3 Cyrilka

Cyrilka

    Новый участник

  • Members
  • Pip
  • 15 сообщений
  • ФИО:Лола

Отправлено 29 марта 2011 - 05:12

Возможно, проблема в том, что в свойствах объекта VCLObject('ChannelsPanel') используется свойство, которое меняется от запуска к запуску.
Попробуйте проанализировать это..

Сравнила свойства, FullName неизменен, меняется только ConrolID и Handle все остальные идентичны. Как это может влиять?
  • 0

#4 ksena

ksena

    Активный участник

  • Members
  • PipPip
  • 99 сообщений
  • Город:Харьков


Отправлено 29 марта 2011 - 07:19

У вас это воспроизводится всегда или только после открытия формы? Если только после открытия, а на уже открытой ранее форме не воспроизводится, то это может быть из-за того, что свойства самой формы не подгрузились, попробуйте ждать Sys.Process('InfinityCfg') и VCLObject('ModuleCfgForm'). Если нет, то каждый раз в лог выводите дочерний путь формы, может меняется или индексируется одна из панелек.
  • 0

#5 Cyrilka

Cyrilka

    Новый участник

  • Members
  • Pip
  • 15 сообщений
  • ФИО:Лола

Отправлено 29 марта 2011 - 08:52

У вас это воспроизводится всегда или только после открытия формы? Если только после открытия, а на уже открытой ранее форме не воспроизводится, то это может быть из-за того, что свойства самой формы не подгрузились, попробуйте ждать Sys.Process('InfinityCfg') и VCLObject('ModuleCfgForm'). Если нет, то каждый раз в лог выводите дочерний путь формы, может меняется или индексируется одна из панелек.

Ставила задержку в 5 сек после открытия окна, попробовала WaitProcess не помогло (((
  • 0

#6 ksena

ksena

    Активный участник

  • Members
  • PipPip
  • 99 сообщений
  • Город:Харьков


Отправлено 29 марта 2011 - 09:02

Ставила задержку в 5 сек после открытия окна, попробовала WaitProcess не помогло (((

Тогда перед получение этого объекта, выведите в лог FullName самого последнего дочернего елемента формы и посмторите чем он отличается от того, что вы видите в ObjectProperties.
  • 0

#7 Rebz

Rebz

    Опытный участник

  • Members
  • PipPipPipPip
  • 471 сообщений


Отправлено 29 марта 2011 - 09:29

может тогда попробуете перед строкой присвоения сначала найти объект ChannelsPanel, используя FindChild?
  • 0

#8 XXX

XXX

    Опытный участник

  • Members
  • PipPipPipPip
  • 284 сообщений
  • ФИО:Денис Викторович
  • Город:Санкт-Петербург


Отправлено 29 марта 2011 - 10:15

JScript

var w = Sys.Process('InfinityCfg').VCLObject('ModuleCfgForm');

if (w.WaitVCLObject('Panel1',5000).Exists)
var panel = w.VCLObject('ChannelsPanel')
else
Log.Warning("Объект не найден");
  • 0

#9 Cyrilka

Cyrilka

    Новый участник

  • Members
  • Pip
  • 15 сообщений
  • ФИО:Лола

Отправлено 30 марта 2011 - 01:32

XXX ну вот и получается, что объект не найден.
Теперь и в дереве объектов нет, Panel1 вижу, а в ней как-будто пусто. С чем это может быть связано? ведь на ней куча элементов содержится
  • 0

#10 SergeyP

SergeyP

    Специалист

  • Members
  • PipPipPipPipPip
  • 651 сообщений
  • Город:Москва

Отправлено 30 марта 2011 - 03:54

XXX ну вот и получается, что объект не найден.
Теперь и в дереве объектов нет, Panel1 вижу, а в ней как-будто пусто. С чем это может быть связано? ведь на ней куча элементов содержится


После обновления дерева объектов картина осталась такая же или объекты появились ?

Попробуйте перед ожиданием объекта выполнить
Sys.Refresh

  • 0

#11 Cyrilka

Cyrilka

    Новый участник

  • Members
  • Pip
  • 15 сообщений
  • ФИО:Лола

Отправлено 30 марта 2011 - 04:35

Изучила дерево объектов и вот что обнаружила - в дереве на одном и том же уровне две одинаковые панели VCLObject('Panel1') в одной содержатся дочерние объекты а во второй нет. Разве такое реально, два объекта с одним именем? и как организовать работу не с пустым?
  • 0

#12 VitalyD

VitalyD

    Опытный участник

  • Members
  • PipPipPipPip
  • 285 сообщений
  • Город:Санкт-Петербург

Отправлено 30 марта 2011 - 08:12

Изучила дерево объектов и вот что обнаружила - в дереве на одном и том же уровне две одинаковые панели VCLObject('Panel1') в одной содержатся дочерние объекты а во второй нет. Разве такое реально, два объекта с одним именем? и как организовать работу не с пустым?


проверять значение свойства ChildCount.
  • 0

#13 Cyrilka

Cyrilka

    Новый участник

  • Members
  • Pip
  • 15 сообщений
  • ФИО:Лола

Отправлено 30 марта 2011 - 08:35


Изучила дерево объектов и вот что обнаружила - в дереве на одном и том же уровне две одинаковые панели VCLObject('Panel1') в одной содержатся дочерние объекты а во второй нет. Разве такое реально, два объекта с одним именем? и как организовать работу не с пустым?


проверять значение свойства ChildCount.

Спасибо.
Обошла проблему, если не нашелся подъобъект в нужном объекте, то закрываю окно, открываю снова и так до тех пор пока не найду.
может конечно есть решение правильнее...
  • 0

#14 Rebz

Rebz

    Опытный участник

  • Members
  • PipPipPipPip
  • 471 сообщений


Отправлено 30 марта 2011 - 08:39



Изучила дерево объектов и вот что обнаружила - в дереве на одном и том же уровне две одинаковые панели VCLObject('Panel1') в одной содержатся дочерние объекты а во второй нет. Разве такое реально, два объекта с одним именем? и как организовать работу не с пустым?


проверять значение свойства ChildCount.

Спасибо.
Обошла проблему, если не нашелся подъобъект в нужном объекте, то закрываю окно, открываю снова и так до тех пор пока не найду.
может конечно есть решение правильнее...

У меня была аналогичная проблема, но решение нашлось нетривиальное и немного не объяснимое)
попробуйте путь к объекту
Sys.Process('InfinityCfg').VCLObject('ModuleCfgForm').VCLObject('Panel1').VCLObject('ChannelsPanel') ...
заменить на
Sys.Process('InfinityCfg').VCLObject('ModuleCfgForm').Panel1.VCLObject('ChannelsPanel') ...

У меня, например, один объект распознавался как VCLObject('Panel1'), а другой как Panel1.
  • 0

#15 ksena

ksena

    Активный участник

  • Members
  • PipPip
  • 99 сообщений
  • Город:Харьков


Отправлено 30 марта 2011 - 08:52

Изучила дерево объектов и вот что обнаружила - в дереве на одном и том же уровне две одинаковые панели VCLObject('Panel1') в одной содержатся дочерние объекты а во второй нет. Разве такое реально, два объекта с одним именем? и как организовать работу не с пустым?

Они полюбому чем-то отличаются, может индекс есть или хинт. Кстати, на счет рефреша, пробовали? Не помогло?
  • 0

#16 Cyrilka

Cyrilka

    Новый участник

  • Members
  • Pip
  • 15 сообщений
  • ФИО:Лола

Отправлено 30 марта 2011 - 09:12


Изучила дерево объектов и вот что обнаружила - в дереве на одном и том же уровне две одинаковые панели VCLObject('Panel1') в одной содержатся дочерние объекты а во второй нет. Разве такое реально, два объекта с одним именем? и как организовать работу не с пустым?

Они полюбому чем-то отличаются, может индекс есть или хинт. Кстати, на счет рефреша, пробовали? Не помогло?

Refresh пробовала, не помогла, даже если окно открыто и вручную обновляю дерево.
ChildCount-ом отличаются. Вот только как перебирать их
  • 0

#17 Cyrilka

Cyrilka

    Новый участник

  • Members
  • Pip
  • 15 сообщений
  • ФИО:Лола

Отправлено 30 марта 2011 - 09:14

Rebz Ваше решение не помогло (((
  • 0

#18 SergeyP

SergeyP

    Специалист

  • Members
  • PipPipPipPipPip
  • 651 сообщений
  • Город:Москва

Отправлено 30 марта 2011 - 09:29

Изучила дерево объектов и вот что обнаружила - в дереве на одном и том же уровне две одинаковые панели VCLObject('Panel1') в одной содержатся дочерние объекты а во второй нет. Разве такое реально, два объекта с одним именем? и как организовать работу не с пустым?


Пришлите, плзз, два скрина со открытыми свойствами этих панелей. И на них д.б.видно дерево объектов.

PS
Никогда такого не встречал, очень хочется увидеть..
  • 0

#19 ksena

ksena

    Активный участник

  • Members
  • PipPip
  • 99 сообщений
  • Город:Харьков


Отправлено 30 марта 2011 - 09:45

Refresh пробовала, не помогла, даже если окно открыто и вручную обновляю дерево.
ChildCount-ом отличаются. Вот только как перебирать их

Если вы и дальше собираетесь использовать этот объект то поиск его по ChildCount - подход крайне нестабилен, поменяется ChildCount и вы мало того что объект не найдете еще и не поймете почему вылетает.
Присоединяюсь к посту выше, хотелось бы взглянуть...
  • 0

#20 Cyrilka

Cyrilka

    Новый участник

  • Members
  • Pip
  • 15 сообщений
  • ФИО:Лола

Отправлено 30 марта 2011 - 09:46

вотПрикрепленный файл  1_.JPG   192,38К   30 Количество загрузок:Прикрепленный файл  1.jpg   169,81К   27 Количество загрузок:
  • 0


Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных