RAV_ListFormat — шаблон для сохранения и настройки формата списков

Программы на Clarion, шаблоны, библиотеки и пр.

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

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

RAV_ListFormat — шаблон для сохранения и настройки формата списков

Сообщение gopstop2007 »

RAV_ListFormat — шаблон для сохранения и настройки формата списков

Автономный модуль + шаблон Clarion 10 (ABC), который даёт пользователям вашего приложения возможность настраивать любой список (LIST/BROWSE) под себя — с сохранением настроек отдельно для каждого пользователя и каждого списка — и добавляет разработчику готовый набор инструментов без единой строчки ручного кода в окне.

С огромной благодарностью Игорю Столярову — этот модуль и шаблон созданы на основе его кода и идей.
Дополнил и оформил: Рыбников А.

Интерфейс на двух языках RU/EN (по умолчанию RU - RAVLF:Lang BYTE(1), переключить язык в EN-версии на английский (RAVLF:Lang BYTE(2))

Что умеет

Для пользователя приложения
Spoiler
  • Перетаскивание колонок мышью — меняется порядок, курсор показывает режим переноса
  • Правый клик по шапке колонки — контекстное меню: скрыть/показать (в т.ч. «показать все скрытые»), переместить влево/вправо, подогнать ширину под текст или под все видимые колонки, прижать текст/заголовок влево или вправо, зафиксировать колонку у левого края, задать формат отображения (числа/даты/деньги) с живым примером, увеличить/уменьшить/сбросить масштаб
  • Полноценное окно-редактор («Настройка таблицы») — одним экраном:
    • список всех колонок с чекбоксами вкл/выкл, иконками статуса, точным вводом ширины (двойной клик по ячейке)
    • поиск колонки по маске * и ?
    • фильтр «Все / Рабочие / Скрытые / Уменьшенные / Увеличенные»
    • визуальная подсветка изменённых колонок — прямо в списке редактора и в самом настраиваемом списке одновременно
    • объединение соседних колонок в группу с собственным названием («Оплата» над «К оплате» + «Оплачено»), переименование группы, разбор группы обратно
    • границы между колонками, цвет и оформление заголовков
    • вкладка «Оформление»: высота строки, размер и семейство шрифта (5 вариантов), цвет сетки, цвет выделения строки, чувствительность колеса мыши
    • вкладки «Описание» и «Клавиши» — встроенная справка для конечного пользователя
    • окно тянется за мышью (resize), кнопка «Сброс настроек по умолчанию» (F5)
  • Масштаб списка одним движением — Ctrl+ / Ctrl- (и NumPad, и основной ряд клавиатуры), кнопки на окне или пункты меню шапки: одновременно меняются шрифт, высота строки и ширина всех колонок. Уровень масштаба хранится отдельно от пользовательских настроек колонок — сброс всегда возвращает точный исходный вид, ничего не портится
  • Два независимых режима раскладки — компактный (максимум строк на экране) и горизонтальный (крупнее, для просмотра большого числа полей), с собственными наборами настроек, переключаются одной кнопкой
Для разработчика
Spoiler
  • Полностью автономный модуль — никакой ABC BrowseClass, никакого словаря приложения, только нативный TopSpeed и ASCII. Вешается на существующий список без переделки процедуры
  • Готовый Clarion Template — перетащить на процедуру, указать объект списка и уникальный ID настроек, галочками включить нужные функции (меню шапки, drag-and-drop, масштаб, режимы раскладки) — весь код генерируется автоматически с чёткими маркерами Start/End
  • Два Control-шаблона-кнопки — «Открыть редактор настроек» и «Кнопки масштаба (+/−/сброс)» — перетаскиваются на окно рядом со списком, сами находят нужный список и привязываются к нему
  • Работает с мульти-DLL — модуль компилируется один раз в data-DLL с Export List, в остальных DLL/EXE — только INCLUDE прототипов
  • Миграция настроек «на лету» — если у пользователей уже есть старый файл настроек другого формата, модуль сам переносит данные при первом запуске, ничего не теряя
  • Устойчивая структура файла настроек — предусмотрен резерв под будущее расширение без пересоздания файлов пользователей
Требования
  • Clarion 10, ABC
  • Никаких сторонних библиотек — только стандартный RTL
Установка

Стандартная структура Clarion10\accessory\ (libsrc\win, template\win, images, doc) — распаковать поверх установки Clarion, подробная инструкция и пример подключения к стандартному или мульти-DLL проекту — в README.txt внутри архива.

Автономный, без зависимостей от словаря и ABC

Замечания в работе и усовершенствования шаблона приветствуются.
Вложения
RAV_ListFormat.zip
(55.44 КБ) 10 скачиваний
Последний раз редактировалось gopstop2007 06 Июль 2026, 22:56, всего редактировалось 4 раза.
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
gopstop2007
Полимат
Сообщения: 1881
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 33 раза
Поблагодарили: 13 раз

RAV_ListFormat — шаблон для сохранения и настройки формата списков

Сообщение gopstop2007 »

Вот еще интерфейсы, чтобы было наглядно и понятно.
Вложения
ListF4.png
ListF6.png
ListF5.png
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
gopstop2007
Полимат
Сообщения: 1881
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 33 раза
Поблагодарили: 13 раз

RAV_ListFormat — шаблон для сохранения и настройки формата списков

Сообщение gopstop2007 »

обновил архив, исправил баг с позиционированием записи на списке и подправил драг-дроп, чтобы было видно с подсветкой шапки при перетягивании колонки.
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 6068
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 25 раз
Поблагодарили: 90 раз

RAV_ListFormat — шаблон для сохранения и настройки формата списков

Сообщение finsoftrz »

В этом деле главное не сделать из пользователя обиженного бегемота, как в любимом нашем мультике "Ну, погоди! ". Чтобы увидеть обиженного бегемота на картинке, надо настроить list озвученными выше способами, затем в дизайнере добавить новую колонку посередине, скомпилировать. Если в list настройки сохранятся, а новая колонка будет на своем месте, то все норм. Иначе увидите обиженного бегемота. :-)
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8722
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 40 раз
Поблагодарили: 145 раз

