Страница 1 из 1

Заблудился в трех колонках

Добавлено: 17 Сентябрь 2014, 14:57
Игорь Столяров
Привет всем !

Что-то я совсем запутался ... :(

Есть некий произвольный ?Browse, предположим с тремя колонками.
Через ?Browse:PropList{PropList:Width,НОМЕР_КОЛОНКИ} - легко могу управлять их шириной.

Но когда пытаюсь поменять местами через ?Browse:PropList{PropListFieldNo,НОМЕР_КОЛОНКИ}
например 1 и 3 колонку - либо не срабатывает, либо формат вообще слетает ... :(

Или что-то я не понимаю в происходящем или оно не работает почему-то. :(
Поможите кто чем может пожалуйста ... как поменять местами колонки через PropList:XЗ ?

Re: Заблудился в трех колонках

Добавлено: 17 Сентябрь 2014, 15:14
kreator
Игорь Столяров писал(а):Но когда пытаюсь поменять местами через ?Browse:PropList{PropListFieldNo,НОМЕР_КОЛОНКИ}
Правильный код:

Код: Выделить всё

  ?Browse{PropList:FieldNo,НОМЕР_КОЛОНКИ} = 3
Должен работать. На всякий случай, вот мой стародавний вариант (сразу не вспомню, где-нибудь использую ли PropList:FieldNo?):

Код: Выделить всё

if choice(?CurrentTab)=2 or choice(?CurrentTab)=5
  ?Browse:1{PROP:FORMAT} =  '110L(1)|M~Название по-латински~C(1)@s30@#2#' &|
                            '109L(1)|M~Название по-русски~C(1)@s30@#1#'   &|
                            '50R(1)|M~Площадь~C(0)@n16b@#3#'              &|
                            '109L(1)|M~Континент~C(0)@s30@#4#'            &|
                            '73L(1)|M~Местоположение~C(2)@s20@#5#'        &|
                            '120L(1)|M~Столица~C(2)@s30@#6#'
else
  ?Browse:1{PROP:FORMAT} =  '109L(1)|M~Название по-русски~C(1)@s30@#1#'   &|
                            '110L(1)|M~Название по-латински~C(1)@s30@#2#' &|
                            '50R(1)|M~Площадь~C(0)@n16b@#3#'              &|
                            '109L(1)|M~Континент~C(0)@s30@#4#'            &|
                            '73L(1)|M~Местоположение~C(2)@s20@#5#'        &|
                            '120L(1)|M~Столица~C(2)@s30@#6#'
end
Это работает железно.

Re: Заблудился в трех колонках

Добавлено: 17 Сентябрь 2014, 15:23
Игорь Столяров
Не ... это ты просто перезаписываешь всю структуру BROWSE через Prop:Format ...
А у меня некий произвольный BROWSE, я получаю только указатель на него.
Через PropList: ... могу добраться до структуру колонок и управлять их размером.
А хочется менять местами колонки ... но не получается. :(

Re: Заблудился в трех колонках

Добавлено: 17 Сентябрь 2014, 15:34
kreator
Вот попробовал на С8.9759:

Код: Выделить всё

?List{proplist:FieldNo,1} = 2
?List{proplist:FieldNo,2} = 1
Переставляет как надо. Если оставить что-нибудь одно, то формат портится.

Re: Заблудился в трех колонках

Добавлено: 17 Сентябрь 2014, 21:36
Игорь Столяров
Спасибо - вроде получилось ...

Номер из proplist:FieldNo - определяет содержание колонки из FROM(), а не ее расположение в списке. И это менять не надо.
А что бы менять колонки местами, действительно, нужно склеивать формат LIST'а из форматов колонок в нужном порядке, например меняем местами 1 и 3 колонки:

Код: Выделить всё

F1 = ?Browse{PropList:Format,1}
F2 = ?Browse{PropList:Format,2}
F3 = ?Browse{PropList:Format,3}
?Browse{Prop:Format} = Clip(F3) & Clip(F2) & Clip(F1)
Разобрал файл BrwExt.clw из LibSrc Clarion'а - там все это есть ...
Единственно, осталось смутное ощущение, что тот кто его писал - что-то не то курил ... :idied:

Re: Заблудился в трех колонках

Добавлено: 18 Сентябрь 2014, 1:36
Admin
Игорь Столяров писал(а):Единственно, осталось смутное ощущение, что тот кто его писал - что-то не то курил ... :idied:
Тянется с DOS`а. Для совместимости cверху навернули разного. Раньше было проще.

Re: Заблудился в трех колонках

Добавлено: 19 Сентябрь 2014, 16:53
Игорь Столяров
Admin писал(а):Тянется с DOS`а. Для совместимости cверху навернули разного. Раньше было проще.
Да, муть полная. Если для десктопа еще как-то можно юзать, то для планшетных приложений не подходит совсем.
Решил разобрать и переписать, но уже через день возник вопрос: А где можно взять то, что курил автор BrwExt.clw ? :idied:

Re: Заблудился в трех колонках

Добавлено: 23 Сентябрь 2014, 9:13
Игорь Столяров
Вообще конечно Clarion забавный язык, как сам по себе, так и в плане документирования.
Зачастую единственный способ понять его работу - это изучение уже имеющего кода (в LibSrc).

Долго пытался понять тайный смысл фрагмента в BrwExt.clw (здесь SELF.m_Control это ?LIST)

Код: Выделить всё

  loc_LoopIndex = 0
  loc_Columns   = 0
  LOOP
      loc_LoopIndex += 1
      IF NOT SELF.m_Control{PROPLIST:Exists,loc_LoopIndex} THEN BREAK.
      loc_Columns = SELF.m_Control{Proplist:FieldNo,loc_LoopIndex}
      SELF.m_Control{Proplist:FieldNo,loc_LoopIndex}=loc_Columns
  END
Реальность превзошла все фантазии. Нигде в документации описание такого фокуса я не видел ! :idied:

Re: Заблудился в трех колонках

Добавлено: 23 Сентябрь 2014, 10:53
kreator
И американцы имеют право на ошибку. Здесь хоть кусок бесполезный, а ведь есть явные ошибки. Которые годами не исправляются.

Re: Заблудился в трех колонках

Добавлено: 23 Сентябрь 2014, 11:07
Игорь Столяров
kreator писал(а):Здесь хоть кусок бесполезный,
В том-то и проблема, что это кусок крайне полезный.
Он неявно выполняет дополнение формата ?LIST привязкой к данным из структуры FROM().
Пока это не сделано - отображение структуры ?LIST работает, но изменять расположение колонок нельзя ... ;)

Код: Выделить всё

  Message(SELF.m_Control{Prop:Format})
  ! Указанный ранее кусок преобразования ?LIST
  Message(SELF.m_Control{Prop:Format})
Но, судя по всему, эта возможность не документирована, хотя и используется.
Впрочем как и возможность создавать ?LIST с произвольным расположением полей для которых фиксирован горизонтальный скроллинг
(а не только крайними левыми - как указано в документации и делается через редактирование структуры LIST в среде разработки).

Re: Заблудился в трех колонках

Добавлено: 23 Сентябрь 2014, 12:45
kreator
Игорь Столяров писал(а):
loc_Columns = SELF.m_Control{Proplist:FieldNo,loc_LoopIndex}
SELF.m_Control{Proplist:FieldNo,loc_LoopIndex}=loc_Columns
Т.е. вот этот фрагмент имеет смысл? Тогда мне нужно либо на покой, либо браться за матчасть. :mrgreen:

Re: Заблудился в трех колонках

Добавлено: 23 Сентябрь 2014, 12:53
Игорь Столяров
kreator писал(а):Т.е. вот этот фрагмент имеет смысл?
Да, см. мое предыдущее сообщения - я все расписал.
Здесь скорее речь идет о неявной (скрытой) инициализации формата LIST.
Ничего плохого в этом нет ... плохо то, что это нигде не описано в справке по языку.
Остается только догадываться сколько таких неявных действий есть еще в других местах ...