:: Visual Foxpro, Foxpro for DOS
Иерархия Объекта
dfr

Сообщений: 254
Откуда: Барнаул
Дата регистрации: 29.07.2005
Может кто делал уже (готовый пример)?

Пример. Для пути:
EDIT_4.PF1.PAGE_USL.COMMAND5

получить:
Форма Изменение данных/PF1/Вкладка Условия/Кнопка Обновить

Это для отладки.
Ratings: 0 negative/0 positive
Re: Иерархия Объекта
sphinx

Сообщений: 31616
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Уже было хотел написать, что есть SYS(1272, oObjectName), но проверил в своём проекте для главной формы - возвращает для SYS(1272, thisform) --> "frm_name".


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Иерархия Объекта
dfr

Сообщений: 254
Откуда: Барнаул
Дата регистрации: 29.07.2005
Да, как в SYS(1272..) Name заменить на Caption.
Ratings: 0 negative/0 positive
Re: Иерархия Объекта
sphinx

Сообщений: 31616
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Если всё дерево об'ектов не надо строить (например, на момент активации форм), то создать свойство формы и при каждом заходе в очередной об'ект - накапливать в формате:

thisform.object_path = thisform.object_path + this.parent.Name + ":" + this.parent.Caption + "-->"+ this.Name + ":" + this.Caption.

А если надо собрать всё пути по всём об'ектам - тогда, видимо, рекурсивную функцию писать, на заданном об'екте (например форме) создаём коллекцию содержащихся об'ектов первого уровня, потом берём первый - у него строим такую же коллекцию... Когда всё иерархии внутри первого об'екта первого уровня созданы - по аналогии создаём иерархии для второго об'екта первого уровня....

Нам какой нужен вариант - 1 или 2?


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Иерархия Объекта
sphinx

Сообщений: 31616
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
dfr
Да, как в SYS(1272..) Name заменить на Caption.

А просто сохранить заданный об'ект в переменную/свойство, а потом извлекать Caption:

oObject = this

? oObject.Caption


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Иерархия Объекта
akvvohinc
Автор

Сообщений: 4367
Откуда: Москва
Дата регистрации: 11.11.2008
dfr
Да, как в SYS(1272..) Name заменить на Caption.
Написать свою mysys1272, в которой собирать строку в цикле от текущего объекта вверх через свойство Parent.
Ratings: 0 negative/1 positive
Re: Иерархия Объекта
dfr

Сообщений: 254
Откуда: Барнаул
Дата регистрации: 29.07.2005
akvvohinc
dfr
Да, как в SYS(1272..) Name заменить на Caption.
Написать свою mysys1272, в которой собирать строку в цикле от текущего объекта вверх через свойство Parent.

Вот про это и спрашивал, т.к. непонятно где это брать - текущий объект, Parent..

EDIT_4.PF1.PAGE_USL.COMMAND5 и т.д., ... - уже собираются в логах.



Исправлено 1 раз(а). Последнее : dfr, 20.11.23 02:36
Ratings: 0 negative/0 positive
Re: Иерархия Объекта
akvvohinc
Автор

Сообщений: 4367
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
Вот про это и спрашивал, т.к. непонятно где это брать - текущий объект, Parent.
В таком случае уже мне непонятно - какой объект вы подставляете в SYS(1272), если вам непонятно, где брать текущий объект?

Приведите пример вызова функции SYS(1272), в котором вас все устраивает, кроме отображения свойства Name (вы написали, что вам бы хотелось заменить Name на Caption).

Что же касается свойства Parent, то брать/искать его не надо - оно просто есть у визуальных объектов и предназначено для хранения ссылки на родительский объект.
Поэтому передавая в функцию ссылку на объект, вы проверяете, является ли его свойство Parent ссылкой на объект, и если да, обрабатываете родителя, и так далее, пока на достигнете объекта-формы, у которого свойство Parent скорее всего не будет ссылкой на объект (нет родителя).

А в процессе этих передвижений снизу вверх вы собираете вашу строку из тех свойств, например Caption, которые вам нужны и имеются у объекта.

Вот примерный порядок действий, который я описывал (упрощенно):
PARAMETERS obj
LOCAL ret
ret = obj.caption
DO WHILE TYPE('obj.parent')='O'
obj = obj.parent
ret = obj.caption+' -> '+ret
ENDDO
RETURN ret



Исправлено 1 раз(а). Последнее : akvvohinc, 20.11.23 04:10
Ratings: 0 negative/2 positive
Re: Иерархия Объекта
dfr