RAV_ListFormat — шаблон для сохранения и настройки формата списков

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

finsoftrz писал(а): 07 Июль 2026, 8:17 затем в дизайнере добавить новую колонку посередине
Для контроля таких изменений храниться оригинальное значение ?List{Prop:Format}.
И если разрабочиком для списка были сделаны какие-либо дабавления, изменения и т.д. -
пользовательские настройки сбрасываются в значение по умолчанию, т.е. попросту теряются. 🤷‍♀️
За теми, кто отстал, не возвращаться ! 🏴‍☠️ Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 6068
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 25 раз
Поблагодарили: 90 раз

RAV_ListFormat — шаблон для сохранения и настройки формата списков

Сообщение finsoftrz »

Игорь Столяров писал(а): 07 Июль 2026, 8:30
finsoftrz писал(а): 07 Июль 2026, 8:17 затем в дизайнере добавить новую колонку посередине
Для контроля таких изменений храниться оригинальное значение ?List{Prop:Format}.
И если разрабочиком для списка были сделаны какие-либо дабавления, изменения и т.д. -
пользовательские настройки сбрасываются в значение по умолчанию, т.е. попросту теряются. 🤷‍♀️
Это и есть обиженный бегемот. Помните, как он в мультике в городки играл? Только построит, пробегает волк и все разрушает. Для волка плохо закончился, получил битой промеж глаз. :-)
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8722
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 40 раз
Поблагодарили: 145 раз

RAV_ListFormat — шаблон для сохранения и настройки формата списков

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

finsoftrz писал(а): 07 Июль 2026, 8:57 Это и есть обиженный бегемот.
Здесь главное не быть упёртым ослом, для которого рабочие настройки списков являются большим достижением в жизни.
Сами выбираем законодателей, потом исполняем принятые ими законы и перенастраиваем программы ... Кому жаловаться-то ? :D
За теми, кто отстал, не возвращаться ! 🏴‍☠️ Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 6068
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 25 раз
Поблагодарили: 90 раз

RAV_ListFormat — шаблон для сохранения и настройки формата списков

Сообщение finsoftrz »

На самом деле, мячик на Вашей стороне, никто не мешает вместо сбрасывания настроек делать синхронизацию по названию колонок, чего в большинстве случаев достаточно. Названия колонок не меняете ведь? А то я тут видел у одного нашего коллеги, колонку с суммой называю количество и наоборот, и все работает. :-)

PS. Я принципиально не голосую с 2000 года.
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8722
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 40 раз
Поблагодарили: 145 раз

RAV_ListFormat — шаблон для сохранения и настройки формата списков

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

finsoftrz писал(а): 07 Июль 2026, 10:39 никто не мешает вместо сбрасывания настроек делать синхронизацию по названию колонок
Никто не мешает. Но существует вопрос: зачем ? Просто что бы было ?
К тому же кроме наименований, есть ещё вхождение в группы и контент колонки.
Если изменения к LIST применяются последовательно, наверно можно что-то ослеживать.
А если хаотично через несколько лет ? Да там вообще всё другое ...

Всегда должно быть очень простое действие возвращаающее всё в исходную точку.
А инвестировать лучше в антиквариат или фондовый рынок, а не настройки колонок. :D
За теми, кто отстал, не возвращаться ! 🏴‍☠️ Кодекс
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8722
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 40 раз
Поблагодарили: 145 раз

RAV_ListFormat — шаблон для сохранения и настройки формата списков

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

