powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / DDDW с TabOrder =1 и ItemFocusChanged
14 сообщений из 14, страница 1 из 1
DDDW с TabOrder =1 и ItemFocusChanged
    #32346580
Фотография Вовик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наблюдаю такой эффект : если у DW первой по порядку TabOrder является
колонка с типом DDDW или DDLB , то ItemFocusChanged не срабатывает
при первом "попадании" фокуса в эту колонку.

Это есть нормально?
Если нет , то как тогда с этим побороться.
...
Рейтинг: 0 / 0
DDDW с TabOrder =1 и ItemFocusChanged
    #32346939
Фотография Вовик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что , никто не сталкивался с таким поведением ?
...
Рейтинг: 0 / 0
DDDW с TabOrder =1 и ItemFocusChanged
    #32346976
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Без указания версии РВ (со всеми подробностями) и ОС, твой вопрос не имеет смысла...
...
Рейтинг: 0 / 0
DDDW с TabOrder =1 и ItemFocusChanged
    #32347078
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. Так и должно быть.
ItemFocusChanged срабатывает только при переходе между ячейками DW. Если же в DW фокус передается из другого контрола в текущую ячейку, то не должно вызываться.
У тебя как раз этот случай: до первого получения фокуса текущая ячейка -ячейка с минимальным ненулевым табордером в 1-й строке.
А DDDW здесь не причем.
...
Рейтинг: 0 / 0
DDDW с TabOrder =1 и ItemFocusChanged
    #32347431
Фотография Вовик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PB 8.03 Win2k SP4

Ответ понятен. Тогда встречный вопрос : как для этого случая добиться
вызова ItemFocusChanged ? Через SetColumn ? через SetFocus ?
Как правильнее?
...
Рейтинг: 0 / 0
DDDW с TabOrder =1 и ItemFocusChanged
    #32347825
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смотря чего ты этим хочешь добиться. Ведь вызов ItemFocusChanged не самоцель, там наверно есть какая-то обработка.
Опиши цель и наверно тут что-то посоветуют.
...
Рейтинг: 0 / 0
DDDW с TabOrder =1 и ItemFocusChanged
    #32348070
Фотография Вовик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В самом DW есть instance variable DataWindowChild idwc .
В ней хранится ссылка на DataWindowChild текущего столбца DW.

В ItemFocusChanged имеется скрипт, инициализирующий эту переменную
для текущего столбца. Все работает, за исключением случая ,
когда DW открывается в первый раз.

В данный момент я это обошел , вставив аналогичный скрипт в конструктор
DW. Вроде работает ...
...
Рейтинг: 0 / 0
DDDW с TabOrder =1 и ItemFocusChanged
    #32348408
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вовик, так из любопытства - зачем тебе хранить ссылку на DataWindowChild текущего столбца DW?
...
Рейтинг: 0 / 0
DDDW с TabOrder =1 и ItemFocusChanged
    #32348487
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вовик В самом DW есть instance variable DataWindowChild idwc .
В ней хранится ссылка на DataWindowChild текущего столбца DW.


Создай ф-ю, которая будет для DW возвращать Datawindowchild текущего столбца, и вызывай ее в том месте, где бы ты использовал ту ссылку.
Что-то вроде этого (без обработки ошибок):
Код: plaintext
1.
2.
3.
4.
5.
Datawindowchild dwc
If this.GetChild(this.GetColumnName(), dwc) <  0  Then
   SetNull(dwc)
End If
Return dwc
...
Рейтинг: 0 / 0
DDDW с TabOrder =1 и ItemFocusChanged
    #32348728
Фотография Вовик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Филипп :
Занимаюсь динамической фильтрацией DDDW.
Для повышения производительности при передаче фокуса в новый столбец
анализирую его свойства и заполняю ряд instance - переменных ( в тч idwc) .
Потом в соответствующих событиях типа pbm_command , pbm_dwndropdown, pbm_ncpaint , editchanged их использую , чтобы сто раз не вычислять
одно и тоже.

2 Anatoly Moskovsky :
Спасибо за вариант , но
я хочу снизить количество обращений к GetChild, GetColumnName и тп.
Для этого и нужна instance - переменная.
...
Рейтинг: 0 / 0
DDDW с TabOrder =1 и ItemFocusChanged
    #32348895
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вовикя хочу снизить количество обращений к GetChild, GetColumnName и тп.
Для этого и нужна instance - переменная.

Кешируй обращения к GetChild (а GetColumnName и так быстро работает)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
ls_col = GetColumnName()
If is_curr_col <> ls_col Then
   is_curr_col = ls_col
   If GetChild(is_curr_col, idwc_curr_dwc) <  0  Then
      SetNull(idwc_curr_dwc)
   End If
End If
Return idwc_curr_dwc
...
Рейтинг: 0 / 0
DDDW с TabOrder =1 и ItemFocusChanged
    #32349031
Фотография Вовик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, подумаю...
...
Рейтинг: 0 / 0
DDDW с TabOrder =1 и ItemFocusChanged
    #32349778
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GetChild, GetColumnName и т.п. есть вызовы DLL функций, поэтому попытки экономии на них с помощью пложения Powerscriptовых конструкций и instance variables, состояние которых нужно правильно поддерживать - упражнения сомнительные...
...
Рейтинг: 0 / 0
DDDW с TabOrder =1 и ItemFocusChanged
    #32349921
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ФилиппСообщений: 245 GetChild, GetColumnName и т.п. есть вызовы DLL функций, поэтому попытки экономии на них с помощью пложения Powerscriptовых конструкций и instance variables, состояние которых нужно правильно поддерживать - упражнения сомнительные

Согласен.
Быстрее всего прямо вызывать
Код: plaintext
1.
2.
3.
If GetChild(GetColumnName(), dwc) >  0  Then
  // process
End If

Я тут провел замеры вышеприведенного кода и функций из прежних моих постингов. Цикл из 100000 итерации выполнялся соответственно (P3-1200):
- прямой вызов GetChild(GetColumnName(), dwc) - 1.8 сек
- вызов ф-и выполняющей GetChild(GetColumnName(), dwc) - 3.8 сек
- то же с кэшированием 2.3 сек
Видно, что один вызов занимает в худшем случае 0.4 мс - вряд ли сильно замедлит работу скрипта :).
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / DDDW с TabOrder =1 и ItemFocusChanged
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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