powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как определить закрытие DDDW?
19 сообщений из 19, страница 1 из 1
Как определить закрытие DDDW?
    #32603232
mustlive
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как определить, что DDDW закрылся? Т.е. есть datawindow с несколькими полями для ввода, одно из которых представляет собой DDDW. Когда на этом
поле кликаешь, выпадает список. Как поймать момент, что юзер куда-то кликнул? (при этом DDDW закрывает drop-down)
...
Рейтинг: 0 / 0
Как определить закрытие DDDW?
    #32603268
Фотография Ikar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда в DDDW пользователь что то выбрал, наступает событие ItemChanged(...), когда пользователь переместил курсор на другое поле в DW, наступает событие ItemFocusChanged(...)

---
С уважением, IKAR

ikarhomecenter@narod.ru
IkarHomeCenter
...
Рейтинг: 0 / 0
Как определить закрытие DDDW?
    #32603402
mustlive
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если он вообще фиг знает куда кликнул? на волпапер, например?
...
Рейтинг: 0 / 0
Как определить закрытие DDDW?
    #32603531
Фотография Ikar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mustliveА если он вообще фиг знает куда кликнул? на волпапер, например?
Тогда, вообще то, как и везде - LoseFocus(...) ...

---
С уважением, IKAR

ikarhomecenter@narod.ru
IkarHomeCenter
...
Рейтинг: 0 / 0
Как определить закрытие DDDW?
    #32603571
mustlive
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да уж... неудобно ни разу :(
...
Рейтинг: 0 / 0
Как определить закрытие DDDW?
    #32603689
E-doc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mustlive , у меня нашелся такой документ, оригинальный адрес не отвечает, привожу фрагмент:

автор7) Explanation of some undeclared datawindow specific events:

pbm_dwclosedropdown:
This event occurs whenever a dropdown column is closed;

pbm_dwescape:
User pressed the escape key (within the datawindow control);

pbm_dwnbacktabout:
Datawindow has lost the focus with a Shift+Tab key combination, this is, it happens when the focus is in the first tab sequence column and the user presses Shift+Tab;

pbm_dwndropdown:
This happens whenever a dropdown column is opened, see Tip 13 for code;

pbm_dwngraphcreate:
This event occurs when a graph datawindow is being created, see Tip 16 for a possible use for this event;

pbm_dwnmousemove:
This event is a special mousemove event for the datawindow object, it has the following parameters:
- XPos: Mouse horizontal position, relative to the object, measured in PBU's;
- YPos: Mouse vertical position, relative to the object, measured in PBU's;
- Row: Row beneath the mouse pointer;
- dwo: Datwindow object beneath the mouse pointer;

pbm_dwnprocessenter:
User has pressed the enter key (within the datawindow control);

pbm_dwnrbuttondblclk:
Occurs when a datawindow is doubleclicked with the right mouse button;

pbm_dwnrbuttonup:
Occurs when the right mouse button is released over the datawindow control;

pbm_dwntabupout:
Occurs whenever the upper arrow is pressed (on a single line editable column);

pbm_dwntabupdown:
Occurs whenever the down arrow is pressed (on a single line editable column);

pbm_dwntabout:
Datawindow has lost the focus with the Tab key, this is, occurs whenever the focus is in the last column of the tab sequence and the Tab key is pressed;

pbm_dwscrolllinehome:
This event happens when the datawindow control gains the focus with the Tab key;


может пригодится.
...
Рейтинг: 0 / 0
Как определить закрытие DDDW?
    #32603696
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
отмапить надо pbm_erasebkgnd
может происходить и по другим поводам,
но при закрытии дропдауна происходит всегда.
взведите флаг при открытии и если мы в pbm_erasebkgnd
и флаг взведен - вызывайте свое событие (чтонть типа xxx_closedropdown) и сбросьте флаг.
...
Рейтинг: 0 / 0
Как определить закрытие DDDW?
    #32603708
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pbm_dwclosedropdown:
This event occurs whenever a dropdown column is closed;
Враньё.


pbm_dwndropdown:
This happens whenever a dropdown column is opened, see Tip 13 for code;
а вот это пригодится для ловли открытия дропдауна.
...
Рейтинг: 0 / 0
Как определить закрытие DDDW?
    #32603986
gerss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зорин Андрей

pbm_dwclosedropdown:
This event occurs whenever a dropdown column is closed;

Враньё.



Не совсем вранье, но срабатывает не всегда. Если фокус уходит с dw, например, если кликнуть по заголовку окна, событие происходит.

Если же перейти на другую колонку или же просто закрыть dddw щелчком по стрелке, которым оно открывается, событие не вызывается.

Так что, скорее всего, толку от него мало.

