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

Фотография

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


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

#21 SergeyP

SergeyP

    Специалист

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

Отправлено 30 марта 2011 - 10:02

Шаманство какое-то !
Действительно, ничего криминального не вижу ! (но это пока ! Будем искать !)

PS
Единственно, заметил, что в свойствах объекта нет "Debug Agent".. Хотя это, вроде бы не должно повлиять..
Но все равно можно попробовать активировать его..
  • 0

#22 ksena

ksena

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

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


Отправлено 30 марта 2011 - 11:28

В первом заметила ObjectIdentifier, он во втором тоже есть? Я не увидела.
  • 0

#23 Rebz

Rebz

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

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


Отправлено 30 марта 2011 - 11:37

А если сходить к программистам и попросить их назвать этот объект поуникальней? :)
Можно же захайлайтить (подсветить) и тот и другой объект, чтобы посмотреть где они в интерфейсе и чё обозначают..?
  • 0

#24 ksena

ksena

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

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


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

А если сходить к программистам и попросить их назвать этот объект поуникальней? :)

Кстати, не просто попросить, а вообще, правила хорошего тона программирования: называть объекты осмысленно, а не оставлять так, как они были названы автоматом. Найдите кто это сделал и раскажите о своей жизни автоматизаторской )))
  • 0

#25 Cyrilka

Cyrilka

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

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

Отправлено 31 марта 2011 - 01:44

Мое решение неудачное, перезакрытие окна может тянуться до бесконечности :(
А как насчет того, что это может быть глюк TC? Невозможно создать объекты с одним именем на одном уровне.
Открыв исходники вижу только одну панель Panel, а TC отображает две.
  • 0

#26 ksena

ksena

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

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


Отправлено 31 марта 2011 - 03:55

Мое решение неудачное, перезакрытие окна может тянуться до бесконечности :(
А как насчет того, что это может быть глюк TC? Невозможно создать объекты с одним именем на одном уровне.
Открыв исходники вижу только одну панель Panel, а TC отображает две.

У TC, конечно, всяко бывает, но чтобы он панельки создавал....я сталкивалась со случаями, когда уже закрытые формочки продолжали висеть в памяти TC и новые появлялись с тем же именем, но они индексировались, а в вашем случае...сразу после запуска TC воспроизводится? Может тоже остаточная информация?
  • 0

#27 Cyrilka

Cyrilka

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

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

Отправлено 31 марта 2011 - 03:59

У TC, конечно, всяко бывает, но чтобы он панельки создавал....я сталкивалась со случаями, когда уже закрытые формочки продолжали висеть в памяти TC и новые появлялись с тем же именем, но они индексировались, а в вашем случае...сразу после запуска TC воспроизводится? Может тоже остаточная информация?

Уже сто раз все перезапускала, и проект закрывала, в надежде - сейчас создам новый и кошмар пропадет, но нет )))) все как и было
Даже установила все на другой машине!
  • 0

#28 ksena

ksena

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

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


Отправлено 31 марта 2011 - 04:43

Уже сто раз все перезапускала, и проект закрывала, в надежде - сейчас создам новый и кошмар пропадет, но нет )))) все как и было
Даже установила все на другой машине!

Тогда чтобы не гадать, можно сделать так: у формы по FindAllChildren найти массив всех дочерних объектов, в этом массиве найти объект с Name "VCLObject('...')", считать у него FullName, через Evaluate преобразовать его в OleVariant и потом уже если он exists - продолжать с ним работу.(это конечно не хорошо, теряем производительность, но должно работать)
  • 0

#29 Cyrilka

Cyrilka

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

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

Отправлено 31 марта 2011 - 04:49

Спасибо, попробую.
  • 0

#30 ksena

ksena

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

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


Отправлено 31 марта 2011 - 04:53

Тогда чтобы не гадать, можно сделать так: у формы по FindAllChildren найти массив всех дочерних объектов, в этом массиве найти объект с Name "VCLObject('...')", считать у него FullName, через Evaluate преобразовать его в OleVariant и потом уже если он exists - продолжать с ним работу.(это конечно не хорошо, теряем производительность, но должно работать)

Извиняюсь, нужно 2 критерия, еще ChildCount > 0, а то он просто отберет 1й по списку.
  • 0

#31 ksena

ksena

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

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


Отправлено 31 марта 2011 - 07:39

Или даже не так, FullName не поможет, нужно по FindAllChildren(как я писала выше) вычислить индекс интересующего объекта, и вернуть его в переменную через Child(индекс).
  • 0

#32 Cyrilka

Cyrilka

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

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

Отправлено 01 апреля 2011 - 04:38

Сделала так, перебираю Child(i) у нужной формы, чтобы удовлетворял двум условиям ChildCount >0 и ObjectIdentifier = нужному имени.
Всем спасибо!
  • 0

#33 Vasiliy

Vasiliy

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 2 959 сообщений
  • ФИО:Касимов Василий
  • Город:Москва

Отправлено 08 июня 2011 - 15:45

Столкнулся сейчас с похожей проблемой - в дереве объектов есть несколько одинаковых имен. Может быть одно, может быть два, а может и много больше.
Разработка говорит, что это динамическая генерация интерфейса на лету. Имена совпадают, так как берутся из шаблонов.

Пока решил проблему таким способом - для каждого нового окна заново находим его (как звучит-то)) )
var
  Hndl : OleVariant;//дескриптор
  curWin : OleVariant;  // указатель на текущее окно
begin
  hndl := Win32API.GetForegroundWindow; //получаем дескриптор текущего окна
  curWin := Sys.WindowFromHandle(hndl);//находим само окно для дальнейшей работы

  • 0


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

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