Страница 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'а - там все это есть ...
Единственно, осталось смутное ощущение, что тот кто его писал - что-то не то курил ...

Re: Заблудился в трех колонках
Добавлено: 18 Сентябрь 2014, 1:36
Admin
Игорь Столяров писал(а):Единственно, осталось смутное ощущение, что тот кто его писал - что-то не то курил ...

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

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
Реальность превзошла все фантазии. Нигде в документации описание такого фокуса я не видел !

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
Т.е. вот этот фрагмент имеет смысл? Тогда мне нужно либо на покой, либо браться за матчасть.

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