powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Победить DDDW
9 сообщений из 9, страница 1 из 1
Победить DDDW
    #32290846
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DDDW конечно приятная штука, но ведет себя он абсолютно автономно от самого DataWindow, хотелось бы узнать насчет способов обхода его основного "неприятного" момента - навигации и выбора значения из списка:
1. Можно ли во первых перехватывать нажатия кнопок в тот момент, когда активна колонка с типом DDDW ? Событие pbm_dwnkey к большому сожалению на ней не срабатывает, событие other может и срабатывает, но даже подумать страшно, чтобы через него все перехватывать.
2. Конечно радует, что для колонки DDDW с выставленным свойством "Allow Editiong" у DataWindow срабатывает событие EditChanged, уже есть шанс что то подправить, но все равно - почему если набирать текст без соблюдения регистра, то DW ругается - типа нет такого текста в предложенном списке. Тут или я где то чего то не понял и не поставил, или же у них приведение регистра в данном случае на кириллицу не действует.

Да - еще вопросик. Никто не подскажет, как перехватывать в DW нажатия на клавиатуре "нестандартных" клавиш - например тех, у которых код больше 127 ? :) Или же как конвертить тип KeyCode, чтобы из события pbm_dwnkey вытащить код такой нажатой клавиши ?

P.S. Помощь можно не цитировать, я ее вроде как всю по данным вопросам проштурмовал, лучше своими словами :) На вопрос - зачем оно мне это надо отвечаю сразу - не привыкли российские пользователи в гридах Tab-ом двигаться, каюсь - я и сам постоянно норовлю на DDDW колонке нажать стрелку вверх/вниз. Естественно ничего хорошего из этого не получается. Отказываться от DDDW не хочется. Так что жду и надеюсь на подсказку форума.
...
Рейтинг: 0 / 0
Победить DDDW
    #32290885
Ermak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрите библиотеку.
http://oviont.com/detail.php?sid=27&id=19

Если не ошибаюсь там есть что-то для решения вашей проблемы.
...
Рейтинг: 0 / 0
Победить DDDW
    #32291958
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если честно, я бы не стал использовать библиотеку, на которую дал ссылку Ermak - она очень тяжеловесная, а DLL, который обеспечивает обработку стрелки вверх/вниз и т.п, при этом ломает ряд стандартных фич...\r
И вообще, борьба со стандартной обработкой keyboard inputа всегда наказывается беспощадно :-)), стрелки вверх/вниз в DDDW (да и в стандартном combobox) сделаны для перебора значений в нём, а НЕ для навигации по многорядному дисплею.\r
То как это обходить, обсуждалось тут, в топике под названием Передвижение стрелками по DW Free form :-)), просто мессаджи другие слать надо если хочешь чтобы ряд менялся...\r
/topic/48622\r
Можно, к примеру проделать следующее:\r
Промапить pbm_command, там написать\r
Код: 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.
boolean ib_up, ib_down\r
long ll_row\r
datawindowchild ldwc\r
string ls_column\r
ls_column = GetColumnName()\r
IF GetChild(ls_column, ldwc) <>  1  THEN RETURN\r
IF hwndchild = Handle( ldwc ) THEN \r
  CHOOSE CASE notificationcode\r
    CASE  2049  // RowFocusChanged on DDDW \t\t\r
\t\tib_down = KeyDown(KeyDownArrow!)\r
\t\tIF NOT ib_down THEN ib_up = KeyDown(KeyUpArrow!)\r
\t\tIF ib_down OR ib_up then \t\t\t\r
\t\t\tll_row = GetRow()\r
\t\t\tIF ll_row <  1  OR ll_row > RowCount() THEN RETURN\r
\t\t\tIF ib_down THEN\r
\t\t\t\tll_row ++\r
\t\t\tELSE\r
\t\t\t\tll_row  --\r
 
\t\t\tEND IF\r
\t\t\tIF ll_row <  1  OR ll_row > RowCount() THEN RETURN\r
\t\t\tScrolltoRow(ll_row)\r
\t\t\tmessage.processed = TRUE\r
\t\t\tRETURN  1 \r
\t\tEND IF\r
\tEND CHOOSE\r
END IF\r
\r
RETURN
\r
Но тут возникнет следующая поблема - если жмёшь стрелку вниз , а DDDW на последнем ряду (или вверх, а он на первом), то никаких notifications не будет, он просто сожрёт keystroke. Чтобы побороть это, нужно хукать и т.п., что есть АБСОЛЮТНО не оправданные усилия, с учётом того, что они будут потрачены на ломку стандартной обработки keystrokes.\r
\r
\r
ASCRUS писал:для колонки DDDW с выставленным свойством "Allow Editiong" у DataWindow срабатывает событие EditChanged, уже есть шанс что то подправить, но все равно - почему если набирать текст без соблюдения регистра, то DW ругается - типа нет такого текста в предложенном списке\r
Правильно ругается - reverse lookup в DDDW case sensitive (поэтому и display values должны быть уникальными). Чтобы не ругалось, нужно самому кое-что доделать. Для PFC есть даже расширение для их n_cst_dwsrv_dropdownsearch, смотри тут http://www.pfcguide.com/extensions/ext_0003.asp
...
Рейтинг: 0 / 0
Победить DDDW
    #32292012
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большое спасибо всем за ответы. Пожалуй для меня самое правильное будет в случае с DDDW без надобности не пользоваться им в гридах, изменив стратегию построения интерфейса клиентского приложения. Если это так оказывается сложно, то лучше пойти в обход, увводя ввод навороченных данных с гридов на FreeForm :)

А n_cst_dwsrv_dropdownsearch обязательно посмотрю.
...
Рейтинг: 0 / 0
Победить DDDW
    #32323559
http://oviont.com/detail.php?sid=66&id=55
Филиппу.
Насчет тяжеловесности - согласен. Правда, можно выдрать с кровью.
А вот ломка фичей - расскажите, каких? Исправлю.
...
Рейтинг: 0 / 0
Победить DDDW
    #32323564
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Антон, я же вам уже говорил, лень опять возиться...
...
Рейтинг: 0 / 0
Победить DDDW
    #32324405
Филипп, нашел "ряд стандартных фич" с форума на Sybase.ru:
"Твой DLL ломает стандартное поведение dddw - пользователь не может выбрать значение из dropdownlist (когда лист показан) с помощью клавиатуры."
Это не так. Даже когда лист показан, хождение по записям dddw осуществляется с помощью Ctrl-стрелок вверх и вниз. ItemChanged тоже происходит. Переход на следующее поле ввода - Enter или Tab. Но даже это всегда можно отключить, вернув в скрипте переопределения клавиш 0.(Process default).
Может, еще чего?...
...
Рейтинг: 0 / 0
Победить DDDW
    #32330783
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хождение по записям dddw осуществляется с помощью Ctrl -стрелок вверх и вниз, это и есть ломает стандартное поведение dddw
...
Рейтинг: 0 / 0
Победить DDDW
    #32344135
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот здесь можно скачать документ типа "всё что вы хотели знать о DDDW, но боялись спросить" :-)

http://powerbuilder.codexchange.sybase.com/files/documents/67/1179/advdddw.zip
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Победить DDDW
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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