Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Найти єлемент управления / 25 сообщений из 27, страница 1 из 2
11.01.2008, 17:00
    #35056639
Voitovych
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти єлемент управления
Как определить существует ли на
диалоговом окне dw_1 ?
...
Рейтинг: 0 / 0
11.01.2008, 17:36
    #35056747
Ikar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти єлемент управления
Пройти в цикле по элементам на окне ( массив WindowObject control[] ) и опросить его элементы на ClassName()
------------
С уважением, IKAR

IkarHomeCenter ........ Детский Дворик ........ ГавГав.Инфо
Портал русскоязычной группы пользователей Sybase
...
Рейтинг: 0 / 0
11.01.2008, 18:37
    #35056973
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти єлемент управления
IkarПройти в цикле по элементам на окне ( массив WindowObject control[] ) и опросить его элементы на ClassName()
Если только это DataWindow не лежит на каком-нибудь элементе контейнере, например tabpage...
...
Рейтинг: 0 / 0
12.01.2008, 10:27
    #35057417
Black Savage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти єлемент управления
To Локшин Марк

Бряхня! Стоит тока переделать чуток приведенный ниже код и все будет в шоколаде:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
// public function integer wf_searchdatawindow (graphicobject ago_go)
// Description                 : Function counts datawindow conrols on the window
//                                   RECURSIVE!!!

integer		li_count
integer		li_iitem
window		lw_win
tab		ltab_tab
userobject	luo_uo
string		ls_type

// Define object's type
choose case ago_go.TypeOf()
	case Window!
		lw_win = ago_go
		li_count = UpperBound( lw_win.Control[] )
		ls_type = 'w'
	case Tab!
		ltab_tab = ago_go
		li_count = UpperBound( ltab_tab.Control[] )
		ls_type = 't'
	case UserObject!
		luo_uo = ago_go
		li_count = UpperBound( luo_uo.Control[] )
		ls_type = 'u'
end choose

// Count datawindow controls
for li_iitem = 1 to li_count
	choose case ls_type
		case 'w'
			choose case lw_win.Control[li_iitem].TypeOf()
				case DataWindow!
					// Count datawindow controls on Window
					ii_dwnumber +=	1
				case	Tab!
					wf_searchdatawindow( lw_win.Control[li_iitem] )
				case UserObject!
					wf_searchdatawindow( lw_win.Control[li_iitem] )
				end choose			
		case 't'
			choose case ltab_tab.Control[li_iitem].TypeOf()
				case DataWindow!
					// Count datawindow controls on Tab
					ii_dwnumber +=	1
				case	Tab!
					wf_searchdatawindow( ltab_tab.Control[li_iitem] )
				case UserObject!
					wf_searchdatawindow( ltab_tab.Control[li_iitem] )
				end choose			
		case 'u'
			choose case luo_uo.Control[li_iitem].TypeOf()
				case DataWindow!
					// Count datawindow controls on TabPage (serObject)
					ii_dwnumber +=	 1 
				case	Tab!
					wf_searchdatawindow( luo_uo.Control[li_iitem] )
				case UserObject!
					wf_searchdatawindow( luo_uo.Control[li_iitem] )
				end choose			
	end choose	
next

return guo_variables.SUCCESS
...
Рейтинг: 0 / 0
12.01.2008, 13:57
    #35057569
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти єлемент управления
Black SavageБряхня! Стоит тока переделать чуток приведенный ниже код и все будет в шоколаде:
В чём бряхня? Этот код делает совсем не
IkarПройти в цикле по элементам на окне ( массив WindowObject control[] ) и опросить его элементы на ClassName()
А еще кое-что другое, про что я и сказал.
Так в чём брехня?
...
Рейтинг: 0 / 0
12.01.2008, 14:19
    #35057584
Black Savage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти єлемент управления
Локшин МаркЕсли только это DataWindow не лежит на каком-нибудь элементе контейнере, например tabpage...

В примере, показано как обрабатывать случай, когда лежит "на каком-нибудь элементе контейнере, например tabpage..."

Справедливости ради, замечу, что г-ну Voitovych мой пример навряд ли поможет, впрочем,
как и все другие...
...
Рейтинг: 0 / 0
12.01.2008, 14:53
    #35057614
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти єлемент управления
Black SavageВ примере, показано как обрабатывать случай, когда лежит "на каком-нибудь элементе контейнере, например tabpage..."
А так никто и не говорил что это невозможно в принципе. Или опять сейчас мне продемонстрируют цепочку логических умозаключений в стиле "мама он меня сукой обозвал" ?
...
Рейтинг: 0 / 0
12.01.2008, 14:59
    #35057622
