List Format Manager - запрет на определенную колонку

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

List Format Manager - запрет на определенную колонку

Сообщение gopstop2007 »

Например: список из 3-х колонок, 1-Товар, 2-закупочная цена, 3-Продажная цена
Закупочную цену надо скрывать при определенных условиях, как сделать правильно для List Format Manager , чтобы колонка была (скрыта/показана) и остальные колонки адекватно работали по условию указанные в List Format Manager.
Если использовать ?List{PROPLIST:width,xx}=0 , то List Format Manager начинает вести себя неадекватно :)
Кстати сам по себе List Format Manager при скрытии колонок ведет себя неоднозначно, скрывает без проблем, а вот чтобы показал обратно... :(
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
George
Активист
Сообщения: 100
Зарегистрирован: 04 Август 2009, 10:48

List Format Manager - запрет на определенную колонку

Сообщение George »

Я как-то делал с ?List{PROP:Format}
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

List Format Manager - запрет на определенную колонку

Сообщение Игорь Столяров »

Можно зайти с другой стороны ... Спрятать отображение данных:

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

?List{PropList:Picture,XX} = Choose(Loc:NotRight = True,'@PНет правP','@n-12.2b')
Заодно не будет вопросов "Куда пропала колонка ?" и т.д. ;)

А вообще стандартный List Format Manager - это жуть и мрак.
Долго с ним долбились, потом переписали к черту полностью ...
За теми кто отстал - не возвращаться. (С) Кодекс
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

List Format Manager - запрет на определенную колонку

Сообщение gopstop2007 »

George писал(а): Я как-то делал с ?List{PROP:Format}
тогда нет вообще смысла в List Format Manager
Игорь Столяров писал(а): Можно зайти с другой стороны ... Спрятать отображение данных:

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

?List{PropList:Picture,XX} = Choose(Loc:NotRight = True,'@PНет правP','@n-12.2b')
Заодно не будет вопросов "Куда пропала колонка ?" и т.д. ;) А вообще стандартный List Format Manager - это жуть и мрак.
Долго с ним долбились, потом переписали к черту полностью ...
насчет скрытия самих данных замечательная мысль, но вы еще подтвердили про List Format Manager, а я то подумал, что у меня руки из ж..ы растут :D
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

List Format Manager - запрет на определенную колонку

Сообщение gopstop2007 »

Игорь Столяров писал(а): ?List{PropList:Picture,XX} = Choose(Loc:NotRight = True,'@PНет правP','@n-12.2b')
к сожалению не работает, есть формат по умолчанию, он всё выводит в первоначальном виде :(
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

List Format Manager - запрет на определенную колонку

Сообщение Игорь Столяров »

Конечно, речь не идет о совместном использование с List Format Manager ...

Или, как обстоятельно и подробно написал коллега, либо:
- после переопределения формата - берите знчение ?List{PROP:Format} и
записывайте его как значение по умолчанию в List Format Manager;
либо:
- Выполняйте настройку формата ?LIst до инициализации List Format Manager.
За теми кто отстал - не возвращаться. (С) Кодекс
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

List Format Manager - запрет на определенную колонку

Сообщение gopstop2007 »

Игорь Столяров писал(а):Конечно, речь не идет о совместном использование с List Format Manager
Придется писать свое :) Нашел у Capesoft похожее RunScreen, кстати проще сделано.
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
Alex
Старожил
Сообщения: 210
Зарегистрирован: 29 Август 2005, 14:54
Откуда: Белоруссия

List Format Manager - запрет на определенную колонку

Сообщение Alex »

gopstop2007 писал(а): 17 Февраль 2016, 17:04 Кстати сам по себе List Format Manager при скрытии колонок ведет себя неоднозначно, скрывает без проблем, а вот чтобы показал обратно...
Я с этим тоже столкнулся. CW11. Вернуть скрытую колонку не получилось. Внес изменения в brwext.clw в
рутину ChangeColumnStatus . Наверное некрасиво , но колонки теперь вернуть получается.
Spoiler

!------------------------------------------------------------------------------
! NAME : CHANGECOLUMNSTATUS
! DESCRIPTION : changes current column status
!------------------------------------------------------------------------------
ChangeColumnStatus ROUTINE

