Вверх ↑
Этот топик читают: Гость
Главный модератор
Ответов: 2999
Рейтинг: 396
#1: 2007-11-25 08:36:04 ЛС | профиль | цитата
Простой, но полезный компонент Вентиль. Имеет два входа управления затвором: логический Open/Close и инвентирующий if Open then Close и наоборот.
В принципе, должен работать быстрее If_else, так как в нём нет вызова типизированного сравнения.
http://forum.hiasm.com//getfile/8151
screenshot
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Ответов: 1397
Рейтинг: 50
#2: 2007-11-25 08:59:22 ЛС | профиль | цитата
Nic, а как устанавливать компонент в формате PNG? Кидать на форму
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Разработчик
Ответов: 26163
Рейтинг: 2127
#3: 2007-11-25 10:18:15 ЛС | профиль | цитата
Валерий писал(а):
а как устанавливать компонент в формате PNG

Да, действительно интересно -- как?
карма: 22

0
Главный модератор
Ответов: 2999
Рейтинг: 396
#4: 2007-11-25 10:40:00 ЛС | профиль | цитата
Пока пристраивал картинку не заметил что пропал сам компонент.
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Разработчик
Ответов: 26163
Рейтинг: 2127
#5: 2007-11-25 12:19:02 ЛС | профиль | цитата
Nic, последний метод проще описать можно -- и никаких плясок с бубном вокруг if.



procedure THIGate._work_doFlip;
begin
Fstate := not FState;
end;


------------ Дoбавленo:


Ни фига он не инициирует состояние, так как в Create свойства еще не считаны. Провеь State всегда равен нулю. Короче, я изменил код



unit hiGate;

interface

uses Kol,Share,Debug;

type
THIGate = class(TDebug)
private
FState:boolean;
RunOnce:boolean;
public
_prop_State:byte;
_event_onGate:THI_Event;

constructor Create;
procedure _work_doGate(var _Data:TData; Index:word);
procedure _work_doFlip(var _Data:TData; Index:word);
procedure _work_doState(var Data:TData; Index:word);
end;

implementation

constructor THIGate.Create;
begin
RunOnce := true;
inherited;
end;

procedure THIGate._work_doGate;
var dt:TData;
begin
dt := _Data;
if RunOnce then begin
Fstate := not boolean(_prop_State);
RunOnce := false;
end;
if FState then _hi_CreateEvent(_Data,@_event_onGate,Dt);
end;

procedure THIGate._work_doState;
begin
RunOnce := false;
FState := ReadBool(Data);
end;

procedure THIGate._work_doFlip;
begin
if RunOnce then begin
Fstate := not boolean(_prop_State);
RunOnce := false;
end;
Fstate := not FState;
end;

end.


doFlip пришлось подправить, тк он может быть активирован раньше doGate.
карма: 22

0
Ответов: 3655
Рейтинг: 69
#6: 2007-11-25 12:39:14 ЛС | профиль | цитата
nesco, Затвор не срабатывает
code_7783.txt
карма: 0

0
файлы: 1code_7783.txt [530B] [498]
Разработчик
Ответов: 26163
Рейтинг: 2127
#7: 2007-11-25 12:50:13 ЛС | профиль | цитата
Вячеслав, ты на верхний рисунок внимательно посмотри и ответь -- для чего там Switch стоит?

------------ Дoбавленo:


Я вот только одного не пойму, а на кой он нужен вообще? Вот схема, работающая по тому же алгоритму



Add(MainForm,13341643,70,112)
{
Left=20
Top=105
link(onCreate,10230156:doData,[])
}
Add(DoData,10230156,266,147)
{
Data=Integer(1)
link(onEventData,5029134:State,[])
}
Add(Button,11032370,119,182)
{
Left=105
Top=125
Caption="Gate"
link(onClick,5731175:doSwitch,[])
}
Add(Timer,11789998,119,126)
{
link(onTimer,14990296:doData,[])
}
Add(Time,7563119,168,84)
{
}
Add(DoData,14990296,168,126)
{
link(onEventData,5029134:doGate,[])
link(Data,7563119:FormatTime,[])
}
Add(Label,5440794,371,126)
{
Left=175
Top=140
Width=85
}
Add(Switch,5731175,168,182)
{
DataOn=Integer(1)
DataOff=Integer(0)
link(onSwitch,5029134:doState,[(222,188)(222,139)])
}
Add(Button,10770699,119,238)
{
Left=105
Top=150
Caption="Gate"
link(onClick,5029134:doFilip,[(228,244)(228,146)])
}
Add(MultiElementEx,5029134,322,126)
{
link(onEvent2,5440794:doText,[])
}
BEGIN_SDK
Add(EditMultiEx,2721487,21,21)
{
WorkCount=#6:doGate|7:doState|7:doFilip|5:State|
EventCount=#8:onEvent2|
Width=174
Height=123
link(doGate,5296623:doEvent,[(67,27)(67,104)])
link(doState,16077005:doWork1,[(95,34)])
link(doFilip,9715536:doSwitch,[(35,41)(35,55)])
link(State,16077005:doWork3,[(58,48)(58,72)(95,72)])
}
Add(IndexToChanel,5296623,112,98)
{
Point(Index)
link(onEvent2,2721487:onEvent2,[(170,111)(170,27)])
link(Index,10918555:Value,[])
}
Add(Memory,10918555,112,49)
{
}
Add(Switch,9715536,49,49)
{
DataOn=Integer(1)
DataOff=Integer(0)
link(onSwitch,16077005:doWork2,[])
}
Add(HubEx,16077005,91,42)
{
link(onEvent,10918555:doValue,[])
}
END_SDK


У меня еще свежи воспоминания, как Неназываемый вдрызг раскритиковал мой компонент Commutator, на что мне было стыдно до безобразия
карма: 22

0
Ответов: 893
Рейтинг: 18
#8: 2007-11-25 20:31:26 ЛС | профиль | цитата
nesco писал(а):
У меня еще свежи воспоминания, как Неназываемый вдрызг раскритиковал мой компонент Commutator, на что мне было стыдно до безобразия


И всёже комутатор я активно использую класный компонент.
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Разработчик
Ответов: 26163
Рейтинг: 2127
#9: 2007-11-25 20:49:27 ЛС | профиль | цитата
Byuik писал(а):
И всёже комутатор я активно использую

Наверное, все же, продолжение его. Народ его улучшил. В чистом виде он нафиг не нужен.
карма: 22

0
Главный модератор
Ответов: 2999
Рейтинг: 396
#10: 2008-01-15 12:36:17 ЛС | профиль | цитата
nesco писал(а):
Я вот только одного не пойму, а на кой он нужен вообще?

Три года пользую Gate на рассыпухе - надоело:
code_279.txt

[size=-2]------ Добавлено в 00:37
nesco, Спасибо за советы. Вот исправленый код с учётом замечаний:

[size=-2]------ Добавлено в 12:36
Куда-то код делся - выкладываю опять.
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
файлы: 1Gate_1.rar [1.2KB] [769]
10
Сообщение
...
Прикрепленные файлы
(файлы не залиты)