Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 4698
Рейтинг: 426
#1: 2011-04-12 21:02:49 ЛС | профиль | цитата
Пара компонентов:
Function - создает новую функцию.
CallFunction - вызывает созданную функцию.
Элементы аналогичны элементам из пакета WEB, за тем исключением, что эти построены на Менеджерах (с версии 1.1 менеджеры не используются)
[burl=/getfile/23359]Скачать последнюю версию[/burl] (в архиве имеется пример вычисления факториала)
Скачать версию 1.1 (в архиве имеется пример использования)
Скачать версию 1.0 (в архиве имеется пример использования)
Установить компонент
карма: 10
11
файлы: 3function.rar [3KB] [341], function1.1.rar [3.6KB] [358], function1.2.rar [4.8KB] [370]
Голосовали:hitman249, foksov, Roma, sla8a, vovs, MAV, Konst, Ivann, sаmakacd, login, CriDos
Ответов: 1528
Рейтинг: 57
#2: 2011-04-12 21:17:04 ЛС | профиль | цитата
Assasin, а если из разных контейнеров?
карма: 0

0
Ответов: 8926
Рейтинг: 823
#3: 2011-04-12 23:02:25 ЛС | профиль | цитата
hitman249, а проверить
Assasin, молодец!
карма: 19

0
Ответов: 1528
Рейтинг: 57
#4: 2011-04-12 23:21:57 ЛС | профиль | цитата
Леонид, да уже проверил
карма: 0

0
Гость
Ответов: 17029
Рейтинг: 0
#5: 2011-04-12 23:32:51 правка | ЛС | профиль | цитата


Редактировалось 5 раз(а), последний 2021-06-22 15:03:21
карма: 0

0
Ответов: 1304
Рейтинг: 405
#6: 2011-04-13 02:04:49 ЛС | профиль | цитата
Assasin, куда бы ещё её спрятать?
карма: 3

0
Ответов: 8926
Рейтинг: 823
#7: 2011-04-13 10:19:27 ЛС | профиль | цитата
MAV, в другую программу (можно в *.dll)
карма: 19

0
Разработчик
Ответов: 4698
Рейтинг: 426
#8: 2011-04-13 15:24:31 ЛС | профиль | цитата
MAV писал(а):
Assasin, куда бы ещё её спрятать?

Что значит спрятать?
hitman249 писал(а):
Assasin, а если из разных контейнеров?

Этого, к сожалению, не позволяет технология менеджеров, можно перейти, конечно, на аналог GlobalVar, но нужно ли?
Есть, кстати, у одного из компонентов один баг, никто не заметил? Ооо, только что понял, даже 2 бага!
карма: 10
0
Ответов: 1304
Рейтинг: 405
#9: 2011-04-13 15:57:41 ЛС | профиль | цитата
Что значит спрятать?

Схему функции убрать с рабочего поля, т.е. спрятать в контейнер в DLL и т.д.

------------ Дoбавленo в 15.57:
Есть, кстати, у одного из компонентов один баг, никто не заметил? Ооо, только что понял, даже 2 бага!

Assasin, ты хочешь чтоб люди мозги сломали
карма: 3

0
Разработчик
Ответов: 4698
Рейтинг: 426
#10: 2011-04-13 16:01:13 ЛС | профиль | цитата
MAV писал(а):
Схему функции убрать с рабочего поля, т.е. спрятать в контейнер в DLL и т.д.

Решение только одно: сделать как в GlobalVar, вот только не знаю, работают ли глобальные переменные из программы в DLL и наоборот.
MAV писал(а):
Assasin, ты хочешь чтоб люди мозги сломали

Хочу!
Подсказка
Рекурсия
карма: 10
0
Ответов: 1304
Рейтинг: 405
#11: 2011-04-13 16:34:31 ЛС | профиль | цитата
Assasin, а что не так, усё работает


