оказывается еще нужно изменить и значение Default ,которое(по идее) должно быть в диапвзоне от (Min) до (Max), а не за пределами установленного диапазона.
Просто исправьте метод doMin, если вас это смущает.
Ответов: 131
Рейтинг: 0
|
|||
Tad, на самом деле, элемент работает логично. Max и Min - это пределы, в которых может находиться значение счетчика, и если вы изменяете Min или Max, то это не означает, что должно менятся значение.
оказывается еще нужно изменить и значение Default ,которое(по идее) должно быть в диапвзоне от (Min) до (Max), а не за пределами установленного диапазона.
Просто исправьте метод doMin, если вас это смущает. |
|||
карма: 0 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
"RedBall" писал(а): Tad, на самом деле, элемент работает логично. Max и Min - это пределы, в которых может находиться значение счетчика, и если вы изменяете Min или Max, то это не означает, что должно менятся значение.Просто исправьте метод doMin, если вас это смущает. Выход есть из любого положения, утверждает "Камасутра" !
Если изменить коды в hiCounter.pas [code:1]procedure THICounter._work_doNext; begin if FFirst then begin if _prop_Type = 0 then FCounter := _prop_Min else FCounter := _prop_Max; _prop_Default:=FCounter; FFirst := false; end; if _prop_Type = 0 then begin inc(FCounter,_prop_Step); if FCounter > _prop_Max then FCounter := _prop_Min; end else begin dec(FCounter,_prop_Step); if FCounter < _prop_Min then FCounter := _prop_Max; end; //_hi_OnEvent(_event_onNext,FCounter); _hi_CreateEvent(_Data,@_event_onNext,FCounter); end; [/code:1] и [code:1]procedure THICounter._work_doReset; begin if _prop_Type = 0 then FCounter := _prop_Min else FCounter := _prop_Max; FFirst := True; end;[/code:1] то все встает на свое место. Сейчас попробую выложить измененный hiCounter.pas |
|||
карма: 25 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
В комнату не получилось. Выкладываю сюда. Для того чтобы начало корректно работать необходимо doReset.
[code:1]unit hiCounter; interface uses Kol,Share,Debug; type THICounter = class(TDebug) private FCounter:integer; FFirst:boolean; public _prop_Min:integer; _prop_Max:integer; _prop_Step:integer; _prop_Type:byte; _data_Min:THI_Event; _data_Max:THI_Event; _event_onNext:THI_Event; constructor Create; procedure _work_doNext(var _Data:TData; Index:word); procedure _work_doPrev(var _Data:TData; Index:word); procedure _work_doReset(var _Data:TData; Index:word); procedure _work_doMax(var _Data:TData; Index:word); procedure _work_doMin(var _Data:TData; Index:word); procedure _work_doValue(var _Data:TData; Index:word); procedure _var_Count(var _Data:TData; Index:word); property _prop_Default:integer write FCounter; end; implementation constructor THICounter.Create; begin inherited Create; FFirst := true; end; procedure THICounter._work_doNext; begin if FFirst then begin if _prop_Type = 0 then FCounter := _prop_Min else FCounter := _prop_Max; _prop_Default:=FCounter; FFirst := false; end; if _prop_Type = 0 then begin inc(FCounter,_prop_Step); if FCounter > _prop_Max then FCounter := _prop_Min; end else begin dec(FCounter,_prop_Step); if FCounter < _prop_Min then FCounter := _prop_Max; end; //_hi_OnEvent(_event_onNext,FCounter); _hi_CreateEvent(_Data,@_event_onNext,FCounter); end; procedure THICounter._work_doPrev; var old:byte; begin old := _prop_Type; _prop_Type := integer(not boolean(old)); _work_doNext(_Data,Index); _prop_Type := old; end; procedure THICounter._work_doReset; begin if _prop_Type = 0 then FCounter := _prop_Min else FCounter := _prop_Max; FFirst := True; end; procedure THICounter._work_doValue; begin FCounter := ToInteger(_Data); end; procedure THICounter._work_doMax; begin _prop_Max := ReadInteger(_Data,_data_Max,0); end; procedure THICounter._work_doMin; begin _prop_Min := ReadInteger(_Data,_data_Min,0); end; procedure THICounter._var_Count; begin _Data := _DoData(FCounter); end; end.[/code:1] |
|||
карма: 25 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
А вот так выглядит кусок декодера -установка начального и конечного значений. (работает только с обновленным hiCounter.pas) . Самое обидное, что это почти все есть в старом файле, но только заремано.
[code:1]Add(MainForm,6438777,14,10) { Left=20 Top=105 Caption="DECODER" link(onCreate,14886532:doWork1,[(61,51)(61,55)]) } Add(ChildGroupBox,14886532,77,49) { } BEGIN_SDK Add(EditMulti,5158439,3,3) { EventCount=1 WorkCount=1 Width=363 Height=263 link(doWork1,6745802:doWork1,[(25,9)]) } Add(GroupBox,3465416,301,203) { Top=10 Width=216 Height=105 Font=[MS Sans Serif,8,1,0,1] Caption="INPUT START DATA" } Add(Counter,11377471,182,78) { Max=0 Point(Min) Point(doMin) Point(Max) Point(doMax) link(onNext,9458429:doEvent1,[(226,84)(226,81)]) link(Min,13114523:Text,[(188,59)(104,59)]) link(Max,11100949:Var3,[(195,68)(174,68)(174,182)]) } Add(Label,11499040,301,78) { Left=95 Top=70 Width=90 Height=30 Font=[MS Sans Serif,18,1,255,1] Caption="0" AutoSize=1 Alignment=1 } Add(Edit,13114523,98,15) { Left=90 Top=15 Text="000000" DataType=2 link(onChange,13988537:doEvent1,[(140,21)(140,68)(95,68)(95,95)]) } Add(Button,12225894,35,15) { Left=150 Top=40 Caption="Start" link(onClick,10977330:doTimer,[(77,21)(77,55)(32,55)(32,70)]) } Add(Timer,10977330,42,64) { Interval=100 link(onTimer,11377471:doNext,[(79,70)(79,84)]) } Add(Button,3680936,35,169) { Left=150 Top=15 Caption="Stop" link(onClick,6745802:doWork2,[(77,175)(77,206)(11,206)(11,224)]) } Add(HubEx,6745802,21,211) { link(onEvent,10977330:doStop,[(36,224)(36,77)]) } Add(Hub,13988537,105,89) { InCount=2 link(onEvent1,4504549:doWork2,[]) link(onEvent2,11377471:doMin,[(159,102)(159,105)]) } Add(Label,16467407,147,19) { Left=10 Top=20 Width=80 Height=17 Caption="Input Start Digit " } Add(Label,13196930,140,208) { Left=10 Top=40 Width=74 Height=17 Caption="Input End Digit" } Add(Edit,13355093,98,187) { Left=90 Top=40 Text="000000" DataType=2 link(onChange,2388739:doEvent1,[(140,193)(140,175)(95,175)(95,137)]) } Add(If_else,4641047,217,159) { link(onTrue,6745802:doWork3,[(272,165)(272,254)(25,254)]) link(Op1,11377471:Count,[(223,134)(188,134)]) link(Op2,11100949:Var2,[(230,129)(203,129)(203,202)(146,202)]) } Add(GetDataEx,11100949,133,173) { link(Data,13355093:Text,[(146,167)(88,167)(88,229)(104,229)]) } Add(Hub,9458429,238,75) { OutCount=3 link(onEvent1,11499040:doText,[(285,81)(285,84)]) link(onEvent2,4641047:doCompare,[(280,88)(280,143)(207,143)(207,165)]) link(onEvent3,5158439:onEvent1,[(351,95)(351,9)]) } Add(Hub,2388739,105,131) { link(onEvent1,4504549:doWork3,[(158,137)]) link(onEvent2,11377471:doMax,[(167,144)(167,112)]) } Add(HubEx,4504549,154,82) { link(onEvent,11377471:doReset,[(172,95)(172,98)]) } Add(HubEx,3507237,21,201) { link(onEvent,13988537:doEvent2,[(67,214)(67,102)]) } Add(Label,14943762,301,119) { Left=15 Top=75 Width=66 Height=17 Font=[MS Sans Serif,8,0,16711680,1] Caption="Search Code" } END_SDK [/code:1] |
|||
карма: 25 |
|
Ответов: 131
Рейтинг: 0
|
|||
Tad, я не сказал, а написал
Что касается вашего примера, то это можно реализовать и со старым элементом. Надо только вызывать не doReset, а doValue. А насчет исправления метода doMin, я имел ввиду что-то типа этого: [code:1]procedure THICounter._work_doMin; begin _prop_Min := ReadInteger(_Data,_data_Min,0); if FCounter < _prop_Min then FCounter := _prop_Min; end;[/code:1] |
|||
карма: 0 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Tad, все, мой интеллект кончился.
Хоть убейте не могу связать все эти пляски вокруг Default с вашим примером. Он у меня правильно работает (я не изменял hiCounter.pas за ненадобностью). Вот только выходы Hub-ов поменял местами, и удалил линк от If_else.Op1 Вы уже много говорили за это. Может быть поставите себе в труд, и разъясните еще раз мне, убогому, магическую связь Default с Вашим примером........ |
|||
карма: 9 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
"Galkov" писал(а): Tad, все, мой интеллект кончился. Мой тоже. (If_else - применил чтобы остановить Timer) Вопрос с самого начала (если помните) стоял о нарушении приоритета элементом Counter (между прочим не он один) . Если Default стоит на первом месте, то ... нужно ремонтировать Help Если задано Min и Max то на выходе должно быть число от Min до Max, а не с Default до Max. Может здесь правда?: "RedBall" писал(а): Надо только вызывать не doReset, а doValue. проверю, если правда то виноват, исправлюсь. А если еще на выходе будет первым появляться Min, а не Min+1 то вообще... Пошел проверять |
|||
карма: 25 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Tad, важнейшее сообщение:
вопрос о приоритете возникает когда есть акт выбора. Здесь этого акта просто не было. Если Вам кажется иначе - это плод воспаленного воображения. Как и в случае "не он один", надо полагать. И если в этом "кажется" содержится хоть какая-то логика, то Вы ее еще не изложили. Говоря Вашими словами - пора бы уже. проверю, если правда то виноват, исправлюсь
может еще попробуете Reset делать после doMin, а не до..... Если задано Min и Max то на выходе должно быть число от Min до Max, а не с Default до Max.
Я опять не понимаю сей грамматики. Значение счетчика - это конкретное число, обладающее одним значением, а не диапазоном. И в любой момент времени можно сказать, что оно будет изменяться от значения в настоящий момент до значения Max. И моего интеллекта как раз и не хватает на то, чтобы понять, почему с "с Default до Max" противоречит "от Min до Max". Впрочем, это словоблудие мне уже надоело. Поскольку связи с какой-то гипотетической неработоспособностью Вашего примера - не вижу. 1) В чем неработоспособность 2) Как бедный Default повлиял на эту неработоспособность |
|||
карма: 9 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Robin, а куда оно денется, с подводной лодки-то....
Вот так чуток по-проще, вроде: [code:1]Add(Button,2930927,91,210) { Left=20 Top=5 Width=75 Font=[Arial,8,0,0,1] Caption="Громкость +" Data=Integer(1) link(onClick,10788454:doTimer,[]) } Add(Timer,10788454,140,210) { Interval=100 Enable=1 AutoStop=2 link(onTimer,13310236:doChangeValue,[]) } Add(LED,13310236,189,210) { Left=100 Top=5 Height=20 Shape=1 link(onChange,6687644:doLine1,[]) } Add(LPT,6687644,238,196) { Point(doLine1) }[/code:1] |
|||
карма: 9 |
|
Ответов: 131
Рейтинг: 0
|
|||
сами то поняли, что сказали?
Попробую объяснить на пальцах 1) Min и Max - это границы, в которых у нас гуляет значение счетчика(FCounter) 2) Это значение после загрузки программы становится равным Default (на то он и Default ) 3) FCounter можно установить во время выполнения программы с помощью метода doValue 4) Конечно, в результате выполнения doMax, doMin и doValue это значение может выйти за границы счетчика. Это можно исправить, просто уставновив проверку в соответствующие методы. Тогда у пользователей не будет возникать вопроса, почему счетчик считает с Default, а не с Min |
|||
карма: 0 |
|
Ответов: 9906
Рейтинг: 351
|
|||
RedBall, не факт, что не будет.
От пользователя многое зависит..... |
|||
карма: 9 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
"Galkov" писал(а): RedBall, не факт, что не будет.
От пользователя многое зависит..... Огромное С П А С И Б О !!!!!!!!!!!!!!!!!!!!!!!!! Напомню: О Label мы сприли до тех пор, пока Dilma ее полностью не переделал. "RedBall" писал(а): 1) Min и Max - это границы, в которых у нас гуляет значение счетчика(FCounter)
2) Это значение после загрузки программы становится равным Default (на то он и Default ) Default - в переводе на русский - "По умалчиванию", а в нашем случае Min и Max заданы, т.е. умалчивания нет. Так что правду писАл "Galkov" писал(а): RedBall, не факт, что не будет...... |
|||
карма: 25 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Tad, то чего Вы делаете не называется конструктивной беседой.
И спором тоже. Хоть огромное спасибо, хоть не огромное. Аргументы:
2) Вторая серия закончилась: а) обнаружением некорректности, и не в Label. Но находить эту некорректность и излагать ее Dilma пришлось мне, просеивая из ваших обид на HiAsm здравую содержательную информацию. б) переделывать в KOL реализацию Autosize никто так и не стал. Отгадайте почему. 3) Я задал два конкретных вопроса, без ответа на которые совершенно непонятно о чем идет базар уже 5-ю страничку. Ответа нет 4) Как Вам нравится в-третьих [/list:u] "Tad" писал(а): Default - в переводе на русский - "По умалчиванию", а в нашем случае Min и Max заданы, т.е. умалчивания нет.Ваша логика удивление вызывает. Как-то в России у нас в основном знают как переводится default, и думают, что значения Min и Max не определяют однозначно значения для счетчика. А раз не определяют - значит случай умолчания имеет место быть. Неужели мы так отстали от "цивилизованного" мира, что там уже не так........ |
|||
карма: 9 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Вопрос: Зачем Counter-у Default
"Galkov" писал(а): Он у меня правильно работает (я не изменял hiCounter.pas за ненадобностью).Там есть такое: по окончанию счета от Min до Max (набраных в Edit -ах) щелчком по Label , ее значение заносится в Edit_Min, набирается новое значение в Edit_Max и Start - перебор в новом диапазоне. Этот сервис работает с измененным hiCounter.pas |
|||
карма: 25 |
|
Ответов: 5446
Рейтинг: 323
|
|||
Robin, а свойство "interval" случаем не светло-серого цвета?
(проверить не могу - пишу с общественного компа)? Если да - то щёлкните на этом свойстве (на названии) правой кнопкой, и отметьте в появившемся меню первый (он же и единственный) пункт. Должен появиться метод doInterval. |
|||
карма: 1 |
|