
Не находит объект
#1
Отправлено 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
Иногда скрипт на этом месте не спатыкается, но чаще выдает эту ошибку.
Что тут может быть?
#2
Отправлено 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') используется свойство, которое меняется от запуска к запуску.
Попробуйте проанализировать это..
#3
Отправлено 29 марта 2011 - 05:12
Сравнила свойства, FullName неизменен, меняется только ConrolID и Handle все остальные идентичны. Как это может влиять?Возможно, проблема в том, что в свойствах объекта VCLObject('ChannelsPanel') используется свойство, которое меняется от запуска к запуску.
Попробуйте проанализировать это..
#4
Отправлено 29 марта 2011 - 07:19
#5
Отправлено 29 марта 2011 - 08:52
Ставила задержку в 5 сек после открытия окна, попробовала WaitProcess не помогло (((У вас это воспроизводится всегда или только после открытия формы? Если только после открытия, а на уже открытой ранее форме не воспроизводится, то это может быть из-за того, что свойства самой формы не подгрузились, попробуйте ждать Sys.Process('InfinityCfg') и VCLObject('ModuleCfgForm'). Если нет, то каждый раз в лог выводите дочерний путь формы, может меняется или индексируется одна из панелек.
#6
Отправлено 29 марта 2011 - 09:02
Тогда перед получение этого объекта, выведите в лог FullName самого последнего дочернего елемента формы и посмторите чем он отличается от того, что вы видите в ObjectProperties.Ставила задержку в 5 сек после открытия окна, попробовала WaitProcess не помогло (((
#7
Отправлено 29 марта 2011 - 09:29
#8
Отправлено 29 марта 2011 - 10:15
var w = Sys.Process('InfinityCfg').VCLObject('ModuleCfgForm');
if (w.WaitVCLObject('Panel1',5000).Exists)
var panel = w.VCLObject('ChannelsPanel')
else
Log.Warning("Объект не найден");
#9
Отправлено 30 марта 2011 - 01:32
Теперь и в дереве объектов нет, Panel1 вижу, а в ней как-будто пусто. С чем это может быть связано? ведь на ней куча элементов содержится
#10
Отправлено 30 марта 2011 - 03:54
XXX ну вот и получается, что объект не найден.
Теперь и в дереве объектов нет, Panel1 вижу, а в ней как-будто пусто. С чем это может быть связано? ведь на ней куча элементов содержится
После обновления дерева объектов картина осталась такая же или объекты появились ?
Попробуйте перед ожиданием объекта выполнить
Sys.Refresh
#11
Отправлено 30 марта 2011 - 04:35
#12
Отправлено 30 марта 2011 - 08:12
Изучила дерево объектов и вот что обнаружила - в дереве на одном и том же уровне две одинаковые панели VCLObject('Panel1') в одной содержатся дочерние объекты а во второй нет. Разве такое реально, два объекта с одним именем? и как организовать работу не с пустым?
проверять значение свойства ChildCount.
#13
Отправлено 30 марта 2011 - 08:35
Спасибо.
Изучила дерево объектов и вот что обнаружила - в дереве на одном и том же уровне две одинаковые панели VCLObject('Panel1') в одной содержатся дочерние объекты а во второй нет. Разве такое реально, два объекта с одним именем? и как организовать работу не с пустым?
проверять значение свойства ChildCount.
Обошла проблему, если не нашелся подъобъект в нужном объекте, то закрываю окно, открываю снова и так до тех пор пока не найду.
может конечно есть решение правильнее...
#14
Отправлено 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.
#15
Отправлено 30 марта 2011 - 08:52
Они полюбому чем-то отличаются, может индекс есть или хинт. Кстати, на счет рефреша, пробовали? Не помогло?Изучила дерево объектов и вот что обнаружила - в дереве на одном и том же уровне две одинаковые панели VCLObject('Panel1') в одной содержатся дочерние объекты а во второй нет. Разве такое реально, два объекта с одним именем? и как организовать работу не с пустым?
#16
Отправлено 30 марта 2011 - 09:12
Refresh пробовала, не помогла, даже если окно открыто и вручную обновляю дерево.Они полюбому чем-то отличаются, может индекс есть или хинт. Кстати, на счет рефреша, пробовали? Не помогло?
Изучила дерево объектов и вот что обнаружила - в дереве на одном и том же уровне две одинаковые панели VCLObject('Panel1') в одной содержатся дочерние объекты а во второй нет. Разве такое реально, два объекта с одним именем? и как организовать работу не с пустым?
ChildCount-ом отличаются. Вот только как перебирать их
#17
Отправлено 30 марта 2011 - 09:14
#18
Отправлено 30 марта 2011 - 09:29
Изучила дерево объектов и вот что обнаружила - в дереве на одном и том же уровне две одинаковые панели VCLObject('Panel1') в одной содержатся дочерние объекты а во второй нет. Разве такое реально, два объекта с одним именем? и как организовать работу не с пустым?
Пришлите, плзз, два скрина со открытыми свойствами этих панелей. И на них д.б.видно дерево объектов.
PS
Никогда такого не встречал, очень хочется увидеть..
#19
Отправлено 30 марта 2011 - 09:45
Если вы и дальше собираетесь использовать этот объект то поиск его по ChildCount - подход крайне нестабилен, поменяется ChildCount и вы мало того что объект не найдете еще и не поймете почему вылетает.Refresh пробовала, не помогла, даже если окно открыто и вручную обновляю дерево.
ChildCount-ом отличаются. Вот только как перебирать их
Присоединяюсь к посту выше, хотелось бы взглянуть...
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных