Вверх ↑
Этот топик читают: Гость
Ответов: 1173
Рейтинг: 49
#1: 2012-09-17 18:28:47 ЛС | профиль | цитата
Всем доброго времени суток!
Возник вопрос: предположим, у нас есть программа, которая должна пипикать при вводе правильного значения и выставленном значении Bip = 1, но молчать при вводе неправильного или значении Bip = 0. Предположим, что ввод значения происходит очень часто, чаще, чем раз в секунду. Самое очевидное решение -- сунуть IfElse или Case, но нельзя ли это сделать по-другому, чтобы проверки на "пипикабельность" при каждом вводе вообще не было. То есть, чтобы было 2 ветки событий, и при запуске выбиралась нужная?
Вот гипотетическая программа, если вы не поняли из моего описания:
code_29081.txt (UTF-8)
Кстати, а что это за пунктик в меню создании темы "следить за ответами по e-mail", он тут давно или недавно впилили?
карма: 0

0
файлы: 1code_29081.txt [1.2KB] [106]
Ответов: 1841
Рейтинг: 369
#2: 2012-09-17 18:35:33 ЛС | профиль | цитата
Ex_, так что-ли?
code_29092.txt
карма: 1
0
файлы: 1code_29092.txt [1.1KB] [123]
Ответов: 1173
Рейтинг: 49
#3: 2012-09-17 18:39:55 ЛС | профиль | цитата
CriDos, нет, не так. Необходимо именно избавиться от проверки значения при каждом вводе. А у вас просто заменён компонент.
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#4: 2012-09-17 18:48:41 ЛС | профиль | цитата
Ex_ писал(а):
при запуске выбиралась нужная
Application
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 1173
Рейтинг: 49
#5: 2012-09-17 18:57:36 ЛС | профиль | цитата
Я, видимо, совсем не умею объяснять. Может, так будет понятнее:
Мне нужно убрать проверку в начало, избавиться от проверки при каждом вводе. То есть выбрать ветку только один раз, перед вводами.
карма: 0

0
Гость
Ответов: 17029
Рейтинг: 0
#6: 2012-09-17 18:59:35 правка | ЛС | профиль | цитата