CASE loc_ColumnQueue.loc_ColIcon
OF COLUMN_SHOW
loc_ColumnQueue.loc_ColIcon = COLUMN_HIDE
IF SELF.m_Check = CHECK_TEXT
loc_ColumnQueue.loc_ColMark = '-'
END
DO GetRealColumn
IF loc_ColumnQueue.loc_ColGroup
IF loc_ColumnQueue.loc_ColRows > 1
?DummyList{PROPLIST:Width + PROPLIST:Group,loc_RealChoice} = 0
ELSE
?DummyList{PROPLIST:Width,loc_RealChoice} = 0
END
ELSE
?DummyList{PROPLIST:Width,loc_RealChoice} = 0
END
OF COLUMN_HIDE
loc_ColumnQueue.loc_ColIcon = COLUMN_SHOW
IF SELF.m_Check = CHECK_TEXT
loc_ColumnQueue.loc_ColMark = 'Yes'
END
DO GetRealColumn
IF loc_ColumnQueue.loc_ColGroup
IF loc_ColumnQueue.loc_ColRows > 1
SELF.m_GroupList.m_Group = loc_ColumnQueue.loc_ColGroup
GET(SELF.m_GroupList,SELF.m_GroupList.m_Group)
! ===== изменено ==============
if SELF.m_GroupList.m_Width =0
SELF.m_GroupList.m_Width=60
PUT(SELF.m_GroupList)
end
! ===== изменено ==============
?DummyList{PROPLIST:Width + PROPLIST:Group,loc_RealChoice} = SELF.m_GroupList.m_Width
ELSE
SELF.m_ColumnList.m_Column = loc_Choice
GET(SELF.m_ColumnList,SELF.m_ColumnList.m_Column)
! ===== изменено ==============
if SELF.m_ColumnList.m_Width =0
SELF.m_ColumnList.m_Width=40
PUT(SELF.m_ColumnList)
end
! ===== изменено ==============
?DummyList{PROPLIST:Width,loc_RealChoice} = SELF.m_ColumnList.m_Width
END
ELSE
SELF.m_ColumnList.m_Column = loc_Choice
GET(SELF.m_ColumnList,SELF.m_ColumnList.m_Column)
! ===== изменено ==============
if SELF.m_ColumnList.m_Width =0
SELF.m_ColumnList.m_Width=40
PUT(SELF.m_ColumnList)
end
! ===== изменено ==============
?DummyList{PROPLIST:Width,loc_RealChoice} = SELF.m_ColumnList.m_Width
END
END
PUT(loc_ColumnQueue)
!// The column is a group header
IF loc_ColumnQueue.loc_ColGroup AND loc_ColumnQueue.loc_ColRows > 1
loc_IconStatus = loc_ColumnQueue.loc_ColIcon
DO SetJointIconsStatus
END
DO CheckLastColumn
SELECT(?ColumnList,loc_DroppedColumn)
POST(EVENT:NewSelection,?ColumnList)
Аватара пользователя
porutchik
Активист
Сообщения: 150
Зарегистрирован: 01 Февраль 2009, 5:35

List Format Manager - запрет на определенную колонку

Сообщение porutchik »

gopstop2007 писал(а): 17 Февраль 2016, 21:56 к сожалению не работает, есть формат по умолчанию, он всё выводит в первоначальном виде
лучше уж в routine где идет заполнение значений прописать в зависимости от разрешений
Ал
✯ Ветеран ✯
Сообщения: 1011
Зарегистрирован: 08 Июль 2005, 6:48
Откуда: Россия

List Format Manager - запрет на определенную колонку

Сообщение Ал »

Было у меня похожее - просили некоторые столбцы показывать/прятать, например если там данных не было. Но количество столбцов было фиксировано, все считалось и ручками-ручками...
Spoiler
Show.gif
Hide1.gif
Show1.gif

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

