Делал этот шаблон для себя, под свои задачи, и решил поделиться: вдруг он кому-то пригодится. Буду рад, если он кому-нибудь поможет.
Шаблон для Clarion 10 (ABC), который позволяет сделать в вашем приложении кликабельные ссылки-переходы: пользователь нажимает на слово-ссылку (или кнопку), и приложение само переносит его к нужному элементу окна: переключает вкладки, обводит цель рамкой и предлагает вернуться на прежнее место. Вам не нужно писать код в окне - ссылки и цели настраиваются в IDE.
Зачем это нужно
Spoiler
Тексты справки и подсказок в приложениях обычно описывают путь словами: "нажмите такую-то кнопку", "откройте такую-то вкладку". Пользователь, который видит ваше приложение впервые, не знает, что это и где находится. Для вас как автора очевидно, для новичка нет. Ссылка-переход снимает вопрос "где это?": пользователь нажал - и ему показали. Особенно полезно для отключённых элементов: пользователь видит серую кнопку и не понимает, почему она недоступна. Ссылка обводит её рамкой и объясняет причину.
Spoiler
Шаблон не универсален, и сразу скажу честно: если окна у вас небольшие, с несколькими элементами и без вкладок, он вам не нужен - там и так всё видно, переходить некуда.
Он пригодится там, где окна большие: много элементов и много вкладок. Типичная ситуация: пользователь работает на одной вкладке, а подсказка отправляет его к элементу на другой, например на первой вкладке, тогда как сам он находится на десятой. Не всегда понятно, что и где находится, особенно новичку. Ссылка сама переключает вкладки, находит элемент, обводит его рамкой и позволяет вернуться обратно.
Он пригодится там, где окна большие: много элементов и много вкладок. Типичная ситуация: пользователь работает на одной вкладке, а подсказка отправляет его к элементу на другой, например на первой вкладке, тогда как сам он находится на десятой. Не всегда понятно, что и где находится, особенно новичку. Ссылка сама переключает вкладки, находит элемент, обводит его рамкой и позволяет вернуться обратно.
Spoiler
Что получает пользователь вашего приложения
- Переход к цели одним нажатием - цель может быть любым элементом окна: кнопка, список, поле, текст, вкладка. Если цель на другой вкладке (в том числе во вложенных), шаблон сам переключает вкладки
- Работает с отключёнными элементами - серая (disabled) кнопка тоже обводится рамкой, можно показать пояснение, почему она недоступна
- Рамка вокруг цели - по умолчанию красная, цвет и толщина настраиваются в IDE; рамка сама пропадает при смене вкладки, при нажатии на цель или при возврате
- Возврат на прежнее место - после перехода пользователь может вернуться туда, откуда пришёл, или остаться на цели. Способ возврата выбирается отдельно для каждой ссылки:
- Авто (по умолчанию) - плашка рядом с целью, если для неё есть чистое место, иначе окно с вопросом. Плашка никогда не закроет другие кнопки и поля
- Только плашка - небольшая панель рядом с рамкой: пояснение и кнопки "Назад" и "Остаться"
- Только окно с вопросом - оформленное окно по центру: серая вводная строка, пояснение выделено цветом и полоской, вопрос "Вернуться на прежнее место?" и две кнопки
- Без возврата - только переход и рамка
- Клавиша Esc (по желанию, по умолчанию выключено) - вернуться назад, пока подсвечена цель
- Несколько ссылок рядом - в одной строке справки может быть сколько угодно ссылок, каждая ведёт к своей цели
- Без единой строчки ручного кода - всё настраивается в IDE: ссылка, цель из списка контролов окна, способ возврата, пояснение
- Два Control-шаблона - бросаются на окно в дизайнере, объект выбирать не нужно, задаётся только цель:
- Ссылка-переход - слово-ссылка: синий подчёркнутый текст, курсор-рука над ним
- Кнопка-переход - обычная кнопка, которая работает как ссылка
- Extension на процедуре - включает механизм на окне и содержит список ссылок: можно превратить в ссылку уже существующую кнопку окна, выбрав её в списке
- Глобальный extension - общие настройки для всех окон: цвет и толщина рамки, отступ рамки от цели, ширина плашки, клавиша Esc, режим вопроса о возврате (оформленное окно или стандартный MESSAGE), отладка
- Не нужно ловить события в окне - класс сам подписывается на события окна (REGISTEREVENT), поэтому вставки в ThisWindow.TakeEvent не нужны
- Сосуществует с масштабированием окон - рамка и плашка пересчитываются при изменении размера окна
- Готов к мульти-DLL - в классе нет глобальных данных, подключается через INCLUDE в нужных DLL
- Метки Start/End - весь генерируемый код обрамлён комментариями с именем расширения, сразу видно, что вставил шаблон
Spoiler
- Класс RAV_GoToClass (RAV_GoTo.inc/.clw) хранит список ссылок окна и подписывается на события окна
- Рамка и плашка создаются в момент перехода через CREATE на вкладке цели, поэтому они видны только пока видна эта вкладка
- При нажатии на ссылку класс запоминает, откуда пришли (вкладку и контрол), переключает вкладки до цели, ставит фокус на цель (если она доступна и может принимать фокус), рисует рамку и показывает плашку или вопрос
- Режим "Авто": перед показом плашки проверяется, не перекроет ли она другие видимые контролы той же вкладки; если перекроет - вместо плашки выводится окно с вопросом
- Clarion 10, ABC
- Никаких сторонних библиотек
Стандартная структура Clarion10\accessory\ (libsrc\win, template\win, doc) - скопировать поверх установки Clarion, зарегистрировать шаблон RAV_GoTo.tpl. В приложении добавить глобальный extension RAV: ссылки-переходы - глобально, на нужных процедурах - extension RAV: ссылки-переходы на окне, затем бросить на окно контрол RAV: ссылка-переход или RAV: кнопка-переход и выбрать цель.
Один раз подключили - и любую подсказку в вашем приложении можно превратить в ссылку, которая сама приводит пользователя к нужному месту. Если шаблон пригодится - отлично; замечания и пожелания приветствуются.