Редактировалось 1 раз(а), последний 2017-03-04 22:57:31
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#7: 2012-09-17 19:06:14 ЛС | профиль | цитата
Ex_, тогда Registry
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 1173
Рейтинг: 49
#8: 2012-09-17 19:23:22 ЛС | профиль | цитата
Tad писал(а):
тогда Registry
Ничего не поменяется.
г. ость писал(а):
Так?
Тоже самое
Нужно вообще убрать проверку после ввода, она должна быть только при старте. У меня появилась одна идея , подскажите, нельзя ли где достать полиморфные контейнеры, как полиморфная панель, но без визуала, только контейнер?
------------ Дoбавленo в 19.22:
Вот как с панелями получилось:
Add(MainForm,5410808,70,105)
{
link(onCreate,9158934:doWork2,[])
}
Add(Random,16135362,182,119)
{
link(onRandom,10652675:doText,[])
}
Add(CheckBox,12286048,182,210)
{
Left=10
Top=10
Width=65
Caption="Bip if true"
}
Add(Edit,783691,133,154)
{
Left=10
Top=30
Text=""
link(onEnter,6372842:doCompare,[])
}
Add(Label,10652675,231,119)
{
Left=65
Top=35
Width=10
Height=17
Caption="0"
}
Add(If_else,6372842,182,161)
{
link(onTrue,11232787:do,[(348,167)(348,265)])
link(onFalse,8472077:In,[])
link(Op1,16135362:Random,[])
}
Add(DoData,2018514,182,266)
{
link(onEventData,129309:doEvent1,[])
link(Data,12286048:Checked,[])
}
Add(Case,11009229,259,266)
{
Value=Integer(1)
link(onNextCase,1619080:doData,[])
link(onTrue,12667746:doData,[(299,279)(299,314)])
}
Add(Hub,12970639,455,259)
{
InCount=2
OutCount=1
link(onEvent1,9158934:doWork1,[(481,265)(481,110)(137,110)])
}
Add(LineBreak,7424902,392,301)
{
link(Out,12970639:doEvent2,[(438,307)(438,272)])
Primary=[8472077,-161,-133]
}
Add(HubEx,9158934,133,119)
{
link(onEvent,16135362:doRandom,[])
}
Add(ChildPanelPoly,11232787,392,259)
{
Childrens=#3:bip|6:silent|
Selected="bip"
link(on,12970639:doEvent1,[])
}
BEGIN_SDK
Add(EditPolyMulti,10071169,21,21)
{
WorkCount=#2:do|5:##add|8:##select|7:##clear|
EventCount=#2:on|
Point(##add)
Point(##select)
Point(##clear)
}
Add(Panel,4453739,35,105)
{
Left=35
Top=105
Visible=1
}
END_SDK
BEGIN_SDK
Add(EditPolyMulti,3072874,21,21)
{
WorkCount=#2:do|5:##add|8:##select|7:##clear|
EventCount=#2:on|
Point(##add)
Point(##select)
Point(##clear)
link(do,3532036:doBeep,[(28,27)(28,76)])
}
Add(Panel,6282821,35,105)
{
Left=35
Top=105
Visible=1
}
Add(Beep,3532036,35,70)
{
Duration=100
link(onBeep,3072874:on,[(194,76)(194,27)])
}
END_SDK
BEGIN_SDK
Add(EditPolyMulti,1003985,21,21)
{
WorkCount=#2:do|5:##add|8:##select|7:##clear|
EventCount=#2:on|
Point(##add)
Point(##select)
Point(##clear)
link(do,1568711:doData,[(28,27)(28,76)])
}
Add(Panel,1598945,35,105)
{
Left=35
Top=105
Visible=1
}
Add(DoData,1568711,35,70)
{
link(onEventData,1003985:on,[(194,76)(194,27)])
}
END_SDK
Add(Button,6567380,98,259)
{
Left=85
Top=10
Caption="Check"
link(onClick,15328868:doEvent1,[])
}
Add(DoData,1619080,308,266)
{
Data=String(silent)
link(onEventData,16478556:doWork2,[])
}
Add(DoData,12667746,308,308)
{
Data=String(bip)
link(onEventData,16478556:doWork3,[(354,314)])
}
Add(Hub,129309,231,266)
{
link(onEvent1,11009229:doCase,[])
link(onEvent2,14802449:doData,[(253,279)(253,356)])
}
Add(DoData,14802449,308,350)
{
Data=Integer(0)
link(onEventData,11232787:##select,[(366,356)(366,279)])
}
Add(HubEx,16478556,350,266)
{
link(onEvent,11232787:##add,[])
}
Add(Hub,15328868,147,259)
{
link(onEvent1,16213619:In,[(173,265)(173,251)(86,251)(86,237)])
link(onEvent2,2018514:doData,[])
}
Add(LineBreak,10651954,308,392)
{
link(Out,11232787:##clear,[(375,398)(375,286)])
Primary=[16213619,-210,-161]
}
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#9: 2012-09-17 19:26:29 ЛС | профиль | цитата
Ex_ писал(а):
Кстати, а что это за пунктик в меню создании темы "следить за ответами по e-mail",
Тебе он не светит - у тебя в профиле нет E_Mail
Ex_ писал(а):
Ничего не поменяется.
На бумажке алгоритм нарисовать не пробовал ? Помогает.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 1536
Рейтинг: 176
#10: 2012-09-17 22:24:29 ЛС | профиль | цитата
Ex_ писал(а):
Предположим, что ввод значения происходит очень часто, чаще, чем раз в секунду.
Ex_ писал(а):
нельзя ли это сделать по-другому, чтобы проверки на "пипикабельность" при каждом вводе вообще не было.

Я так понимаю, если обращения чаще секунды, то обрезаем ввод.
Add(LED,557537,798,182)
{
Left=75
Top=80
Width=870
Shape=1
ColorOff=0
link(onChange,15951164:doTimer,[(844,188)(844,143)(730,143)(730,167)])
}
Add(Timer,9716569,308,189)
{
Interval=25
Point(doInterval)
link(onTimer,16169805:doNext,[])
}
Add(TimeCounter,9251593,497,189)
{
link(onStop,7353499:doOperation,[])
}
Add(CounterEx,16169805,357,189)
{
Max=1
link(onNext,680704:doEvent1,[])
}
Add(IndexToChanel,9614757,441,189)
{
link(onEvent1,9251593:doStart,[])
link(onEvent2,9251593:doStop,[])
}
Add(If_else,10581621,630,196)
{
Type=2
Op2=Integer(1000)
link(onTrue,557537:doOn,[])
AddHint(-11,-34,39,13,Op2)
}
Add(Hub,2476571,595,196)
{
link(onEvent1,10581621:doCompare,[])
link(onEvent2,5448973:doText,[(619,209)(619,251)])
}
Add(Label,5448973,630,245)
{
Left=20
Top=85
}
Add(Timer,15951164,742,161)
{
Interval=200
Enable=1
AutoStop=1
link(onTimer,557537:doOff,[(783,167)(783,195)])
}
Add(Label,1478318,259,245)
{
Left=60
Top=15
}
Add(Hub,12432718,217,203)
{
link(onEvent1,11384923:doOperation,[])
link(onEvent2,1478318:doText,[(245,216)(245,251)])
}
Add(InfoTip,970367,147,119)
{
Info=#50:Частота обращений. Если чаще секунды, то молчание.|
Font=[MS Sans Serif,14,0,0,1]
Width=547
Height=200
}
Add(Label,12016720,441,245)
{
Left=20
Top=15
Width=30
}
Add(Hub,680704,406,189)
{
link(onEvent1,9614757:doEvent,[])
link(onEvent2,12016720:doText,[(430,202)(430,251)])
}
Add(ScrollBarEx,238244,168,203)
{
Left=15
Top=45
Width=935
Max=2000
Min=50
Position=50
ScrollMode=1
link(onPosition,12432718:doEvent1,[])
}
Add(Math,11384923,259,203)
{
OpType=3
Op2=2
ResultType=0
link(onResult,9716569:doInterval,[])
}
Add(Math,7353499,546,196)
{
OpType=2
Op2=2
ResultType=0
link(onResult,2476571:doEvent1,[])
}

карма: 1
Не так страшна ошибка, как опасность её не заметить.

0
Ответов: 1173
Рейтинг: 49
#11: 2012-09-17 22:55:54 ЛС | профиль | цитата
ser_davkin, это уже совсем не та степь, мне не нужно никаких обрезаний
Костыльное решение смотрите в моём посте выше, но хотелось бы это как-то по-красивее сделать, если можно.
карма: 0

1
Голосовали:ser_davkin
Ответов: 1536
Рейтинг: 176
#12: 2012-09-17 23:18:45 ЛС | профиль | цитата
Ex_, убрал лишние 5 компонентов:

Add(MainForm,5410808,196,63)
{
link(onCreate,9158934:doWork2,[])
}
Add(Random,16135362,308,77)
{
link(onRandom,10652675:doText,[])
}
Add(CheckBox,12286048,406,133)
{
Left=10
Top=10
Width=65
Caption="Bip if true"
}
Add(Edit,783691,259,112)
{
Left=10
Top=30
Text=""
link(onEnter,6372842:doCompare,[])
}
Add(Label,10652675,357,77)
{
Left=65
Top=35
Width=10
Height=17
Caption="0"
}
Add(If_else,6372842,308,119)
{
link(onTrue,11232787:do,[(474,125)(474,223)])
link(onFalse,8472077:In,[])
link(Op1,16135362:Random,[])
}
Add(Hub,12970639,595,217)
{
InCount=2
OutCount=1
link(onEvent1,9158934:doWork1,[(628,223)(628,66)(263,66)])
}
Add(LineBreak,3069939,553,224)
{
link(Out,12970639:doEvent2,[])
Primary=[8472077,-196,-98]
}
Add(HubEx,9158934,259,77)
{
link(onEvent,16135362:doRandom,[])
}
Add(ChildPanelPoly,11232787,511,217)
{
Childrens=#3:bip|6:silent|
Selected="bip"
link(on,12970639:doEvent1,[])
}
BEGIN_SDK
Add(EditPolyMulti,10071169,21,21)
{
WorkCount=#2:do|5:##add|8:##select|7:##clear|
EventCount=#2:on|
Point(##add)
Point(##select)
Point(##clear)
}
Add(Panel,4453739,35,105)
{
Left=35
Top=105
Visible=1
}
END_SDK
BEGIN_SDK
Add(EditPolyMulti,3072874,21,21)
{
WorkCount=#2:do|5:##add|8:##select|7:##clear|
EventCount=#2:on|
Point(##add)
Point(##select)
Point(##clear)
link(do,3532036:doBeep,[(39,27)(39,62)])
}
Add(Panel,6282821,35,105)
{
Left=35
Top=105
Visible=1
}
Add(Beep,3532036,56,56)
{
Duration=100
link(onBeep,3072874:on,[(204,62)(204,27)])
}
END_SDK
BEGIN_SDK
Add(EditPolyMulti,1003985,21,21)
{
WorkCount=#2:do|5:##add|8:##select|7:##clear|
EventCount=#2:on|
Point(##add)
Point(##select)
Point(##clear)
link(do,1568711:doData,[(28,27)(28,76)])
}
Add(Panel,1598945,35,105)
{
Left=35
Top=105
Visible=1
}
Add(DoData,1568711,35,70)
{
link(onEventData,1003985:on,[(194,76)(194,27)])
}
END_SDK
Add(Button,6567380,273,217)
{
Left=85
Top=10
Caption="Check"
link(onClick,129309:doEvent1,[])
}
Add(Hub,129309,322,217)
{
OutCount=3
link(onEvent1,16213619:In,[(346,223)(346,202)])
link(onEvent2,12353052:doGetString,[])
link(onEvent3,14802449:doData,[])
}
Add(DoData,14802449,441,231)
{
Data=Integer(0)
link(onEventData,11232787:##select,[])
}
Add(LineBreak,7662831,441,273)
{
link(Out,11232787:##clear,[(481,279)(481,244)])
Primary=[16213619,-84,-77]
}
Add(StrList,12353052,392,182)
{
Strings=#6:silent|3:bip|
Point(doGetString)
Point(onGetString)
Point(IdxToSelect)
link(onGetString,11232787:##add,[(439,195)(439,230)])
link(IdxToSelect,12286048:Checked,[])
}

карма: 1
Не так страшна ошибка, как опасность её не заметить.

0
Ответов: 1173
Рейтинг: 49
#13: 2012-09-17 23:52:30 ЛС | профиль | цитата
ser_davkin писал(а):
убрал лишние 5 компонентов:
Это же гипотетическая, а не реальная схема. Ориентация на наглядность, а не на оптимизированность.
Ну, если других вариантов нет, то всем спасибо, беру вариант с панелями.
карма: 0

0
Ответов: 1536
Рейтинг: 176
#14: 2012-09-18 00:02:45 ЛС | профиль | цитата
Ex_, признаться, не смотря на твои разъяснения и рисунки, так ничего не понял. Вот, если бы ты объяснил, где это возможно применить, быть может это прояснило бы что-то.
карма: 1
Не так страшна ошибка, как опасность её не заметить.

0
Разработчик
Ответов: 26160
Рейтинг: 2127
#15: 2012-09-18 00:15:02 ЛС | профиль | цитата
Ex_ писал(а):
нельзя ли где достать полиморфные контейнеры

Привет, а это разве не то -- PolymorphMulti. На основании него же сделана полиморфная панель
карма: 22

1
Голосовали:Ex_
Сообщение
...
Прикрепленные файлы
(файлы не залиты)