В свою очередь, я отлавливал закрытие dddw событием перерисовки dw, что, имхо, тоже не есть хорошо. Просто сделать было надо и лучшего способа я не нашел.
...
Рейтинг: 0 / 0
Как определить закрытие DDDW?
    #32604780
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как всегда, напрашивается вопрос - зачем это всё?
...
Рейтинг: 0 / 0
Как определить закрытие DDDW?
    #32604818
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ФилиппКак всегда, напрашивается вопрос - зачем это всё?для фильтрации например. когда отображать надо всё, а выбирать давать только из некоего подмножества.
Приходилось делать зависимые друг от друга дропдауны?
...
Рейтинг: 0 / 0
Как определить закрытие DDDW?
    #32604822
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 gerss
что значит не совсем? whenever - означает "всякий раз, когда". поскольку это не так - то враньё, однозначно!
...
Рейтинг: 0 / 0
Как определить закрытие DDDW?
    #32604843
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПриходилось делать зависимые друг от друга дропдауны?

Да (кстати сказать зависимые друг от друга дропдауны - это частный случай дропдауна зависимого от значения другой колонки, посему не совсем понятна формулировка вопроса :-) ).
К сожалению там где я сейчас работаю, через pbm_dwndropdown и сделано, чему я большой противник. Тем не менее у нас никого не интересует, авторКак определить, что DDDW закрылся
Я предпочитаю или SetDetailHeight + Filtering of dddw + scripting the pbm_command or other event to catch RowFocusChanged on DDDW , или вообще не иметь DDDW на многорядных DW, в которых содержимое DDDW зависимо от значения другой колонки, а вместо этого иметь картинку рядом с displayonly колонкой, на которую клик, и выбираешь из окошка...
...
Рейтинг: 0 / 0
Как определить закрытие DDDW?
    #32604855
mustlive
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как всегда, нашлись ярые сторонники метода и ярые противники. Как и те, которые спрашивают - нафик это надо? :)
Мне например надо для фильтрации зависимого DDDW. Если бы работал абстрактный Click - все было бы намного проще (Click словил - значит, DDDW закрылся. Или клинкули в нем). Но его почему-то не захотели сделать. Хотя
и примитивно просто, и кучу проблем бы сняли
...
Рейтинг: 0 / 0
Как определить закрытие DDDW?
    #32604869
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНо его почему-то не захотели сделать. Хотя
и примитивно просто, и кучу проблем бы сняли...
Не всё так просто как кажется. Окно, которое появляется для показа DDDW делает SetCapture, посему ОНО (а не DW) ловит все клики, чтоб знать, когда закрыться...
...
Рейтинг: 0 / 0
Как определить закрытие DDDW?
    #32604881
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ФилиппДа (кстати сказать зависимые друг от друга дропдауны - это частный случай дропдауна зависимого от значения другой колонки, посему не совсем понятна формулировка вопроса :-) ).
узнаЮ Филиппа :-)

ФилиппЯ предпочитаю или SetDetailHeight + Filtering of dddw + scripting the pbm_command or other event to catch RowFocusChanged on DDDW
ну да, ну да. это наверное намного проще чем с фильтрацией по открытию ;-))
и на обработке other так приятно подтормаживает...
да еще и скроллбар так забавно начинает себя вести...
плавали - знаем :-)))
на этот вариант в 99-ом тогда с Мартином (или это был Рон? эх подводит таки память) кучу времени убили, а результат в итоге средней паршивости получился.
а с pbm_erasebkgnd получилось сразу и довольно элегантно.
впрочем это все сплошное ИМХО - я о вкусах спорить тут не хотел бы...
тем более с главным гуру ;-)

ФилиппК сожалению там где я сейчас работаю, через pbm_dwndropdown и сделано, чему я большой противник. Тем не менее у нас никого не интересует в чем проблема то? что в этом методе вызывает такое отвращение?

Филиппили вообще не иметь DDDW на многорядных DW, в которых содержимое DDDW зависимо от значения другой колонки,
никакой многорядности нет вообще.
у меня есть некая таблица где часть записей неактивна.
показывать(т.е. декодировать из id в display name) значения надо, а выбирать в дропдауне можно только из активных.
запись на форме одна.
...
Рейтинг: 0 / 0
Как определить закрытие DDDW?
    #32604974
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторникакой многорядности нет вообще.
у меня есть некая таблица где часть записей неактивна.
показывать(т.е. декодировать из id в display name) значения надо, а выбирать в дропдауне можно только из активных.
запись на форме одна.

В таком случае это вообще извращение.
Раз есть некая таблица где часть записей неактивна, значит в ней есть поле, указывающаее на этот факт, значит этот флаг спокойно может присутствовать в result setе DDDW. Видимые колонки в DDDW имеют expression на цвет текста (всё тот же affordance , чтоб намекнуть юзеру), нацеленный на этот флаг, itemchanged (вероятность и целесообразность скриптинга которого в не зависимости от проблем с DDDW, невероятным образом превышает вероятность скриптинга как pbm_erasebkgnd так и pbm_dwndropdown) обрабатывает на этот флаг и не дает выбирать неактивную запись. ВСЁ.

авторв чем проблема то? что в этом методе вызывает такое отвращение?
1) многорядность
2) ^%%ля с посвистом для того чтобы правильно изображался selected row в фильтрованном DDDW когда ты его дропнул
Список можно продолжать, но надо ли...
...
Рейтинг: 0 / 0
Как определить закрытие DDDW?
    #32604980
