Вверх ↑
Этот топик читают: Гость
Ответов: 131
Рейтинг: 0
#46: 2005-07-13 12:04:46 ЛС | профиль | цитата
Tad, на самом деле, элемент работает логично. Max и Min - это пределы, в которых может находиться значение счетчика, и если вы изменяете Min или Max, то это не означает, что должно менятся значение.
оказывается еще нужно изменить и значение Default ,которое(по идее) должно быть в диапвзоне от (Min) до (Max), а не за пределами установленного диапазона.

Просто исправьте метод doMin, если вас это смущает.
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#47: 2005-07-13 13:11:45 ЛС | профиль | цитата
"RedBall" писал(а):
Tad, на самом деле, элемент работает логично. Max и Min - это пределы, в которых может находиться значение счетчика, и если вы изменяете Min или Max, то это не означает, что должно менятся значение.
сами то поняли, что сказали? А для чего тогда эти 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
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 16884
Рейтинг: 1239
#48: 2005-07-13 13:18:01 ЛС | профиль | цитата
В комнату не получилось. Выкладываю сюда. Для того чтобы начало корректно работать необходимо 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
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 16884
Рейтинг: 1239
#49: 2005-07-13 13:29:15 ЛС | профиль | цитата
А вот так выглядит кусок декодера -установка начального и конечного значений. (работает только с обновленным 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
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 131
Рейтинг: 0
#50: 2005-07-13 20:12:59 ЛС | профиль | цитата
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

0
Ответов: 9906
Рейтинг: 351
#51: 2005-07-13 21:42:27 ЛС | профиль | цитата
Tad, все, мой интеллект кончился.

Хоть убейте не могу связать все эти пляски вокруг Default с вашим примером.
Он у меня правильно работает (я не изменял hiCounter.pas за ненадобностью).
Вот только выходы Hub-ов поменял местами, и удалил линк от If_else.Op1

Вы уже много говорили за это. Может быть поставите себе в труд, и разъясните еще раз мне, убогому, магическую связь Default с Вашим примером........
карма: 9

0
Ответов: 16884
Рейтинг: 1239
#52: 2005-07-13 22:46:09 ЛС | профиль | цитата
"Galkov" писал(а):
Tad, все, мой интеллект кончился.

Мой тоже. (If_else - применил чтобы остановить Timer)
Вопрос с самого начала (если помните) стоял о нарушении приоритета элементом Counter (между прочим не он один) . Если Default стоит на первом месте, то ... нужно ремонтировать Help
Если задано Min и Max то на выходе должно быть число от Min до Max, а не с Default до Max.
Может здесь правда?:
"RedBall" писал(а):
Надо только вызывать не doReset, а doValue.

проверю, если правда то виноват, исправлюсь. А если еще на выходе будет первым появляться Min, а не Min+1 то вообще...
Пошел проверять
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 9906
Рейтинг: 351
#53: 2005-07-13 23:56:52 ЛС | профиль | цитата
Tad, важнейшее сообщение:
вопрос о приоритете возникает когда есть акт выбора.

Здесь этого акта просто не было. Если Вам кажется иначе - это плод воспаленного воображения. Как и в случае "не он один", надо полагать.
И если в этом "кажется" содержится хоть какая-то логика, то Вы ее еще не изложили. Говоря Вашими словами - пора бы уже.

проверю, если правда то виноват, исправлюсь

может еще попробуете Reset делать после doMin, а не до.....

Если задано Min и Max то на выходе должно быть число от Min до Max, а не с Default до Max.

Я опять не понимаю сей грамматики. Значение счетчика - это конкретное число, обладающее одним значением, а не диапазоном. И в любой момент времени можно сказать, что оно будет изменяться от значения в настоящий момент до значения Max. И моего интеллекта как раз и не хватает на то, чтобы понять, почему с "с Default до Max" противоречит "от Min до Max".


Впрочем, это словоблудие мне уже надоело. Поскольку связи с какой-то гипотетической неработоспособностью Вашего примера - не вижу.
1) В чем неработоспособность
2) Как бедный Default повлиял на эту неработоспособность
карма: 9

0
Ответов: 9906
Рейтинг: 351
#54: 2005-07-14 00:03:30 ЛС | профиль | цитата
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

