Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 26113
Рейтинг: 2126
#1: 2007-06-25 15:41:59 ЛС | профиль | цитата
Dilma,
я конкретно встрял. Как проверить наличие линка вот таких точек
event("onEvent" + i, data)[/code]

Еще вопрос. Как из события onEvent создать новый метод (те создать для события отдельный блок), и как из скрипта к нему обратиться? А то вложенности получаются немерянные. Если посмотришь на код Message, то можно увидеть, что в case может попасть дальнейший поток, и все это окажется в одном блоке, прилинкованном к одной исходящей точке.
Вот глянь. Как проверить наличие выходных прилинковок
func doEvent(data)
   fvar(i)
i = Index
println('case ', i, ' of')
for(i = 1; i <= _event_count_; i++)
// if (linked("onEvent" + i))
print(i, ': ')
println('begin')
block.inclvl()
event("onEvent" + i, data)
println('end;')
block.declvl()
// end
end
end
С ремарками работает прекрасно. Но case получается столько, сколко назначил, а надо столько, сколько подключено и с теми индексами, которые нужны.

Вот посмотри плнофункциональный компонент Message

[size=-2]------ Добавлено в 15:41 [/size]
Похоже столкнулся с еще одной проблемой -- невозможностью создать компонент ChanelToIndex. Count есть на все точки, кроме work. И вообще, можно ли отследить индекс активного потока, как в D1.
карма: 22

0
файлы: 1Message_D2.zip [1.3KB] [550]
Ответов: 9906
Рейтинг: 351
#2: 2007-06-25 15:46:05 ЛС | профиль | цитата
nesco писал(а):
невозможностью создать компонент ChanelToIndex

Форум читал
Про проблему "левого dpe" и HubEx ничего не слышал, разве
карма: 9

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#3: 2007-06-25 15:49:46 ЛС | профиль | цитата
Galkov писал(а):
Про проблему "левого dpe" и HubEx ничего не слышал, разве

Вот честно, даже особенно не вникал (тут, пока не столкнешься, ничерта не поймешь). А не трудно дать ссылку, я еще раз перечитаю, не могу вспомнить где.
карма: 22

0
Администрация
Ответов: 15295
Рейтинг: 1519
#4: 2007-06-25 16:02:46 ЛС | профиль | цитата
"Компоненты для проекта Delphi-2" - это резервная копия чтоли?

nesco, во-первых, чтобы не терять ни твое ни мое время зря необходимо при сообщениях в этом разделе иметь последнюю скаченную версию с SVN, ка кэто делает коллега Nic.

в частности компонент IndexToChannel и ChannelToIndex там уже несколько дней лежат в готовом виде. Причем ChannelToIndex переносится в пакет Delphi-2 без каких бы то ни было измений вообще.

nesco писал(а):
Как из события onEvent создать новый метод (те создать для события отдельный блок), и как из скрипта к нему обратиться?

не понял вопроса. Нужно уточнить.
карма: 27
0
Разработчик
Ответов: 26113
Рейтинг: 2126
#5: 2007-06-25 16:16:20 ЛС | профиль | цитата
Dilma писал(а):
"Компоненты для проекта Delphi-2" - это резервная копия чтоли?

Удали, если можно. Случайно создалось.
Dilma писал(а):
ChannelToIndex переносится в пакет Delphi-2 без каких бы то ни было измений вообще

Это значит, что индекс передается на точку doWork. Но как его можно перенести без изменений, непонятно.
Хорошо, я обязательно зайду на SVN (жаль только на работе нет). Насколько я понял, надо тянуть пакет WEB и на его основе делать компоненты для D2.
Dilma писал(а):
не понял вопроса. Нужно уточнить

Можно ли вместо создания потока методов, вставляемых в тело другого метода, создать отдельный блок для вставляемых методов, а по событию вызывать обращение к этому блоку?

[size=-2]------ Добавлено в 16:16
Хотел еще спросить. Что делать с компонентом Memory. Он у меня оформляет переменные только трех типов: integer, string и real. Надо ли думать об остальных типах или для этого надо будет делать отдельный компонент.
карма: 22

0
Администрация
Ответов: 15295
Рейтинг: 1519
#6: 2007-06-25 16:27:12 ЛС | профиль | цитата
nesco писал(а):
Насколько я понял, надо тянуть пакет WEB и на его основе делать компоненты для D2

там есть примеры использования всех операторов и ф-ций.

nesco писал(а):
Можно ли вместо создания потока методов, вставляемых в тело другого метода, создать отдельный блок для вставляемых методов, а по событию вызывать обращение к этому блоку?

еще хуже, чем первый вариант. Термины "потока методов" и "вызывать обращение" мне совершенно не знакомы. Даже потоковый накопитель упомянутый недавно коллегой tsdima представить себе проще, чем это... Ощущение такое, что проблема состоит в том, чтобы генерируемый после вызова некоторого события код("Как из события onEvent создать новый метод") попал не в основной блок("те создать для события отдельный блок"), а во временный, и затем использовать его в дальнейшем("и как из скрипта к нему обратиться").

[size=-2]------ Добавлено в 16:27
nesco писал(а):
Надо ли думать об остальных типах или для этого надо будет делать отдельный компонент.

отдельный элемент конечно же.
карма: 27
0
Разработчик
Ответов: 26113
Рейтинг: 2126
#7: 2007-06-25 16:40:45 ЛС | профиль | цитата
Dilma, попробую объяснить проще Есть вот такая конструкция (выборка из компонента Message)
         if (linked(onOK))
            print('IDOK: ')