Зорин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Филипп
так уж сразу и "извращение"?! :-((
я разве спрашивал совета как мне лучше сделать?

красить неактивные незачем - лучше не показывать, если их неактивных больше двух третей, то скроллить их юзерам не нравится. просят убрать совсем. можно считать что это требование о котором я забыл упомянуть.
и не разрешать в itemchanged - это значит анноить юзеров MessageBox-ами?
я предпочитаю этого избегать когда возможно.

насчет пунктов 1) и 2) - ничего не понял.
у меня с многорядностью проблем нет.
а если я фильтр дропнул - значит дропдаун закрыт, о каком selected row тогда речь? спозиционировать при открытии (когда я фильтр ставлю) на нужную строку - это 2 LoC, не напрягает совершенно.

насчет вероятности тоже не совсем ясно. скриптинг?
сервис фильтрации в стиле PFC, независимо от используемого метода, пишется один раз, так же как и сервис навешивания типичных проверок на itemchanged. при таком подходе почти все включается и настраивается в конструкторе. вероятность лезть в erasebkgnd или itemchanged стремится к нулю.

Список можно продолжать, но надо ли...
Ok. Закроем тему. На вопросы в этом постинге можешь не отвечать.
Полагаю нам обоим есть чем заняться помимо этой бессмысленной дискуссии.
...
Рейтинг: 0 / 0
Как определить закрытие DDDW?
    #32604992
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторнасчет пунктов 2) - ничего не понял

Вот фрагмент pbm_dwndropdown нашего анцестора (мои- ТОЛЬКО поправки чтобы rowselection отображался правильно в дропнутом DDDW):
Код: 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.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
 /*------------------------------------------------------------------------------

 Event   :			 u_dw_udim.ue_Opendddw

 Returns:         Long

 Parameters:      

 Copyright © DTI

 Date Created: 

 Description:	pbm_dwndropdown - Filters the dddw that's about to be shown
 
--------------------------------------------------------------------------------
 Modifications:
 Date            Author              Comments
 3/19/2004		P. Salgannik		Make sure that ONLY one row shows as selected - 
 											the one corresponding to the current code value
											(Prompted by Issue 33077), see also ue_closedddw
------------------------------------------------------------------------------*/ 
DataWindowChild	dwch
String				filtr, s_this_field, s_dep_field, s_col_type, s_dep_value, s_filter_list, s_dep_rule
string				s_data_column, s_null_rule, s_undefined_rule
Int					rc, i
Date					ValDate
long					l_find, l_row, ll_row_id, ll_currentdddwrow 
boolean				b_set_filter, lb_selectrow

IF i_b_filter_dddw or i_b_dep_dddws_exist THEN
	// Get the DW child and its current filter.  If no filter then create one and add it
	l_row = this.GetRow()
	s_this_field = GetColumnName()
	this.GetChild(s_this_field, dwch)
	filtr = dwch.Describe("DataWindow.Table.Filter")

	IF filtr = DW_DESCRIBE_NOVALUE and i_b_filter_dddw and f_is_column3(dwch, "effective_from_date") THEN
		// Get the date to use with the filter
		ValDate = fu_get_validation_date()
		IF ValDate = Date("01/01/1900") OR IsNull(ValDate) THEN
			ValDate = today()
		END IF
		filtr = 	'Date("' + String(ValDate) + '") >= if(IsNull(effective_from_date),' + &
				    'date("01/01/1900"),  Date(effective_from_date))' + &
					' AND ' + &
					'Date("' + String(ValDate) + '") <= if(IsNull(effective_to_date),' + &
				    'date("12/31/2100"),  effective_to_date  )'
					 
		// Фильтрация части записей, которая неактивна :-))
		b_set_filter = TRUE
	END IF

	// check for dependency rules [SNIPPED]

	IF b_set_filter THEN
		// 3 / 19 / 2004 		P. Salgannik BEGIN!!!!!!!!!!!!!!!!!!!!!!!!
		ll_currentdddwrow = dwch.GetRow()
		IF ll_currentdddwrow >  0  THEN
			ll_row_id = dwch.GetRowIdFromRow(ll_currentdddwrow)
			lb_selectrow = TRUE
		END IF
		
		IF dwch.SetFilter(filtr) <> SUCCESS THEN
			f_printf("Failed to set DDDW filter: " + filtr)
		END IF
		
		IF dwch.Filter() <> SUCCESS THEN
			f_printf("Failed to filter DDDW: " + filtr)
		ELSE
			IF lb_selectrow THEN
				dwch.Selectrow(  0 , FALSE)
				ll_currentdddwrow = dwch.GetRowFromRowId(ll_row_id)
				IF ll_currentdddwrow >  0  THEN
					dwch.ScrollToRow(ll_currentdddwrow)
				END IF
			END IF
		END IF
		// 3 / 19 / 2004 		P. Salgannik END!!!!!!!!!!!!!!!!!!!!!!!!		
		
	END IF
		

END IF
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как определить закрытие DDDW?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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