!After Open Window
   !включить - показать все периоды, выключить - не показывать пустые периоды
   CLEAR(TOS1:record)
   CLEAR(loc:s24Show) !по умолчанию все пусто - прячем !по умолчанию все пусто - прячем
   CLEAR(loc:s24Widtn1) !по умолчанию все пусто - прячем
   SET(TOS1:PlcKodProdKey,TOS1:PlcKodProdKey,1)
   LOOP
      CASE Access:ToolBS24.Next()         !прочитать следующую запись
      OF Level:Notify OROF Level:Fatal   !если произошла ошибка
          BREAK                          !выйти
      ELSE
          LOOP I# = 1 TO 36
              IF TOS1:NumShtAll[I#] > 0  !есть в этом интервале продукция
                  loc:s24Show[I#] = 1    !будем показывать!
              END
          END
      END
   END
   IF loc:FlagShAllCol = 0
     DO ChangeListFormat
     BRW8.UpdateBuffer           !обновить буфер файла по текущему элементу
     BRW8.UpdateWindow           !обновить экранные переменные (локатор)
     DISPLAY(?List:3)   !?Browse:1)
   END
   LOOP I# = 1 TO 19
      IF ?List{PROPLIST:Exists,I#} = 1       !Если колонка с таким номером существует
        loc:s24Widtn1[I#] = ?List{PROPLIST:Width,I#}
      .
   END
   IF loc:FlagShAllCol1 = 0
     DO ChangeListFormat1
     BRW11.UpdateBuffer           !обновить буфер файла по текущему элементу
     BRW11.UpdateWindow           !обновить экранные переменные (локатор)
     DISPLAY(?List)
   END

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

ChangeListFormat ROUTINE !обновить список ?List:3
 X# = 0
 LOOP I# = 11 TO 36
  X# = (I#-10) * 2 + 2 !номер столбца штук
  IF loc:s24Show[I#] = 0 AND loc:FlagShAllCol = 0       !надо скрыть пустые
    IF ?List:3{PROPLIST:Exists,X#} = 1       !Если колонка с таким номером существует
     ?List:3{PROPLIST:Width + PROPLIST:Group,X#} = 0       !столбец
     ?List:3{PROPLIST:Width + PROPLIST:Group,X# + 1} = 0   !столбец
     ?List:3{PROPLIST:Width + PROPLIST:GroupNo,(I#-10) + 1} = 0 !группа
    .
  ELSIF loc:FlagShAllCol = 1 !AND loc:s24Show[I#] = 0   !надо показать все
    IF ?List:3{PROPLIST:Exists,X#} = 1       !Если колонка с таким номером существует
     ?List:3{PROPLIST:Width + PROPLIST:Group,X#} = 60       !loc:s24Widtn[I# * 2 - 1]   !
     ?List:3{PROPLIST:Width + PROPLIST:Group,X# + 1} = 60   !loc:s24Widtn[I# * 2]       !
    .
  END
 END
 EXIT
 
ChangeListFormat1 ROUTINE !обновить список ?List
 LOOP x# = 6 TO 18 BY 4 !I# = 1 TO 19
  IF ?List{PROPLIST:Exists,X#} = 1       !Если колонка с таким номером существует
    IF loc:FlagShAllCol1 = 0  !AND loc:s24Widtn[I#] = 0 !скрыть
        ?List{PROPLIST:Width,X#} = 0
        ?List{PROPLIST:Width,X# + 1} = 0
    ELSIF loc:FlagShAllCol1 = 1 !AND loc:s24Widtn[I#] = 0 !надо показать все
        ?List{PROPLIST:Width,X#} = loc:s24Widtn1[X#]
        ?List{PROPLIST:Width,X# + 1} = loc:s24Widtn1[X#+1]
    END
  END
 END
 EXIT
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

List Format Manager - запрет на определенную колонку

Сообщение Игорь Столяров »

Рыл тут закрома и нашёл старый пример форматера настройки LIST.
Вдруг кому сгодится в образовательных целях ... :)
(внутри APP есть ReadMe по приготовлению)
Вложения
ListF.zip
Пример в исходниках C63 и далее везде
(414.4 КБ) 106 скачиваний
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
ingasoftplus
Ветеран
Сообщения: 425
Зарегистрирован: 26 Декабрь 2006, 17:07
Откуда: Оттуда :)
Благодарил (а): 87 раз
Поблагодарили: 5 раз

List Format Manager - запрет на определенную колонку

Сообщение ingasoftplus »

Игорь Столяров писал(а): 20 Декабрь 2021, 19:58 Рыл тут закрома и нашёл старый пример форматера настройки LIST.
Вдруг кому сгодится в образовательных целях ... :)
(внутри APP есть ReadMe по приготовлению)
прикольно! А есть ли такое же, только для стандартного List Format Manager???
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

List Format Manager - запрет на определенную колонку

Сообщение Игорь Столяров »

ingasoftplus писал(а): 20 Январь 2022, 11:23 только для стандартного List Format Manager
Напс ? Этот прибамас и был сделан потому, что LFM выбесил конкретно.
Плюс наглядность и недокументированные плюшки вроде фиксации произвольной
колонки (а не только крайних левых). :)

Если кто-то захочет его интегрировать в своё ПО - могу подсказать ещё одну фишку:
в процессе работы приложения - считывать при открытии и хранить изменения (!) настроек
LIST в таблице InMemory (или QUEUE). И записывать их в файл на диск только при закрытии приложения.
Это ощутимо ускоряет открытие / закрытие многократно используемых окон с списками.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4550
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

List Format Manager - запрет на определенную колонку

Сообщение finsoftrz »

Нафик, риск потерять все настройки при аварийном завершении программы. Окна и так быстро открываются. Лайфхак есть для сопоставления текущего формата list и сохраненного в настройках на случай модификации состава колонок. Я вызываю небольшую функцию, передав сохраненную строку и актуальную в виде параметров. В этой функции окно с одним list, чтобы вручную не парсить. Присваиваю list строку формата, сохраняю в кьюшку. Затем вторую, сравниваю по колонкам. Возвращаю откорректированную строку формата.
Вместо того, чтобы вежливо оповещать пользователей, что при изменении формата их настройки идут лесом. Согласны, Игорь? :-)
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
ingasoftplus
Ветеран
Сообщения: 425
Зарегистрирован: 26 Декабрь 2006, 17:07
Откуда: Оттуда :)
Благодарил (а): 87 раз
Поблагодарили: 5 раз

List Format Manager - запрет на определенную колонку

Сообщение ingasoftplus »

Игорь Столяров писал(а): 20 Январь 2022, 11:42 Напс ? Этот прибамас и был сделан потому, что LFM выбесил конкретно.
ну так у нас стандартный используется, вот и интересуюсь.
Ответить