Вверх ↑
Этот топик читают: Гость
Ответов: 95
Рейтинг: 4
#1: 2022-05-21 18:47:45 ЛС | профиль | цитата
Простой, но крайне полезный компонент - Wrap. (мой второй "более-менее", кстати )
Допустим что у нас число X = 10, минимум = 5, а максимум = 20.
Если X = 19, результатом будет X (19), но стоит только этому число стать 20, и результат становиться минимумом (5).
Работает и с отрицательными числами.
карма: 0

0
файлы: 1Wrap.zip [1.1KB] [254]
vip
#1.1контекстная реклама от партнеров
Ответов: 490
Рейтинг: 162
#2: 2022-05-22 11:28:44 ЛС | профиль | цитата
TheRenat, пример- пошагайте вправо до 20. у меня ошибка.
пример

Add(MainForm,2953706,336,98)
{
Width=352
Height=173
}
Add(Wrap,10884212,336,154)
{
Num=10
Max=20
link(onWrap,2022792:doText,[])
link(Num,763607:Position,[(342,142)(304,142)(304,198)(223,198)])
}
Add(ScrollBar,763607,217,154)
{
Left=40
Top=55
Min=-100
link(onPosition,14730448:doEvent1,[])
}
Add(Edit,2022792,427,154)
{
Left=200
Top=50
Width=90
}
Add(Hub,14730448,273,154)
{
link(onEvent1,10884212:doWrap,[])
link(onEvent2,2953706:doCaption,[(294,167)(294,104)])
}



Редактировалось 1 раз(а), последний 2022-05-22 11:29:32
карма: 4

0
Ответов: 95
Рейтинг: 4
#3: 2022-05-22 13:58:19 ЛС | профиль | цитата
tig-rrr, попробуйте так:

Add(MainForm,2953706,336,98)
{
Width=352
Height=173
}
Add(Wrap,10884212,336,154)
{
Max=20
link(onWrap,2022792:doText,[])
}
Add(ScrollBar,763607,217,154)
{
Left=40
Top=55
Min=-100
link(onPosition,14730448:doEvent1,[])
}
Add(Edit,2022792,427,154)
{
Left=200
Top=50
Width=90
}
Add(Hub,14730448,273,154)
{
link(onEvent1,10884212:doWrap,[])
link(onEvent2,2953706:doCaption,[(294,167)(294,104)])
}

карма: 0

0
Ответов: 8890
Рейтинг: 823
#4: 2022-05-22 14:39:44 ЛС | профиль | цитата
tig-rrr, или так:
или


Add(MainForm,2953706,231,105)
{
}
Add(MathParse,15138413,350,154)
{
DataCount=3
MathStr="(%1>%3)*%2 + (%1<%2)*%3 + (%1>=%2)*(%1<=%3)*%1"
link(onResult,5415273:doText,[])
link(X1,13905297:Text,[(356,145)(300,145)])
link(X2,12538549:Text,[])
link(X3,5688049:Text,[(370,145)(405,145)])
}
Add(Edit,12538549,357,105)
{
Left=75
Top=30
Text="-5"
}
Add(Edit,5688049,399,105)
{
Left=145
Top=30
Text="10"
}
Add(Label,7770691,378,70)
{
Left=90
Top=5
Width=95
Caption="Min Max"
AutoSize=1
}
Add(Edit,13905297,294,105)
{
Left=75
Top=60
Text="7.35"
ClearAfterEnter=1
link(onEnter,14210204:doWork1,[(340,118)])
}
Add(Label,5415273,399,154)
{
Left=135
Top=65
}
Add(Button,396249,294,154)
{
Left=15
Top=60
link(onClick,14210204:doWork2,[])
}
Add(HubEx,14210204,336,154)
{
link(onEvent,15138413:doCalc,[])
}

карма: 19

