Как вставить код в точку вставки внутри Routine при написании шаблона

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
mpn2
Бывалый
Сообщения: 71
Зарегистрирован: 24 Февраль 2015, 17:15
Благодарил (а): 1 раз

Как вставить код в точку вставки внутри Routine при написании шаблона

Сообщение 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
mpn2
Бывалый
Сообщения: 71
Зарегистрирован: 24 Февраль 2015, 17:15
Благодарил (а): 1 раз

Как вставить код в точку вставки внутри Routine при написании шаблона

Сообщение mpn2 »

И вот так писал:

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

AT(%ControlMethod,%BRW_Prefix,%AlertKey)
  MESSAGE('ТЕСТ')
#ENDAT
И вот так писал:

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

#AT(%AlertKeyCaseInsert)
  MESSAGE('ТЕСТ')
#ENDAT
...... еще 20 вариантов своих и 100 вариантов от ИИ..............глухо!
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5642
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 20 раз
Поблагодарили: 82 раза

Как вставить код в точку вставки внутри Routine при написании шаблона

Сообщение finsoftrz »

Надо открыть embed, куда хотите вставить код, там должно быть написано, как он называется. Среды С6 нет под рукой, а в С12 выглядит так.

embed.png
embed.png (8.87 КБ) 89 просмотров

Соответственно, #AT будет выглядеть так.

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

#AT(%ResizerRoutineCode,'BGP'), PRIORITY(4000) 
#ENDAT
C6/C12, ШВС, tps/btrieve.
mpn2
Бывалый
Сообщения: 71
Зарегистрирован: 24 Февраль 2015, 17:15
Благодарил (а): 1 раз

Как вставить код в точку вставки внутри Routine при написании шаблона

Сообщение mpn2 »

открыть embed - это что?
mpn2
Бывалый
Сообщения: 71
Зарегистрирован: 24 Февраль 2015, 17:15
Благодарил (а): 1 раз

Как вставить код в точку вставки внутри Routine при написании шаблона

Сообщение 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
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5642
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 20 раз
Поблагодарили: 82 раза

Как вставить код в точку вставки внутри Routine при написании шаблона

Сообщение finsoftrz »

#AT(%StartAlertKey). Если с hide, то в дереве эмбедов не отображается и предназначена только для вставки кода другими шаблонами.
C6/C12, ШВС, tps/btrieve.
mpn2
Бывалый
Сообщения: 71
Зарегистрирован: 24 Февраль 2015, 17:15
Благодарил (а): 1 раз

Как вставить код в точку вставки внутри Routine при написании шаблона

Сообщение 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
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5642
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 20 раз
Поблагодарили: 82 раза

Как вставить код в точку вставки внутри Routine при написании шаблона

Сообщение finsoftrz »

#AT(%AlertKeyCaseKEYCODE)
C6/C12, ШВС, tps/btrieve.
mpn2
Бывалый
Сообщения: 71
Зарегистрирован: 24 Февраль 2015, 17:15
Благодарил (а): 1 раз

Как вставить код в точку вставки внутри Routine при написании шаблона

Сообщение 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
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5642
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 20 раз
Поблагодарили: 82 раза

Как вставить код в точку вставки внутри Routine при написании шаблона

Сообщение finsoftrz »

Оно написано в #EMBED:

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

#EMBED(%AlertKeyCaseKEYCODE,'AlertKey ROUTINE - внутри CASE KEYCODE()'),%ActiveTemplateInstance,MAP(%ActiveTemplateInstance,%ActiveTemplateinstanceDescription)
C6/C12, ШВС, tps/btrieve.
mpn2
Бывалый
Сообщения: 71
Зарегистрирован: 24 Февраль 2015, 17:15
Благодарил (а): 1 раз

Как вставить код в точку вставки внутри Routine при написании шаблона

Сообщение mpn2 »

А понял, спасибо!!!
===============================

И еще: В структуре Browse может быть несколько BRW (BRW1, BRW8, BRW11, ...)
Сейчас у меня MESSAGE('УРА_') вставляется везде.
А как сделать только для BRW1::RecordCount (к примеру).
Префикс у меня в шаблоне есть:

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

#PROMPT('Префикс браузера:', @s4), %BrowsePrefix, DEFAULT('BRW' & %ActiveTemplateParentInstance)
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5642
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 20 раз
Поблагодарили: 82 раза

Как вставить код в точку вставки внутри Routine при написании шаблона

Сообщение finsoftrz »

В зависимости от задачи можно писать с ссылкой на конкретный browse шаблон, так как их может в окне быть несколько. Иначе код попадет в рутинки, относящиеся ко всем таким шаблонам, так как имя точки вставки у них одинаковое. Чтобы работало только для одного browse шаблона, надо в #AT указать экземпляр %ActiveTemplateParentInstance.

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

#AT(%AlertKeyCaseKEYCODE,%ActiveTemplateParentInstance)
#ENDAT
А свой шаблон привязать к browse шаблону через REQ.

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

#EXTENSION(MyListExt,'Дополнительное управление Browse'),PROCEDURE,REQ(BrowseBox(Clarion))
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5642
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 20 раз
Поблагодарили: 82 раза

Как вставить код в точку вставки внутри Routine при написании шаблона

Сообщение finsoftrz »

Это стандартный подход, если наш шаблон процедурный extension.
C6/C12, ШВС, tps/btrieve.
mpn2
Бывалый
Сообщения: 71
Зарегистрирован: 24 Февраль 2015, 17:15
Благодарил (а): 1 раз

Как вставить код в точку вставки внутри Routine при написании шаблона

Сообщение mpn2 »

Спасибо! Вот этого было достаточно:

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

#AT(%AlertKeyCaseKEYCODE,%ActiveTemplateParentInstance)
Все работает!
Но если что, я вас еще побеспокою!
mpn2
Бывалый
Сообщения: 71
Зарегистрирован: 24 Февраль 2015, 17:15
Благодарил (а): 1 раз

Как вставить код в точку вставки внутри Routine при написании шаблона

Сообщение 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
#!=====================================================================
Ответить