println('begin')
block.inclvl()
event(onOK)
println('end;')
block.declvl()
end
Если к точке onOk прилинковать чего-нибудь, то оно попадает в case. Вот я и спросил. Можно ли все, что прилинковано к точке onOk сгруппировать в отдельный блок, а в event(точка) создать ссылку на этот блок.
карма: 22

0
Администрация
Ответов: 15295
Рейтинг: 1519
#8: 2007-06-25 16:58:19 ЛС | профиль | цитата
nesco писал(а):
а в event(точка) создать ссылку на этот блок

до этого места все было понятно. Что значит "а в event(точка) создать"? И наконец "ссылку на этот блок" - это как должно физически выглядеть?

PS: для официально поддерживаемых пакетов буду налагать строгий регламент на оформление исходников скрипта и целевого языка. Чтобы потом не было вопросов, почему компонент не попадает в дистрибутив предупреждаю заранее.
карма: 27
0
Разработчик
Ответов: 26113
Рейтинг: 2126
#9: 2007-06-25 17:16:55 ЛС | профиль | цитата
Dilma писал(а):
для официально поддерживаемых

А вроде это пакет не поддерживается, пока. Но если необходимо, то буду выкладывать как надо (только скажи как).
Dilma писал(а):
как должно физически выглядеть

Как обращение к методу. Те в секции BLK_PRIV_MTD должен объявиться метод, который будет содержать то, что должно попасть вместо event(точка). И соответсвенно, вместо всего этого набора данных подставить обращение к методу, содержащему весь этот наш набор данных.
карма: 22

0
Администрация
Ответов: 15295
Рейтинг: 1519
#10: 2007-06-25 17:45:43 ЛС | профиль | цитата
nesco писал(а):
А вроде это пакет не поддерживается, пока

так он и не входит в дистрибутив....

nesco писал(а):
Но если необходимо, то буду выкладывать как надо (только скажи как)

Это вывод из опыта проектирования пакета Delphi-1. И он не единственный между прочим. И вывод этот говорит о том, что исходники написанные разными людьми должны выглядеть одинакого и не зависимо от личных предпочтений их авторов. Как именно оформлять опять таки можно посмотреть на примере пакета WEB. Конкретно по приведенному куску:
         if (linked(onOK)) // {ws}после if должна сразу идти скобка
            print('IDOK: ')
println('begin')
block.inclvl()
event(onOK) // {ws}отступ должен составлять два пробела
println('end;') // {D2} end должен стоять после декремента уровня отступа
block.declvl()
end
ws - замечания по оформлению скрипта
D2 - по оформлению кода

для Delphi так же следует выбрать один из способов размещения операторных скобок
operator begin
//
end;

или
operator
begin
//
end;

или
operator
begin
//
end;

кроме того думаю после введения внешней библиотеки пользовательских ф-ций будет сделан еще один уровень методов для написания скриптов для ЯВУ. Т.е. все простые операторы типа If,Switch,For и т.д. будут представлены методами. Скажем тот же пример:
        if (linked(onOK))
            print('IDOK: ')
lng.begin()
event(onOK)
lng.end()
end
где lng.begin() печатает в код проекта открывающую операторную скобку(begin для Delphi, { для С и ему подобных), а так же делает инкремент уровня.
- все это к тому говорится, чтобы получить общее представление об объеме работ, который предстаит реализовать прежде, чем всерьез заниматься реализацией аналога пакета Delphi-1.
карма: 27
0
Ответов: 2125
Рейтинг: 159
#11: 2007-06-25 17:49:00 ЛС | профиль | цитата
Dilma писал(а):
и ему подобных

А вот в Visual Basic такого нет
карма: 1

0
Администрация
Ответов: 15295
Рейтинг: 1519
#12: 2007-06-25 17:58:05 ЛС | профиль | цитата
спорный вопрос. Просто там lng.end() семантически связан с типом оператора для которого делается lng.begin(). А lng.begin() там делается всегда для любого блокового оператора, кроме строчной записи If Then Else. Грубо говоря, если в коде:
println('if(', value, ')')
lng.begin()
event(...)
lng.end()
мы сумеем сообщить, что lng.begin() открылся для If, то в lng.end() мы чесно сгенерим EndIf. Делов-то.
карма: 27
0
Разработчик
Ответов: 26113
Рейтинг: 2126
#13: 2007-06-25 18:09:38 ЛС | профиль | цитата
Dilma писал(а):
{ws}отступ должен составлять два пробела

А принципиально, если будет три пробела (я привык ставить три)?

[size=-2]------ Добавлено в 18:09
Dilma писал(а):
кроме того думаю после введения внешней библиотеки пользовательских ф-ций будет сделан еще один уровень методов

А для Delphi-2 это будет?
карма: 22

0
Администрация
Ответов: 15295
Рейтинг: 1519
#14: 2007-06-25 18:39:38 ЛС | профиль | цитата
nesco писал(а):
А принципиально, если будет три пробела (я привык ставить три)?

если так ставить вопрос, то в принципиальности всех остальных правил тоже можно усомниться.

nesco писал(а):
А для Delphi-2 это будет?

если кто-нибудь напишет такую библиотеку, то очевидно будет
карма: 27
0
Разработчик
Ответов: 26113
Рейтинг: 2126
#15: 2007-06-25 19:08:23 ЛС | профиль | цитата
Dilma писал(а):
если так ставить вопрос

Если надо -- будем ставить два.
карма: 22

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)