Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / DDDW с TabOrder =1 и ItemFocusChanged / 14 сообщений из 14, страница 1 из 1
08.12.2003, 15:20
    #32346580
Вовик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DDDW с TabOrder =1 и ItemFocusChanged
Наблюдаю такой эффект : если у DW первой по порядку TabOrder является
колонка с типом DDDW или DDLB , то ItemFocusChanged не срабатывает
при первом "попадании" фокуса в эту колонку.

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

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

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

В данный момент я это обошел , вставив аналогичный скрипт в конструктор
DW. Вроде работает ...
...
Рейтинг: 0 / 0
09.12.2003, 19:45
    #32348408
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DDDW с TabOrder =1 и ItemFocusChanged
Вовик, так из любопытства - зачем тебе хранить ссылку на DataWindowChild текущего столбца DW?
...
Рейтинг: 0 / 0
09.12.2003, 22:45
    #32348487
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DDDW с TabOrder =1 и ItemFocusChanged
Вовик В самом 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
10.12.2003, 10:32
    #32348728
Вовик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DDDW с TabOrder =1 и ItemFocusChanged
2 Филипп :
Занимаюсь динамической фильтрацией DDDW.
Для повышения производительности при передаче фокуса в новый столбец
анализирую его свойства и заполняю ряд instance - переменных ( в тч idwc) .
Потом в соответствующих событиях типа pbm_command , pbm_dwndropdown, pbm_ncpaint , editchanged их использую , чтобы сто раз не вычислять
одно и тоже.

2 Anatoly Moskovsky :
Спасибо за вариант , но
я хочу снизить количество обращений к GetChild, GetColumnName и тп.
Для этого и нужна instance - переменная.
...
Рейтинг: 0 / 0
10.12.2003, 11:44
    #32348895
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DDDW с TabOrder =1 и ItemFocusChanged
Вовикя хочу снизить количество обращений к 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
10.12.2003, 12:43
    #32349031
Вовик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DDDW с TabOrder =1 и ItemFocusChanged
Спасибо, подумаю...
...
Рейтинг: 0 / 0
10.12.2003, 18:53
    #32349778
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DDDW с TabOrder =1 и ItemFocusChanged
GetChild, GetColumnName и т.п. есть вызовы DLL функций, поэтому попытки экономии на них с помощью пложения Powerscriptовых конструкций и instance variables, состояние которых нужно правильно поддерживать - упражнения сомнительные...
...
Рейтинг: 0 / 0
10.12.2003, 21:50
    #32349921
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DDDW с TabOrder =1 и ItemFocusChanged
ФилиппСообщений: 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
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / DDDW с TabOrder =1 и ItemFocusChanged / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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