Сообщений: 254
Откуда: Барнаул
Дата регистрации: 29.07.2005
akvvohinc
Приведите пример вызова функции SYS(1272)

Упрощенно.

INSERT INTO syslog1 (step1) VALUES (SYS(1272,this))

Теперь у меня много записей в поле step1, типа:

main_new_20.pageframe1.page_dvig.cmd_add
main_new_20.pageframe1.page_dvig.cmd_edt
main_new_20.pageframe1.page_dvig.cmd_del
Ratings: 0 negative/0 positive
Re: Иерархия Объекта
akvvohinc
Автор

Сообщений: 4367
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
SYS(1272,this)
Значит, и ту функцию, пример которой я привел, вы вызываете аналогично:
sys1272(this)
Ratings: 0 negative/0 positive
Re: Иерархия Объекта
dfr

Сообщений: 254
Откуда: Барнаул
Дата регистрации: 29.07.2005
akvvohinc
Вот примерный порядок действий
Спасибо за код, воспользуюсь.

Вопрос был в другом - что можно сделать с уже множеством сохраненных данных

main_new_20.pageframe1.page_dvig.cmd_add

что бы перевести их в читаемый вид (Caption вместо Name).
Ratings: 0 negative/0 positive
Re: Иерархия Объекта
PaulWist

Сообщений: 14693
Дата регистрации: 01.04.2004
dfr
akvvohinc
Вот примерный порядок действий
Спасибо за код, воспользуюсь.

Вопрос был в другом - что можно сделать с уже множеством сохраненных данных

main_new_20.pageframe1.page_dvig.cmd_add

что бы перевести их в читаемый вид (Caption вместо Name).

** открыть проект как таблицу
use MyProject.pjx
** сканируешь, ищешь MyProject.Type = 'K' (это форма), в MyProject.Name лежит имя формы
Use ИмяФормы.scx
** Сканируешь ИмяФормы.ObjectName = 'pageframe1'
** итд
if type('main_new_20.pageframe1.page_dvig.cmd_add') = 'O'
if pemstatus(main_new_20.pageframe1.page_dvig.cmd_add, 'Caption', 5)
** тут меняем на Caption, но лучше добавить ещё поле куда залить Caption
endif
endif


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Иерархия Объекта
akvvohinc
Автор

Сообщений: 4367
Откуда: Москва
Дата регистрации: 11.11.2008
PaulWist
if type('main_new_20.pageframe1.page_dvig.cmd_add') = 'O'
if pemstatus(main_new_20.pageframe1.page_dvig.cmd_add, 'Caption', 5)
При таком подходе всё это работать не будет - формы-то не существует, есть просто открытая таблица формы.



Исправлено 2 раз(а). Последнее : akvvohinc, 21.11.23 15:23
Ratings: 0 negative/0 positive
Re: Иерархия Объекта
PaulWist

Сообщений: 14693
Дата регистрации: 01.04.2004
Ага, лень было исправлять


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Иерархия Объекта
of63

Сообщений: 25599
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
свойство Parent, Name, и вообще "стандартная" структура, бывает не всегда...
типа
o = CREATEOBJECT("Empty")
q = CREATEOBJECT("Empty")
=ADDPROPERTY(q, "myObject", m.o)

В случае фоксовых видеообьектов можно... Если знать зачем, то может и не нужно окажется
Ratings: 0 negative/0 positive
Re: Иерархия Объекта
akvvohinc
Автор

Сообщений: 4367
Откуда: Москва
Дата регистрации: 11.11.2008
Да и вообще Caption объекта в таблице формы и реальный Caption объекта в Run-time - две большие разницы.
Это уж не говоря о том, что и сами объекты могут создаваться программно, а поэтому искать их в таблицах бессмысленно.
А если вспомнить про классы, то вся эта затея теряет смысл, или может использоваться лишь в частных, редких случаях.

Я думаю, что проблема замены в существующих записях журнала решится со временем сама собой в процессе работы, если дополнить новую функцию соответствующим функционалом - при записи в журнал новых данных о некотором объекте (Caption) можно одновременно найти и исправить старые записи о нем, основанные на Name (sys(1272) ).

И автору - Caption объекта, в отличие от Name, вещь переменная, так что строка в журнале, соответствующая одному и тому же объекту, в процессе работы может иметь миллион комбинаций, если его "полный путь" построен на Caption родителей.



Исправлено 1 раз(а). Последнее : akvvohinc, 21.11.23 15:32
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 22 (Гостей: 22)

© 2000-2024 Fox Club 
Яндекс.Метрика