Страница 1 из 1
Как вставить код в точку вставки внутри Routine при написании шаблона
Добавлено: 08 Декабрь 2025, 13:41
mpn2
Добрый всем день. Помогите горю. Не могу шаблон, командой #АT(), заставить написать код в нужной мне точке в Рутинке.
Что не далаю - код не вставляется. Общался с ИИ, тот не помог.
Пишу на Clarion 6.3 (c шаблонами Синявского). Сам я не программист, любитель. Структуру команды #АT() не понимаю и не знаю. Пишу методом тыка: уже написанное беру как пример.
Код: Выделить всё
BRW1::AlertKey ROUTINE
!|
!| Эта рутинкаи обрабатывает любые KEYCODE'ы, возникщте в BrowseBox.
!|
IF BRW1::RecordCount
CASE KEYCODE() ! Какая клавиша нажата
! Start of "AlertKey ROUTINE - внутри CASE KEYCODE()"
! [Priority 4000]
!====== Точка вставки кода (от моего шаблона) ======:
!
!
!
! End of "AlertKey ROUTINE - внутри CASE KEYCODE()"
OF MouseLeft2
Как вставить код в точку вставки внутри Routine при написании шаблона
Добавлено: 08 Декабрь 2025, 13:53
mpn2
И вот так писал:
Код: Выделить всё
AT(%ControlMethod,%BRW_Prefix,%AlertKey)
MESSAGE('ТЕСТ')
#ENDAT
И вот так писал:
Код: Выделить всё
#AT(%AlertKeyCaseInsert)
MESSAGE('ТЕСТ')
#ENDAT
...... еще 20 вариантов своих и 100 вариантов от ИИ..............глухо!
Как вставить код в точку вставки внутри Routine при написании шаблона
Добавлено: 08 Декабрь 2025, 14:06
finsoftrz
Надо открыть embed, куда хотите вставить код, там должно быть написано, как он называется. Среды С6 нет под рукой, а в С12 выглядит так.