0
Ответов: 703
Рейтинг: 147
#5: 2022-05-22 15:07:51 ЛС | профиль | цитата
Или .... :
Add(Between,14457797,259,147)
{
Left=Integer(-20)
Right=Integer(20)
link(Left,14922076:Var2,[])
link(Right,2808256:Var1,[(279,103)])
link(onFalse,14487977:doCalcDelta,[(298,153)(298,125)])
link(onTrue,13486023:doWork2,[])
}
Add(SampleDelta,14487977,322,119)
{
link(onCalcDelta,3010990:doCompare,[])
}
Add(MainForm,9435241,119,77)
{
Height=176
}
Add(Edit,12538549,266,63)
{
Left=75
Top=30
Text="-5"
}
Add(Edit,5688049,308,63)
{
Left=145
Top=30
Text="10"
}
Add(Label,7770691,203,63)
{
Left=90
Top=5
Width=95
Caption="Min Max"
AutoSize=1
}
Add(Label,5415273,567,154)
{
Left=135
Top=65
}
Add(ScrollBar,502332,196,147)
{
Left=10
Top=100
Width=355
Max=30
Min=-20
Page=1
link(onPosition,14457797:doBetween,[])
}
Add(If_else,3010990,378,119)
{
Type=2
Op2=Integer(0)
link(onTrue,5761814:doData,[])
link(onFalse,16144298:doData,[])
}
Add(DoData,16144298,434,126)
{
link(onEventData,13486023:doWork1,[(487,132)])
link(Data,2808256:Var3,[(440,103)])
}
Add(DoData,5761814,497,119)
{
link(onEventData,3756322:doWork1,[(543,125)])
link(Data,14922076:Var3,[(503,110)])
}
Add(HubEx,13486023,483,154)
{
link(onEvent,3756322:doWork2,[])
}
Add(HubEx,3756322,539,154)
{
link(onEvent,5415273:doText,[])
}
Add(GetDataEx,14922076,266,105)
{
link(Data,12538549:Text,[])
}
Add(GetDataEx,2808256,308,98)
{
link(Data,5688049:Text,[])
}


Редактировалось 1 раз(а), последний 2022-05-22 15:29:08
карма: 15

0
Ответов: 95
Рейтинг: 4
#6: 2022-05-22 17:23:18 ЛС | профиль | цитата
Леонид, Gunta, учитывая что скорость программ сделанных в пакете Delphi зависит от количество компонентов, мой вариант всё-же лучше
карма: 0

0
Ответов: 490
Рейтинг: 162
#7: 2022-05-22 19:13:57 ЛС | профиль | цитата
TheRenat писал(а):
попробуйте так:
так не те условия... , для проверки условия 10-0-20
карма: 4

0
Ответов: 2203
Рейтинг: 675
#8: 2022-05-22 19:33:02 ЛС | профиль | цитата
TheRenat, tig-rrr прав ошибка есть. В элементе нет защиты деления на 0. Вот пример tig-rrr и вылетает с ошибкой.
В примере tig-rrr данные в Num и Min передаются одинаковые. Так как Min не задано и равно по умолчанию нулю то данные берутся из потока. Как только данные Min будут равны данным Max происходит деление на ноль. Проверить ошибку очень легко такой схемой:
Add(MainForm,2953706,280,210)
{
Position=1
}
Add(Wrap,10884212,322,259)
{
Min=10
Max=10
link(onWrap,2022792:doText,[])
}
Add(Edit,2022792,364,259)
{
Left=180
Top=100
Width=90
}
Add(Button,414738,280,259)
{
Left=95
Top=100
link(onClick,10884212:doWrap,[])
}

TheRenat писал(а):
попробуйте так:

В этой схеме данные из потока подаются в Num (так как по умолчанию 0), а не в Min как в примере tig-rrr. Что не приводит к изменению Min, равенству его с Max и делению на ноль.
TheRenat, нужно делать защиту от деления на 0.

Редактировалось 4 раз(а), последний 2022-05-22 21:29:30
карма: 11

0
Ответов: 95
Рейтинг: 4
#9: 2022-05-23 12:26:05 ЛС | профиль | цитата
Вообщем, вот версия 1.4. С исправлениями ошибок, ведь как-же без них
карма: 0

0
файлы: 1Wrap1.4.zip [1.1KB] [255]
Ответов: 2203
Рейтинг: 675
#10: 2022-05-23 12:55:53 ЛС | профиль | цитата
TheRenat, можно не использовать переменную r, есть же Res. Сразу заносить данные в Res.
  Res := (((x - mi) mod (ma - mi)) + (ma - mi)) mod (ma - mi) + mi;
_hi_CreateEvent(_Data,@_event_onWrap,Res);

Редактировалось 2 раз(а), последний 2022-05-23 12:56:15
карма: 11

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