Процедурный шаблон

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

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Гость

Сообщение Гость »

Привет.
Хотелось сделать шаблон, создающий процедуру с заранее заданными параметрами, например
SomeProc PROCEDURE(STRING,STRING,STRING,STRING)
Однако такой код не катит:

#PROCEDURE(SomeProc,'Some procedure')
#PREPARE
#SET(%Prototype,'(STRING,STRING,STRING,STRING)')
#ENDPREPARE

Генератор говорит: "переменная %Prototype только для чтения".
Нельзя ли как-то всё же добиться желаемого?

С уважением, Михаил

Привет, Всем!

Как-то пару лет назад с Николаем Цигуро обсуждался такой вопрос, кажется, тогда пришли к выводу, что стандартными средствами никак этого не добиться.

Удачи!
__________________________________
Владимир Якимченко (ICQ: 16993194)

Привет, Всем!

Спасибо

Михаил
Написал: ClaList(2)
Гость

Сообщение Гость »

#TEMPLATE (NewVervion, 'Обновление версий приложений'),FAMILY('CW20')
#PROCEDURE(UpToNew,'Обновление'),WINDOW
#PROTOTYPE('(STRING,STRING,STRING,STRING)')
.......
%Procedure %ProcedureType(STRING1,STRING2,STRING3,STRING4)

и глянь н хелпник '#PROTOTYPE' :-)

Vladimir Degtyarenko <vlad@v-ufal.chel.su> (tues)

Привет, Vladimir!

Точно, самое оно, спасибо.

Михаил

Hi,

Мы наверно что-то другое обсуждали. А с этим имхо проблем нет:

#PROTOTYPE( parameter list )
#PROTOTYPE Assigns the parameter list to the Prototype entry field.

parameter list A string constant containing the procedure's prototype parameter list (the entire procedure prototype without the leading procedure name) for the application's MAP structure (see the discussion of Procedure Prototypes in the Language Reference)

WBR, Nick Tsigouro. MailTo:Nick@arsis.ru

Спасибо

Михаил

Привет, Всем!

Вот уж точно, не за что :)

Пардон, посмотрите в еще сторону #PROTOTYPE, а что же мы тогда обсуждали? :) Возможность динамически изменять этот прототип? Склероз ...

Удачи!

Vladimir Yakimchenko <V.Yakimchenko@vaz.ru>
Написал: ClaList(2)
Гость

Сообщение Гость »

Я поигрался вот так, и у меня работает (C5.5 ABC):

Открыть TemlateRegistry, Выбрать ABC Procedures Source(там все уже есть, что надо) наступить на Edit Definition

Добавить между шаблонами строчки:

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

#PROCEDURE(MYproc,'MYproc'),HLP('~TPLProcSource')#! Source procedure
#Boxed
#DISPLAY('Параметры должны быть (String,String),String') !Это для примера
#Endboxed
#set(%Parameters,'(x1,x2)')
%[20]Procedure PROCEDURE%Parameters
#INSERT(%FileControlInitialize)
#AT(%CustomGlobalDeclarations)
  #INSERT(%FileControlSetFlags)
#ENDAT
#FOR(%LocalData)
%[20]LocalData %LocalDataStatement
#ENDFOR
#AT(%DataSection)
x3  string(20)
#endat
#EMBED(%DataSection,'Data Section'),DATA,TREE('Local Data{{PRIORITY(1000)}')          #! Embedded Source Code
  CODE
#EMBED(%ProcessedCode,'Processed Code'),LABEL     #! Embedded Source Code
    message('Its Code')
    x3=x1&x2
    return(x3)
#INSERT(%LocalMapCheck)
В Аппликации
Создать ToDo у меня это item15
можно c Именем своей стандартной процедуры MyProc
Вызвать окно свойств, выбрать из списка Шаблонов MyProc
Описать прототипы согласно своей процедуры.(String,String),String

После генерации получим код

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

 MEMBER('fl.clw')                                  ! This is a MEMBER module

                     MAP
                       INCLUDE('FL015.INC'),ONCE        !Local module procedure declarations
                     END

item15               PROCEDURE(x1,x2)

x3  string(20)
  CODE
    message('Its Code')
    x3=x1&x2
    return(x3)
Дальше было лень. Не знаю, попал ли я ответом в вопрос.
Если вставлять в GlobalMap описание, то ругается.
Доделаете, получится - киньте ответ. Сегодня нет нужды, а завтра может понадобится.
Правда, смысла так делать большого не вижу. Поменяли шаблоны и привет. Лучше уж внешний файл CLW и его инклюд в нужное место. Или свои библиотеки лепить.
--
Best regards,
gorky mailto:gorky@sv3.net.ua
Написал: ClaList(2)
Гость

Сообщение Гость »

Привет, gorky!

Как раз хотелось избежать вписывать прототип процедуры кривыми ручками, поэтому #PROTOTYPE вполне подошёл. Жаль только, что у него нулевая гибкость (ни дописать параметры, ни задать возврат функции).
Кстати,
Правда, смысла так делать большого не вижу. Поменяли шаблоны и привет.
Лучше уж внешний
файл CLW и его инклюд в нужное место. Или свои библиотеки лепить.
зачем это впихивать в стандартный шаблон? Советую Вам делать так:
1) Создать файл Gorky.tpl
2) Добавить в него строчку
#TEMPLATE(GorkyTemplate,'Шаблоны Горького')
3) Зарегистрировать его в Template Registry
4 и далее) Добавлять в него строки типа
#include('gorkyqtb.tpw')
#include('gorkyemail.tpw')
по мере написания своих шаблонов (каждый шаблон оформлять одним файлом).
Тогда зависимость от изменения стандартных шаблонов исчезнет (хотя для С55 это неактуально)

С уважением, Михаил
Написал: ClaList(2)
Ответить