nesco писал(а):
Компонент ChanelSwitch был добавлен на SVN 20.01.2022nesco, раз зашел разговор про ChanelSwitch то пару вопросов по элементу:
1. Почему нет свойства по выбору канала по умолчанию (к примеру: DefaultChanel1 [True,False])?
2. Да и как по мне Integer для хранения boolean значения лишняя затея.

[About]
Version=1.11
Author=nesco
Mail=hiasm@mail.ru
[Type]
Class=Element
Info=2-х канальный переключатель
Tab=Tools
Icon=MT_Data
[Property]
DefaultChanel1=По умолчанию первый канал (при False втрой канал)|14|0|True,False
MT_Data=Режим MT-потока|4|0|False,True
[Methods]
doSwitchToChanel1=Переключает входящий поток на 1-й канал|1|
doSwitchToChanel2=Переключает входящий поток на 2-й канал|1|
doInputEvent%MT_Data%=Входящий поток данных|1|
onOutEvent1=1-й канал данных|2|
onOutEvent2=2-й канал данных|2|
IdxCurChanel=Индекс текущего активного канала|3|1
unit hiChanelSwitch;
interface
uses Kol, Share, Debug;
type
THIChanelSwitch = class(TDebug)
private
Chanel_1: boolean;
public
_prop_MT_Data: byte;
_event_onOutEvent1: THI_Event;
_event_onOutEvent2: THI_Event;
procedure _work_doSwitchToChanel1(var _Data: TData; Index: word);
procedure _work_doSwitchToChanel2(var _Data: TData; Index: word);
procedure _work_doInputEvent0(var _Data: TData; Index: word);
procedure _work_doInputEvent1(var _Data: TData; Index: word);
procedure _var_IdxCurChanel(var _Data: TData; Index: word);
property _prop_DefaultChanel1:boolean write Chanel_1;
end;
implementation
procedure THIChanelSwitch._work_doSwitchToChanel1;
begin
Chanel_1 := true;
end;
procedure THIChanelSwitch._work_doSwitchToChanel2;
begin
Chanel_1 := false;
end;
procedure THIChanelSwitch._work_doInputEvent0;
begin
_Data := ReadData(_Data, NULL);
if Chanel_1 then
_hi_CreateEvent_(_Data, @_event_onOutEvent1)
else
_hi_CreateEvent_(_Data, @_event_onOutEvent2);
end;
procedure THIChanelSwitch._work_doInputEvent1;
begin
_Data := ReadMTData(_Data, NULL);
if Chanel_1 then
_hi_CreateEvent_(_Data, @_event_onOutEvent1)
else
_hi_CreateEvent_(_Data, @_event_onOutEvent2);
end;
procedure THIChanelSwitch._var_IdxCurChanel;
begin
if Chanel_1 then
dtInteger(_Data, 0)
else
dtInteger(_Data, 1);
end;
end.
Add(MainForm,13061675,273,147)
{
Width=460
Height=559
Position=1
}
Add(Timer,4702226,273,273)
{
Interval=200
link(onTimer,1245350:doNext,[])
}
Add(CounterEx,1245350,315,273)
{
link(onNext,15736268:doInputEvent,[(356,279)(356,251)])
}
Add(Memo,3767594,420,231)
{
Left=260
Top=65
Width=170
Height=425
Font=[MS Sans Serif,14,0,0,1]
AddType=1
}
Add(ChanelSwitch,15736268,371,231)
{
DefaultChanel1=1
MT_Data=1
link(onOutEvent1,3767594:doAdd,[])
}
Add(Button,14405877,273,238)
{
Left=130
Top=195
Caption="off"
link(onClick,15736268:doSwitchToChanel2,[])
}
Add(Button,15153446,273,196)
{
Left=130
Top=165
Caption="on"
link(onClick,15736268:doSwitchToChanel1,[(357,202)(357,237)])
}
Add(Button,8656408,273,315)
{
Left=100
Top=230
Width=125
Caption="Какой канал?"
link(onClick,16234457:doMessage,[])
}
Add(Message,16234457,371,315)
{
Caption="Текущий канал"
link(Message,15736268:IdxCurChanel,[])
}