- embed.png (8.87 КБ) 144 просмотра
Соответственно, #AT будет выглядеть так.
Код: Выделить всё
#AT(%ResizerRoutineCode,'BGP'), PRIORITY(4000)
#ENDAT
Как вставить код в точку вставки внутри Routine при написании шаблона
Добавлено: 08 Декабрь 2025, 14:28
mpn2
открыть embed - это что?
Как вставить код в точку вставки внутри Routine при написании шаблона
Добавлено: 08 Декабрь 2025, 14:53
mpn2
Я единственное что смог сделать, так это найти как эта рутинка создается в файле
CTLBROW.TPW
Код: Выделить всё
%InstancePrefix:AlertKey ROUTINE
!|
!| Эта рутинкаи обрабатывает любые KEYCODE'ы, возникщте в BrowseBox.
!| ЗАМЕЧАНИЕ: Клавиши управления курсором не обрабатываются как KEYCODE'ы. Они
!| обрабатываются соответственно как скроллирование BrowseBox и
!| события (EVENT's) выбора.
!| Рутинка включает обработку двойного нажатия. Обычно, эта обработка осуществляетс
!| EMBED-вставках, которые появляются при вставке дочерних управляющих шаблонов.
!| Рутинка также включает обработку локаторов BrowseBox'а.
!| После того, как величина введена в поле локатора, рутинка устанавливает %InstancePrefix:LocateMode в
!| 2 (приравнено к LocateOnValue) и вызывает рутинку %InstancePrefix:LocateRecord.
!|
#EMBED(%StartAlertKey,'INTERNAL: AlertKey ROUTINE - Начало'),HIDE
#FIX(%Control,%ListControl)
#SUSPEND
#?IF %InstancePrefix:RecordCount
#?CASE KEYCODE() #<! Какая клавиша нажата
#EMBED(%AlertKeyCaseKEYCODE,'AlertKey ROUTINE - внутри CASE KEYCODE()'),%ActiveTemplateInstance,MAP(%ActiveTemplateInstance,%ActiveTemplateinstanceDescription)
#?OF MouseLeft2
Как вставить код в точку вставки внутри Routine при написании шаблона
Добавлено: 08 Декабрь 2025, 15:09
finsoftrz
#AT(%StartAlertKey). Если с hide, то в дереве эмбедов не отображается и предназначена только для вставки кода другими шаблонами.
Как вставить код в точку вставки внутри Routine при написании шаблона
Добавлено: 08 Декабрь 2025, 15:24
mpn2
Так. Уже что то появилось:
Код: Выделить всё
BRW1::AlertKey ROUTINE
!|
!| Эта рутинкаи обрабатывает любые KEYCODE'ы, возникщте в BrowseBox.
!| ЗАМЕЧАНИЕ: Клавиши управления курсором не обрабатываются как KEYCODE'ы. Они
!| обрабатываются соответственно как скроллирование BrowseBox и
!| события (EVENT's) выбора.
!| Рутинка включает обработку двойного нажатия. Обычно, эта обработка осуществляетс
!| EMBED-вставках, которые появляются при вставке дочерних управляющих шаблонов.
!| Рутинка также включает обработку локаторов BrowseBox'а.
!| После того, как величина введена в поле локатора, рутинка устанавливает BRW1::LocateMode в
!| 2 (приравнено к LocateOnValue) и вызывает рутинку BRW1::LocateRecord.
!|
MESSAGE('УРА_')
IF BRW1::RecordCount
CASE KEYCODE() ! Какая клавиша нажата
! Start of "AlertKey ROUTINE - внутри CASE KEYCODE()"
! [Priority 4000]
!============= Моя точка вставки ===============
! End of "AlertKey ROUTINE - внутри CASE KEYCODE()"
OF MouseLeft2
! Start of "Обработчик двойного нажатия в BrowseBox"
! [Priority 5000]
Только немного не там.
Написал вот так:
Код: Выделить всё
#AT(%StartAlertKey),PRIORITY(4000)
MESSAGE('УРА_')
#ENDAT
Как вставить код в точку вставки внутри Routine при написании шаблона
Добавлено: 08 Декабрь 2025, 15:32
finsoftrz
#AT(%AlertKeyCaseKEYCODE)
Как вставить код в точку вставки внутри Routine при написании шаблона
Добавлено: 08 Декабрь 2025, 15:40
mpn2
Да получилось, спасибо.
Код: Выделить всё
IF BRW1::RecordCount
CASE KEYCODE() ! Какая клавиша нажата
! Start of "AlertKey ROUTINE - внутри CASE KEYCODE()"
! [Priority 4000]
!============= Моя точка вставки ===============
MESSAGE('УРА_')
! [Priority 8500]
! End of "AlertKey ROUTINE - внутри CASE KEYCODE()"
OF MouseLeft2
А вам не трудно объяснить мне: как вы нашли имя точки вставки:
%AlertKeyCaseKEYCODE
Как вставить код в точку вставки внутри Routine при написании шаблона
Добавлено: 08 Декабрь 2025, 15:54
finsoftrz
Оно написано в #EMBED:
Код: Выделить всё
#EMBED(%AlertKeyCaseKEYCODE,'AlertKey ROUTINE - внутри CASE KEYCODE()'),%ActiveTemplateInstance,MAP(%ActiveTemplateInstance,%ActiveTemplateinstanceDescription)
Как вставить код в точку вставки внутри Routine при написании шаблона
Добавлено: 08 Декабрь 2025, 15:56
mpn2
А понял, спасибо!!!
===============================
И еще: В структуре Browse может быть несколько BRW (BRW1, BRW8, BRW11, ...)
Сейчас у меня
MESSAGE('УРА_') вставляется везде.
А как сделать только для
BRW1::RecordCount (к примеру).
Префикс у меня в шаблоне есть:
Код: Выделить всё
#PROMPT('Префикс браузера:', @s4), %BrowsePrefix, DEFAULT('BRW' & %ActiveTemplateParentInstance)
Как вставить код в точку вставки внутри Routine при написании шаблона
Добавлено: 08 Декабрь 2025, 16:09
finsoftrz
В зависимости от задачи можно писать с ссылкой на конкретный browse шаблон, так как их может в окне быть несколько. Иначе код попадет в рутинки, относящиеся ко всем таким шаблонам, так как имя точки вставки у них одинаковое. Чтобы работало только для одного browse шаблона, надо в #AT указать экземпляр %ActiveTemplateParentInstance.
Код: Выделить всё
#AT(%AlertKeyCaseKEYCODE,%ActiveTemplateParentInstance)
#ENDAT
А свой шаблон привязать к browse шаблону через REQ.
Код: Выделить всё
#EXTENSION(MyListExt,'Дополнительное управление Browse'),PROCEDURE,REQ(BrowseBox(Clarion))
Как вставить код в точку вставки внутри Routine при написании шаблона
Добавлено: 08 Декабрь 2025, 16:22
finsoftrz
Это стандартный подход, если наш шаблон процедурный extension.
Как вставить код в точку вставки внутри Routine при написании шаблона
Добавлено: 08 Декабрь 2025, 16:37
mpn2
Спасибо! Вот этого было достаточно:
Код: Выделить всё
#AT(%AlertKeyCaseKEYCODE,%ActiveTemplateParentInstance)
Все работает!
Но если что, я вас еще побеспокою!
Как вставить код в точку вставки внутри Routine при написании шаблона
Добавлено: 08 Декабрь 2025, 16:40
mpn2
finsoftrz писал(а): 08 Декабрь 2025, 16:22
Это стандартный подход, если наш шаблон процедурный extension.
Я повесил все на кнопку, чтобы к ней была привязка Action для настройки переменных.
Код: Выделить всё
#!====== mpn === Процедура множественного выбора записей ========================================================
#CONTROL(mpn_Selest, 'Процедура множественного выбора записей - F10)'), WINDOW, REQ(BrowseBox(Clarion))
#!Создаем кнопку--------------------------------------------------------------------------------------------------
CONTROLS
BUTTON('Stlect - F10'),AT(,,57,12),USE(?F10SelectButton),SKIP,FONT(,,COLOR:Blue,FONT:bold,CHARSET:ANSI),KEY(F10Key),#REQ
END
#!----------------------------------------------------------------------------------------------------------------
#! Параметры шаблона ---------------------------------------------------
#PROMPT('Имя файла:', FILE), %PosFile, REQ
#PROMPT('Поле флага выбора записи:', FIELD), %FIELDSelect, REQ
#PROMPT('Файл является ссылкой',CHECK),%FileSelect,DEFAULT(1),AT(100)
#PROMPT('Процедура перерасчета:',PROCEDURE),%ProName,REQ
#PROMPT('Префикс браузера:', @s4), %BrowsePrefix, DEFAULT('BRW' & %ActiveTemplateParentInstance)
#PROMPT('Номер столбца для щелчка мышки (1-...):', @n2), %ClickColumn, DEFAULT(1)
#PROMPT('Кнопка Change (для открытия записи):', @s9), %ChangeBtn, DEFAULT('?Change')
#!--------------------------------------------------------------------
#! Находим нашу кнопку -----------------------------------------------
#ATSTART
#DECLARE(%ButtonF10)
#FOR(%Control),WHERE(%ControlInstance = %ActiveTemplateInstance)
#CASE(%ControlOriginal)
#OF('?F10SelectButton')
#SET(%ButtonF10,%Control)
#ENDCASE
#ENDFOR
#ENDAT
#! Код для CASE KEYCODE() --------------------------------------------
#AT(%AlertKeyCaseKEYCODE,%ActiveTemplateParentInstance)
MESSAGE('УРА_')
#ENDAT
#!=====================================================================