0
Ответов: 131
Рейтинг: 0
#55: 2005-07-14 00:10:43 ЛС | профиль | цитата
сами то поняли, что сказали?

Попробую объяснить на пальцах
1) Min и Max - это границы, в которых у нас гуляет значение счетчика(FCounter)
2) Это значение после загрузки программы становится равным Default (на то он и Default )
3) FCounter можно установить во время выполнения программы с помощью метода doValue
4) Конечно, в результате выполнения doMax, doMin и doValue это значение может выйти за границы счетчика. Это можно исправить, просто уставновив проверку в соответствующие методы. Тогда у пользователей не будет возникать вопроса, почему счетчик считает с Default, а не с Min
карма: 0

0
Ответов: 9906
Рейтинг: 351
#56: 2005-07-14 00:13:46 ЛС | профиль | цитата
RedBall, не факт, что не будет.
От пользователя многое зависит.....
карма: 9

0
Ответов: 16884
Рейтинг: 1239
#57: 2005-07-14 01:29:19 ЛС | профиль | цитата
"Galkov" писал(а):
RedBall, не факт, что не будет.
От пользователя многое зависит.....

Огромное С П А С И Б О !!!!!!!!!!!!!!!!!!!!!!!!!
Напомню: О Label мы сприли до тех пор, пока Dilma ее полностью не переделал.
"RedBall" писал(а):
1) Min и Max - это границы, в которых у нас гуляет значение счетчика(FCounter)
2) Это значение после загрузки программы становится равным Default (на то он и Default )

Default - в переводе на русский - "По умалчиванию", а в нашем случае Min и Max заданы, т.е. умалчивания нет.
Так что правду писАл
"Galkov" писал(а):
RedBall, не факт, что не будет......

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 9906
Рейтинг: 351
#58: 2005-07-14 02:14:56 ЛС | профиль | цитата
Tad, то чего Вы делаете не называется конструктивной беседой.
И спором тоже.
Хоть огромное спасибо, хоть не огромное.
Аргументы:
    1) Первая серия "споров" про Label - Вас оскорбляла необходимость увеличить схему на один элемент, чтобы получить строку выбегающую справа. Здесь нет предмета для спора - здесь есть позиция Автора, которую я излагал и в этом топике.

    2) Вторая серия закончилась: а) обнаружением некорректности, и не в Label. Но находить эту некорректность и излагать ее Dilma пришлось мне, просеивая из ваших обид на HiAsm здравую содержательную информацию. б) переделывать в KOL реализацию Autosize никто так и не стал. Отгадайте почему.

    3) Я задал два конкретных вопроса, без ответа на которые совершенно непонятно о чем идет базар уже 5-ю страничку. Ответа нет

    4) Как Вам нравится в-третьих [/list:u]



    "Tad" писал(а):
    Default - в переводе на русский - "По умалчиванию", а в нашем случае Min и Max заданы, т.е. умалчивания нет.

    Ваша логика удивление вызывает. Как-то в России у нас в основном знают как переводится default, и думают, что значения Min и Max не определяют однозначно значения для счетчика. А раз не определяют - значит случай умолчания имеет место быть.
    Неужели мы так отстали от "цивилизованного" мира, что там уже не так........
карма: 9

0
Ответов: 16884
Рейтинг: 1239
#59: 2005-07-14 09:49:00 ЛС | профиль | цитата
Вопрос: Зачем Counter-у Default
"Galkov" писал(а):
Он у меня правильно работает (я не изменял hiCounter.pas за ненадобностью).
Это о моем примере.
Там есть такое: по окончанию счета от Min до Max (набраных в Edit -ах) щелчком по Label , ее значение заносится в Edit_Min, набирается новое значение в Edit_Max и Start - перебор в новом диапазоне. Этот сервис работает с измененным hiCounter.pas
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 5446
Рейтинг: 323
#60: 2005-07-14 13:10:04 ЛС | профиль | цитата
Robin, а свойство "interval" случаем не светло-серого цвета?
(проверить не могу - пишу с общественного компа)? Если да -
то щёлкните на этом свойстве (на названии) правой кнопкой, и отметьте в появившемся меню первый (он же и единственный) пункт.
Должен появиться метод doInterval.
карма: 1

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