Если говорить о развитии сабжа, то мне видится полезной опция выгрузки / загрузки текущих форматов.
Например, для переноса сделанных настроек на другие компьютеры и даже включение их в установочный комплект.
Причем в 2026 г. лучше уже сразу делать в открытом формате, например с использованием прекрасного класса CJSON.

Что-то вроде вот такого:
1.jpg
За теми, кто отстал, не возвращаться ! 🏴‍☠️ Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 6068
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 25 раз
Поблагодарили: 90 раз

RAV_ListFormat — шаблон для сохранения и настройки формата списков

Сообщение finsoftrz »

У меня поначалу был вариант со сбросом настроек. Но это, как помягче сказать, сильно нервировало пользователей, да и меня тоже. Синхронизация это простой код. Мне надо было только синхронизировать ширину колонок. Но можно и поизощряться, если хочется. Примерно так:

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

test_r routine
  DATA
lor:queue queue, pre()
lor:name  string(40)
lor:width long
.
lor:i  long
  CODE

     ?List{PROP:FORMAT}=clip(lop:strCur)   !сохраняем ширины колонок в текущем формате
     lor:i=0
     loop
        lor:i+=1
        if ?List{PROPLIST:Exists,lor:i}=False
           break
        .
        clear(lor:queue)
        lor:name=?List{PROPLIST:Header,lor:i}
        lor:whidth=?List{PROPLIST:Width,lor:i}
        add(lor:queue)
     .

     sort(lor:queue,lor:name)
     ?List{PROP:FORMAT}=clip(lop:strNew)  !устанавливаем ширины колонок в новом формате
     lor:i=0
     loop
        lor:i+=1
        if ?List{PROPLIST:Exists,lor:i}=False
           break
        .
        clear(lor:queue)
        lor:name=?List{PROPLIST:Header,lor:i}
        get(lor:queue,lor:name)
        if error()
           cycle
        .
        ?List{PROPLIST:Width,lor:i}=lor:whidth
     .

     free(lor:queue)
     Loc:Val=?List{PROP:FORMAT}


После этого жизнь стала легче. Сброс к основной настройке у меня из контекстного меню.

PS. На всякий случай, это рутинка из специальной процедуры, в которой есть скрытое окно с list. Вызывается автоматически для всех browse.
Последний раз редактировалось finsoftrz 07 Июль 2026, 12:02, всего редактировалось 1 раз.
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 6068
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 25 раз
Поблагодарили: 90 раз

RAV_ListFormat — шаблон для сохранения и настройки формата списков

Сообщение finsoftrz »

Игорь Столяров писал(а): 07 Июль 2026, 11:15 Если говорить о развитии сабжа, то мне видится полезной опция выгрузки / загрузки текущих форматов.
Например, для переноса сделанных настроек на другие компьютеры и даже включение их в установочный комплект.
Причем в 2026 г. лучше уже сразу делать в открытом формате, например с использованием прекрасного класса CJSON.

Что-то вроде вот такого:
1.jpg
Не, это дебри на мое восприятие. Надо проще. В самих browse делать сохранение и выбор настроек из списка, если browse сложный. А копирование настроек у меня целиком всех для пользователя. То есть, завели нового, который, как правило, выполняет аналогичные функции, как у другого, у него сразу появляются все настройки в готовом виде.
Установочные комплекты можно по видам бизнеса. Там не только настройки броузов.
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8722
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 40 раз
Поблагодарили: 145 раз

RAV_ListFormat — шаблон для сохранения и настройки формата списков

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

finsoftrz писал(а): 07 Июль 2026, 12:00 как правило, выполняет аналогичные функции
Это решение, исторически существующее в конкретном проекте, со всеми его многочисленными "как правило".
А здесь универсальный шаблон, с понятной логикой работы и применяемый к спискам произвольного проекта.
Это иное ! :D
За теми, кто отстал, не возвращаться ! 🏴‍☠️ Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 6068
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 25 раз
Поблагодарили: 90 раз

RAV_ListFormat — шаблон для сохранения и настройки формата списков

Сообщение finsoftrz »

Чтобы перенести настройки с одного компьютера на другой, достаточно скопировать несколько файликов. Зачем городить с какими-то универсальными форматами обмена? Ну, Вам виднее.
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8722
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 40 раз
Поблагодарили: 145 раз

RAV_ListFormat — шаблон для сохранения и настройки формата списков

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

finsoftrz писал(а): 07 Июль 2026, 13:13 достаточно скопировать несколько файликов
Полностью с Вами согласен.
Но это легче Вам, мне или специально обученному сисадмину.

А обычному пользователю было бы проще выгрузил / загрузил.
Потому, что как только пользователь полез в "файлики", так жди беды ... :D
За теми, кто отстал, не возвращаться ! 🏴‍☠️ Кодекс
Ответить