Вверх ↑
Этот топик читают: Гость
Ответов: 1429
Рейтинг: 50
#1: 2011-10-11 13:54:54 ЛС | профиль | цитата
Не понимаю откуда и зачем берется округление в схеме после FTMath:
code_25430.txt
В схеме используется только Integer типы, но в Delphi появляется round:

#pas
procedure TClassFTCG_Tools_9591760.event_doData(var Data:TData; index:word);
begin

res2 := round((1 + 1));
val3 := round(res2);
_hi_onEvent(THIFTCG_Tools(FParent).Events[0], val3);
end;
как убрать эти round? их полно, потом, в коде а они не нужны.
карма: 0

0
файлы: 1code_25430.txt [923B] [76]
Ответов: 4671
Рейтинг: 768
#2: 2011-10-11 16:07:27 ЛС | профиль | цитата
В конфигурации компонента FTMath свойства Op1 и Op2 имеют тип Real (7), а в коде стоят проверки на тип операндов. Соответственно, если результат Integer, то выполняется округление.
------------ Дoбавленo в 16.07:
Попробуй в конфигурации компонента поставь эти свойства типа 3 (Data). Затем в схеме при установке значений свойств поставь Integer.
карма: 26

1
Голосовали:login
Ответов: 1429
Рейтинг: 50
#3: 2011-10-11 16:45:01 ЛС | профиль | цитата
Netspirit, сделал, очень странно, но ничего не поменялось
------------ Дoбавленo в 16.45:

#pas
res2 := (1 + 1);
val3 := round(res2);
_hi_onEvent(THIFTCG_Tools(FParent).Events[0], val3);
Один round всетаки пропал
карма: 0

0
Администрация
Ответов: 15295
Рейтинг: 1519
#4: 2011-10-11 16:53:35 ЛС | профиль | цитата
login, зачем точка Result соединена с точкой Data? Первая имеет тип Real вторая Integer, отсюда и получаем соответствующее преобразование:

val3 := round(res2);
карма: 26
0
Ответов: 1429
Рейтинг: 50
#5: 2011-10-11 16:58:22 ЛС | профиль | цитата
Dilma, точно. Спасибо!
(хотя странно, память-то установлена в integer формат)
карма: 0

0
Ответов: 4671
Рейтинг: 768
#6: 2011-10-11 17:02:21 ЛС | профиль | цитата
login, потому память и преобразовывает из Real в Integer.
карма: 26

0
Ответов: 1429
Рейтинг: 50
#7: 2011-10-11 17:15:12 ЛС | профиль | цитата
Netspirit, почему? если в мат всё только в Integer выставлено?
------------ Дoбавленo в 17.15:
Всё! Понял! Потому, что точка Result была Real формата!
карма: 0

0
Администрация
Ответов: 15295
Рейтинг: 1519
#8: 2011-10-11 17:30:16 ЛС | профиль | цитата
по хорошему конечно нужно делать два элемента Math - для целочисленного и действительно счисления. Тогда таких заморочек не будет.
карма: 26
0
Ответов: 4671
Рейтинг: 768
#9: 2011-10-11 17:38:47 ЛС | профиль | цитата
А почему бы при выдаче на Result не делать приведение в зависимости от ResultType (как на onResult)?
Например, так:

#hws
func Result(_data)
if(linked(doOperation))
if(isdef(ResultType))
return(res)
else
return(e_int(res))
end
else
return(_create(_data))
end
end
карма: 26

0
Ответов: 1429
Рейтинг: 50
#10: 2011-10-11 17:42:46 ЛС | профиль | цитата
Dilma, Я себе сделаю два.
------------ Дoбавленo в 17.42:
Netspirit, подставил Ваш код - работает!
Может можно и точки операндов таким макаром?
карма: 0

0
Ответов: 4671
Рейтинг: 768
#11: 2011-10-11 17:59:37 ЛС | профиль | цитата
login, думаю, не стоит. Так как их реальный тип зависит от компонентов, которые к ним подсоединены. То есть, если к Op1 подключена точка, выдающая тип Integer, то и компонент Math будет работать с Integer.
------------ Дoбавленo в 17.59:
Приведи реальный фрагмент схемы, где это было бы необходимо, посмотрим.
[offtop]Dilma, ну сделай что-то с форумом...[/offtop]
карма: 26

0
Ответов: 1429
Рейтинг: 50
#12: 2011-10-11 18:08:13 ЛС | профиль | цитата
Netspirit, пожалуйста, вот самый часто-встрачающийся, у меня, пример.
Я всегда так прибавляю еденичку к чему-то:

Add(MainForm,8575052,182,126)
{
}
Add(FTCG_Tools,8846021,357,126)
{
link(onData,14659971:doText,[])
}
BEGIN_SDK
Add(EditMultiEx,5272555,21,21)
{
WorkCount=#6:doData|
EventCount=#6:onData|
Width=468
Height=347
link(doData,7306777:doData,[(95,27)(95,181)])
}
Add(FT_DoData,7306777,154,175)
{
Data=Integer(1)
link(onEventData,14142765:doOperation,[])
}
Add(FT_Math,14142765,203,175)
{
Op2=1
ResultType=0
link(onResult,13994969:doValue,[])
}
Add(FT_Memory,13994969,259,175)
{
Default=Integer(0)
link(onData,5272555:onData,[(390,181)(390,27)])
}
END_SDK
Add(Label,14659971,406,126)
{
Left=170
Top=110
}
Add(Button,7151624,301,126)
{
Left=90
Top=105
Width=60
Height=25
link(onClick,8846021:doData,[])
}
Add(StyleXP,2155272,140,126)
{
}


Итог:

#pas
val3 := round((1 + 1));

То-есть теперь мне надо отказаться от переменных на панели, и еденичку подставлять только в дополнительном memo.

карма: 0

0
Ответов: 4671
Рейтинг: 768
#13: 2011-10-11 18:43:33 ЛС | профиль | цитата
А у меня так:

#hws
val3 := (0 + 1);
почему-то...
------------ Дoбавленo в 18.43:
А, нет, все нормально, нужно было убрать 0 из Op1.

#hws
val3 := (1 + 1);
карма: 26

0
Ответов: 1429
Рейтинг: 50
#14: 2011-10-11 18:53:44 ЛС | профиль | цитата
Netspirit, у меня не сохранился первый вариант настроек элемента, но насколько я помню, на всех его свойствах и точках установлен тип Real. Поэтому round((1 + 1))
карма: 0

0
Ответов: 4671
Рейтинг: 768
#15: 2011-10-11 18:57:41 ЛС | профиль | цитата
Главное - то, что я впервые предложил: свойства типа 3. А верхние точки у меня так и остались типа 7. Конкретно в последнем примере FT_DoData выдаёт Integer, поэтому всё работает как надо.
карма: 26

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