Black Savage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти єлемент управления
Млин, Марк, какой же ты занудный.

Представь, сидит чел на рапоте (сегодня суббота), до этого
он вкалывал в течении недели по 12 часов. И вот он видит, что можно кому-то помочь,
абсолютно не напрягаясь, достаточно скопировать код. Ну, вот я и запостил его, при этом,
чего-то там написал.

Марк, и не лень тебе ради этого всего, по клавишам ботать?
...
Рейтинг: 0 / 0
15.01.2008, 15:36
    #35063057
+/-
+/-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти єлемент управления
DataWindow dw_
boolean lb_exists = true
TRY
dw_ = create using 'dw_1'
destroy dw_
CATCH ( RuntimeError Err)
lb_exists = false
END TRY

Скрипт должен находится в том же окне (или в его предке) где и dw_1.
...
Рейтинг: 0 / 0
15.01.2008, 15:40
    #35063074
+/-
+/-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти єлемент управления
А лучше так:

WindowObject lwo_
boolean lb_exists = true
string ls_obj_name = 'dw_1'
TRY
lwo_ = create using ls_obj_name
destroy lwo_
CATCH ( RuntimeError Err)
lb_exists = false
END TRY

И оформить в виде функции с параметром именем объекта.
...
Рейтинг: 0 / 0
15.01.2008, 19:15
    #35063822
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти єлемент управления
+/-А лучше так:

WindowObject lwo_
boolean lb_exists = true
string ls_obj_name = 'dw_1'
TRY
lwo_ = create using ls_obj_name
destroy lwo_
CATCH ( RuntimeError Err)
lb_exists = false
END TRY
И оформить в виде функции с параметром именем объекта.
А вот это бормотание на какой вопрос отвечало?
...
Рейтинг: 0 / 0
15.01.2008, 19:19
    #35063833
+/-
+/-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти єлемент управления
а Вы догатайтесь
...
Рейтинг: 0 / 0
15.01.2008, 20:00
    #35063883
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти єлемент управления
Догадываться не собираюсь, но хотел удостовериться что никто этот бред не воспринял всерьёз...
...
Рейтинг: 0 / 0
16.01.2008, 09:37
    #35064376
+/-
+/-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти єлемент управления
Филипп Догадываться не собираюсь, но хотел удостовериться что никто этот бред не воспринял всерьёз...
У меня сейчас температура, так что на счет бреда я не спорю :), но все же можете обьяснить почему бред?
...
Рейтинг: 0 / 0
17.01.2008, 11:34
    #35067656
Voitovych
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти єлемент управления
авторIkar

Пройти в цикле по элементам на окне ( массив WindowObject control[] ) и опросить его элементы на ClassName()

спасибо, ОК !
...
Рейтинг: 0 / 0
17.01.2008, 11:40
    #35067688
Voitovych
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти єлемент управления
to Black Savage или кто по РЕКУРСИИ ГУРУ
...
Рейтинг: 0 / 0
17.01.2008, 12:52
    #35068069
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти єлемент управления
+/- Филипп Догадываться не собираюсь, но хотел удостовериться что никто этот бред не воспринял всерьёз...
У меня сейчас температура, так что на счет бреда я не спорю :), но все же можете обьяснить почему бред?
Ну скажем так, частичный бред :)

Этот код выполняет следующее:
1) Ищет в текущем типе (окне|uo, где вызван create using) вложенный тип (имя контрола) с указанным именем
2) Если не найден, ищет глобальный тип с этим именем
3) Если не найден - ошибка

Очевидно что из-за п.2 этот код не выполняет то что от него требовалось(определить существует ли на диалоговом окне dw_1) - возможны ложные срабатывания.
Кроме того он привязан к тому окну где нужна проверка (нельзя даже в предок вынести).
Ну и только один уровень вложенности проверяется.
...
Рейтинг: 0 / 0
17.01.2008, 13:24
    #35068224
+/-
+/-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти єлемент управления
Anatoly Moskovsky Ну скажем так, частичный бред :)
Значит температура меньше 42 :)

Anatoly Moskovsky
Этот код выполняет следующее:
1) Ищет в текущем типе (окне|uo, где вызван create using) вложенный тип (имя контрола) с указанным именем
2) Если не найден, ищет глобальный тип с этим именем
3) Если не найден - ошибка

