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

Clarion, Clarion 7

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

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

Как вставить код в точку вставки внутри 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
Бывалый
Сообщения: 69
Зарегистрирован: 24 Февраль 2015, 17:15

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

Сообщение mpn2 »

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

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

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

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

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

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

Сообщение finsoftrz »

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

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

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

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

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

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

Сообщение mpn2 »

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

Как вставить код в точку вставки внутри 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
✯ Ветеран ✯
Сообщения: 5641
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 20 раз
Поблагодарили: 81 раз

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

Сообщение finsoftrz »

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

Как вставить код в точку вставки внутри 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
✯ Ветеран ✯
Сообщения: 5641
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 20 раз
Поблагодарили: 81 раз

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

Сообщение finsoftrz »

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

Как вставить код в точку вставки внутри 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
✯ Ветеран ✯
Сообщения: 5641
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 20 раз
Поблагодарили: 81 раз

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

Сообщение finsoftrz »

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

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

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

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

Сообщение mpn2 »

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

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

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

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

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

Сообщение finsoftrz »

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

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

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

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

#EXTENSION(MyListExt,'Дополнительное управление Browse'),PROCEDURE,REQ(BrowseBox(Clarion))
C6/C12, ШВС, tps/btrieve.
Ответить