Add(MainForm,2953706,182,119)
{
Width=201
Height=73
Caption="FunctionTest"
Position=1
}
Add(CallFunction,202075,336,203)
{
FunctionName="func"
link(onResult,9000261:doMessage,[])
}
Add(Function,13302521,273,126)
{
Name="func"
link(onCall,9131045:doOperation,[])
}
Add(Button,2473677,287,203)
{
Left=5
Top=10
Caption="Sum"
link(onClick,202075:doCall,[])
}
Add(Message,9000261,385,203)
{
}
Add(Math,9131045,336,126)
{
Op2=1
link(onResult,6797729:doCompare,[])
link(Op1,9131045:Result,[(342,114)(330,114)(330,170)(342,170)])
}
Add(CallFunction,5458453,448,133)
{
FunctionName="func"
}
Add(If_else,6797729,392,126)
{
Op2=Integer(10)
link(onTrue,13302521:doResult,[(436,132)(436,109)(262,109)(262,132)])
link(onFalse,5458453:doCall,[])
}

карма: 3

0
Разработчик
Ответов: 4698
Рейтинг: 426
#12: 2011-04-14 20:42:12 ЛС | профиль | цитата
MAV писал(а):
Assasin, а что не так, усё работает

Гыгы, и работает неправильно! По идее у тебя результат возвращает только вызов самой последней функции, а все функции, в которых счетчик <> 10 вообще ничего не возвращают, итого, вывод главного вызова "10" - неверен.
Вот так выглядит код на дельфи той функции, что ты предоставил:
#pas
var c:integer;

function Sum(a,b:real):real;
begin
c := c + 1; // inc(c);
if c <> 10 then Sum(0,0)
else Result := 10;
end;
На эту функцию компиль тебе выдаст варринг о том, что возвращаемое значение может быть неопределенно
------------ Дoбавленo в 17.01:
То же касается передачи параметров функции, после вложенного вызова функции, текущая функция теряет доступ к переданным ей параметрам
------------ Дoбавленo в 16.03:
Переделал функции. Теперь они глобальные и могут использоваться в любом месте. А так же поправлены вышеобозначенные баги. Ссылка в первом посте
------------ Дoбавленo в 20.42:
Версия 1.2 (пожалуй, последняя):
1. Исправлен баг с утечкой памяти при использовании МТ-потоков в параметрах вызова функции.
2. Добавлены новые 32-битные иконки.
3. Ссылка в первом посте
карма: 10
0
Ответов: 1304
Рейтинг: 405
#13: 2011-04-18 01:58:33 ЛС | профиль | цитата
То же касается передачи параметров функции, после вложенного вызова функции, текущая функция теряет доступ к переданным ей параметрам

А так же поправлены вышеобозначенные баги

Assasin, посмори на пример вычисления n-го числа Фибоначчи, можно решить исходя из принципа действия алгоритма, но хотелось бы как в исходнике.
code_23395.txt


карма: 3

0
файлы: 1code_23395.txt [6.7KB] [418]
Разработчик
Ответов: 4698
Рейтинг: 426
#14: 2011-04-18 13:55:38 ЛС | профиль | цитата
MAV, такое невозможно, так как событие функции не создает (да и не может) копии компонентов, методы которых она вызывает. Можно решить это, если переделать компонент-функцию как отдельный динамический контейнер (как в варианте с TCP_ServerEx)
карма: 10
0
Ответов: 1304
Рейтинг: 405
#15: 2011-04-18 14:27:03 ЛС | профиль | цитата
Можно решить это, если переделать компонент-функцию как отдельный динамический контейнер (как в варианте с TCP_ServerEx)

Assasin, к сожалению для меня это тёмный лес , могу только сказать что стоит ли так заморачиваться на рекурсии, будет ли данная возможность востребована?, рекурсивные методы требуют высокого быстродействия что не достижимо в рамках элемента Function.
карма: 3

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