Насчет порядка поиска спорить не буду ....

Anatoly Moskovsky
Очевидно что из-за п.2 этот код не выполняет то что от него требовалось(определить существует ли на диалоговом окне dw_1) - возможны ложные срабатывания.

Обьясните, пожалуйста популярней, для особо одаренных.

Anatoly Moskovsky
Кроме того он привязан к тому окну где нужна проверка (нельзя даже в предок вынести).

Вынести в предок можно, уже проверил ради интереса.

Anatoly Moskovsky
Ну и только один уровень вложенности проверяется.
Здесь Вы не совсем правы .... Если dw_1 находится табе (или даже на нескольких вложенных) то код работает правильно. Если на UO то работает не корректно.
Хотя в вопросе стояла "на диалоговом окне", то есть как вариант поиска когда dw_1 располложено на самом окне этот код подойдет.
...
Рейтинг: 0 / 0
17.01.2008, 15:11
    #35068722
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти єлемент управления
+/-
Anatoly Moskovsky
Очевидно что из-за п.2 этот код не выполняет то что от него требовалось(определить существует ли на диалоговом окне dw_1) - возможны ложные срабатывания.

Обьясните, пожалуйста популярней, для особо одаренных.

Если в окне контрола нет, а в проекте есть объект с таким же именем как ожидаемое имя контрола, то create using его найдет и ваш код вернет что контрол существует.

Anatoly Moskovsky
Кроме того он привязан к тому окну где нужна проверка (нельзя даже в предок вынести).

Вынести в предок можно, уже проверил ради интереса.

Действительно.


Anatoly Moskovsky
Ну и только один уровень вложенности проверяется.
Здесь Вы не совсем правы .... Если dw_1 находится табе (или даже на нескольких вложенных) то код работает правильно. Если на UO то работает не корректно.

Табы (созданные в паинтере окна) и их содержимое хранятся как вложенные типы в окне их содержащем, поэтому работает. Для табов добавленных в runtime через OpenTab - не должно работать.
В случае с UO - его контролы хранятся в самом UO, и поэтому недоступны в окне в котором лежит UO.
...
Рейтинг: 0 / 0
17.01.2008, 15:16
    #35068753
ЗоринАндрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти єлемент управления
А конструктор при этом create сработает?
и что будет если по причине такого кривого создания визуального объекта в этом самом конструкторе случится RuntimeError?
А если в конструкторе есть код обращающийся к другим объектам могут возникнуть интересные побочные эффекты.

Насколько операция create для dw тяжелее чем простая пробежка по массивам и несколько вызовов ClassName ?
...
Рейтинг: 0 / 0
17.01.2008, 15:32
    #35068862
+/-
+/-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти єлемент управления
2 Anatoly Moskovsky
Полностью согласен.

2 ЗоринАндрей
Конструктор не срабатывает и все ужасы о которых Вы пишете не происходят. Насколько операция тяжелее или легче не знаю. Я предложил скрипт как вариант решения вопроса, а не единственное правильное решение.
...
Рейтинг: 0 / 0
17.01.2008, 15:41
    #35068921
+/-
+/-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти єлемент управления
+/-2 Anatoly Moskovsky
Полностью согласен.

Извиняюсь поторопился. Не полностью :). Вы немного не правы :

Anatoly MoskovskyЕсли в окне контрола нет, а в проекте есть объект с таким же именем как ожидаемое имя контрола, то create using его найдет и ваш код вернет что контрол существует.

Утверждение ошибочно. Только что проверил.
...
Рейтинг: 0 / 0
17.01.2008, 17:12
    #35069348
прикольно
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти єлемент управления
Voitovychto Black Savage или кто по РЕКУРСИИ ГУРУ
веселый пост :-)
...
Рейтинг: 0 / 0
17.01.2008, 17:18
    #35069370
прикольно
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти єлемент управления
Voitovychto Black Savage или кто по РЕКУРСИИ ГУРУ
Подсказка №1:
обычно синтаксис вызова функции такой: <имя_объекта>.<имя_функции> ( <параметры> )
(возможно вам нужна не функция, а что-то другое )
...
Рейтинг: 0 / 0
17.01.2008, 17:23
    #35069395
urvas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти єлемент управления
про return guo_variables.SUCCESS

Замените return guo_variables.SUCCESS на return 1 и всё будет работать. Это я как автор данного кода говорю.
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Найти єлемент управления / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]