Вверх ↑
Этот топик читают: Гость
Ответов: 1291
Рейтинг: 47
#1: 2020-04-08 22:48:05 ЛС | профиль | цитата
Было бы очень удобно иметь в схеме такой компонент. Подобные беспроводные модули линков например есть в среде Flowstone.
Нечто вроде глобальной переменной - завел туда данные или события и они передаются всем настроенным на его "волну" - метку приемникам.

Наподобие компонент уже есть - глобальная переменная, однако она не передает события:

Add(MainForm,2953706,21,105)
{
link(onCreate,4959301:doValue,[(195,125)(195,132)])
}
Add(GlobalVar,4959301,336,126)
{
Name="st"
}
Add(GlobalVar,12905410,420,126)
{
Name="st"
link(onValue,1252185:doMessage,[])
}
Add(Message,1252185,462,126)
{
}


Можно назвать его GlobalEvent.

Вообще возможно ли это? Погуглил "Delphi / pascal generate global event" и тишина.
Как вообще действуют линки в Хиасм? Они типа добавляют код подключенного элемента в заголовок Uses исходника?

Редактировалось 5 раз(а), последний 2020-04-08 23:31:44
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Ответов: 167
Рейтинг: 7
#2: 2020-04-09 00:52:53 ЛС | профиль | цитата
Такое уже есть . Правда работает передача событий лишь в один (как вы осмелелись его назвать) приёмник. Иначе сделать нельзя.
P.S : название элемента забыл . Покапайтесь во вкладке Инструменты, или Помошники . Возможно завтра напишу.
карма: 0
c, c++, lua
0
Разработчик
Ответов: 26115
Рейтинг: 2126
#3: 2020-04-09 00:56:37 ЛС | профиль | цитата
Aziz писал(а):
Наподобие компонент уже есть - глобальная переменная, однако она не передает события:

Была моя реализация GlobalVarEx на этапе становления HiAsm, но от него отказались в дальнейшем. Я его сейчас даже и не найду у себя, давно это было. Возможно, что у кого-то и завалялся.
карма: 22

0
Ответов: 2059
Рейтинг: 132
#4: 2020-04-09 02:26:58 ЛС | профиль | цитата
Aziz писал(а):
Можно назвать его GlobalEvent.

UtoECat писал(а):
Правда работает передача событий лишь в один (как вы осмелелись его назвать) приёмник. Иначе сделать нельзя.

Смотрите компоненты EventSource и EventListener.
Работает на множество "приёмников".
Add(MainForm,2953706,21,105)
{
}
Add(EventListener,4706854,385,336)
{
EventSource="lll"
link(onEvent,4987460:doChangeValue,[])
}
Add(EventSource,13533166,280,294)
{
Name="lll"
}
Add(Button,634512,140,119)
{
Left=15
Top=15
link(onClick,5882920:doInformListeners,[])
}
Add(Button,2492236,175,294)
{
Left=15
Top=175
link(onClick,13533166:doInformListeners,[])
}
Add(EventListener,1586521,385,399)
{
EventSource="lll"
link(onEvent,15209846:doChangeValue,[])
}
Add(EventListener,1236597,378,91)
{
EventSource="sss"
link(onEvent,470630:doChangeValue,[])
}
Add(EventListener,11092098,378,154)
{
EventSource="sss"
link(onEvent,1695352:doChangeValue,[])
}
Add(EventSource,5882920,266,119)
{
Name="sss"
}
Add(LED,470630,476,91)
{
Left=120
Top=10
}
Add(LED,1695352,475,154)
{
Left=155
Top=10
}
Add(LED,4987460,461,336)
{
Left=120
Top=175
ColorOn=65280
ColorOff=32768
}
Add(LED,15209846,467,399)
{
Left=155
Top=175
ColorOn=65280
ColorOff=32768
}


Редактировалось 1 раз(а), последний 2020-04-09 02:28:44
карма: 6

0
Ответов: 537
Рейтинг: 14
#5: 2020-04-09 08:01:52 ЛС | профиль | цитата
Нашел у себя компонент GlobalVarEx 1.2 Galkov

Редактировалось 1 раз(а), последний 2020-04-09 08:04:01
карма: 4

0
файлы: 1GlobalVarEx 1.2 Galkov.zip [3.1KB] [547]
Ответов: 167
Рейтинг: 7
#6: 2020-04-09 08:07:54 ЛС | профиль | цитата

Add(MainForm,2953706,21,105)
{
Left=0
Top=0
Width=400
Height=300
Align=0
Color=-16777201
Font=[MS Sans Serif,8,0,0,1]
ParentFont=1
Visible=0
Enabled=0
Cursor=0
KeyPreview=0
TabOrder=0
Ctl3D=1
WinStyle=0
Name=""
Hint=""
HintManager="(empty)"
Layout="(empty)"
WidthScale=0
HeightScale=0
AlphaBlendValue=255
Caption="Form"
BorderStyle=2
WindowsState=0
Icon=[]
TaskBar=0
DragForm=1
TransparentColor=16777215
Picture=[]
SavePosName=""
MouseCapture=1
ClientSize=1
Position=0
ShiftLeft=0
ShiftTop=0
OffsetShift=1
TransparentManager="(empty)"
FormFastening="(empty)"
link(onCreate,10339835:doWork,[])
}
Add(LineBreakEx,10339835,70,119)
{
Caption="007"
Type=0
}
Add(Button,1710389,49,42)
{
Left=50
Top=40
Width=155
Height=35
Align=0
Font=[MS Sans Serif,8,0,0,1]
ParentFont=1
Visible=0
Enabled=0
Cursor=0
KeyPreview=0
TabOrder=0
Ctl3D=1
WinStyle=0
Name=""
Hint=""
HintManager="(empty)"
Layout="(empty)"
WidthScale=0
HeightScale=0
Caption="Push"
Data=Null()
Flat=1
DefaultBtn=1
RespondToEnter=1
link(onClick,11005706:doWork,[])
}
Add(LineBreakEx,11005706,91,42)
{
Caption="007"
Type=0
}
Add(LineBreakEx,6224055,168,42)
{
Caption="007"
Type=1
link(OnEvent,8357804:doChangeValue,[])
}
Add(LED,8357804,217,42)
{
Left=215
Top=40
Width=140
Height=120
Align=0
Color=-16777201
Font=[MS Sans Serif,8,0,0,1]
ParentFont=1
Visible=0
Enabled=0
Cursor=0
KeyPreview=0
TabOrder=0
Ctl3D=1
WinStyle=0
Name=""
Hint=""
HintManager="(empty)"
Layout="(empty)"
WidthScale=0
HeightScale=0
Shape=0
Blick=0
ColorOn=255
ColorOff=128
ColorBlick=16777215
Value=1
}

Вот как-то так
flint2 писал(а):
Смотрите компоненты EventSource и EventListener.

Хоть бы ссылку на компоненты оставили....
А как определяется последовательность действий? по Z order'у?

--- Добавлено в 2020-04-09 08:16:53

Но опять же смысл во всех подобных компонентах - сделать схему красивее... Практической пользы мало...

Редактировалось 1 раз(а), последний 2020-04-09 08:16:53
карма: 0
c, c++, lua
0
Ответов: 9906
Рейтинг: 351
#7: 2020-04-09 09:07:22 ЛС | профиль | цитата
Sersey писал(а):
Нашел у себя компонент GlobalVarEx 1.2 Galkov

Если ты им пользуешься, то все-таки обнови... В этом посте есть ссылка на последнее обновление.

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

1
Голосовали:Konst
Ответов: 1291
Рейтинг: 47
#8: 2020-04-09 11:55:28 ЛС | профиль | цитата
Круто) Спасибо всем! Сейчас буду изучать.
UtoECat, не только красивее, но и проще так программировать. Например когда множество контролов должны получать одни и те же данные с левых точек для установления ширины и выссоты, например при вписывании их в ячейку таблицы.
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Ответов: 2059
Рейтинг: 132
#9: 2020-04-09 12:14:45 ЛС | профиль | цитата
UtoECat писал(а):
Хоть бы ссылку на компоненты оставили....
А как определяется последовательность действий? по Z order'у?

По именам. Одноимённые никак, или - кто первым встал, того и тапки.
https://forum.hiasm.com/getfile/38951
https://forum.hiasm.com/getfile/38950
карма: 6

0
Ответов: 1291
Рейтинг: 47
#10: 2020-04-09 12:24:30 ЛС | профиль | цитата
Ссылка на тему про EventListeners:
https://forum.hiasm.com/topic/60727/0

В общем, потестил, и вариант Galkov'a понравился больше. Тут и размеры иконок и функционал. Спасибо, Galkov!
Надо еще на скорость потестить.
Также открыл для себя linebreakEx. Не знал что он существует.

--- Добавлено в 2020-04-09 12:26:53

Как вообще действуют линки в Хиасм? Они типа добавляют код подключенного элемента в заголовок Uses исходника?


А по поводу этого моего второго вопроса, не посвятите в тайны Hiasm?)

--- Добавлено в 2020-04-09 12:35:25

Быстродействие примерно одинаковое.


Add(MainForm,6100002,252,168)
{
Caption="EventSourceTest"
Position=1
}
Add(EventTx,1,497,224)
{
Name="event"
}
Add(EventRx,7442214,588,224)
{
EventTransmitter="event"
link(onEvent,15519122:doWork2,[])
}
Add(Button,13017671,252,224)
{
Left=15
Top=25
Data=String(Button pressed)
link(onClick,2346004:doEvent1,[])
}
Add(EventRx,3957006,588,266)
{
EventTransmitter="event"
link(onEvent,12260526:doWork2,[])
}
Add(Hub,5102706,588,126)
{
OutCount=10
link(onEvent1,9660096:doWork1,[(655,132)])
link(onEvent2,9660096:doWork2,[])
link(onEvent3,15382537:doWork2,[])
link(onEvent4,1794076:doWork2,[])
link(onEvent5,11767980:doWork2,[])
link(onEvent6,14951612:doWork2,[])
link(onEvent7,4185216:doWork2,[])
link(onEvent8,16375624:doWork2,[])
link(onEvent9,14658296:doWork2,[])
link(onEvent10,7354415:doWork2,[])
}
Add(HubEx,15519122,651,224)
{
link(onEvent,13676584:doValue,[])
}
Add(Memory,13676584,700,224)
{
}
Add(HubEx,9660096,651,133)
{
Angle=1
link(onEvent,15382537:doWork1,[])
}
Add(HubEx,15382537,651,140)
{
Angle=1
link(onEvent,1794076:doWork1,[])
}
Add(HubEx,1794076,651,147)
{
Angle=1
link(onEvent,11767980:doWork1,[])
}
Add(HubEx,11767980,651,154)
{
Angle=1
link(onEvent,14951612:doWork1,[])
}
Add(HubEx,4185216,651,168)
{
Angle=1
link(onEvent,16375624:doWork1,[])
}
Add(HubEx,14951612,651,161)
{
Angle=1
link(onEvent,4185216:doWork1,[])
}
Add(HubEx,16375624,651,175)
{
Angle=1
link(onEvent,14658296:doWork1,[])
}
Add(HubEx,14658296,651,182)
{
Angle=1
link(onEvent,7354415:doWork1,[])
}
Add(HubEx,7354415,651,189)
{
Angle=1
link(onEvent,15519122:doWork1,[])
}
Add(EventRx,7464981,588,308)
{
EventTransmitter="event"
link(onEvent,10214421:doWork2,[])
}
Add(EventRx,10898616,588,350)
{
EventTransmitter="event"
link(onEvent,7494733:doWork2,[])
}
Add(EventRx,957850,588,392)
{
EventTransmitter="event"
link(onEvent,8828265:doWork2,[])
}
Add(EventRx,14992008,588,434)
{
EventTransmitter="event"
link(onEvent,14793478:doWork2,[])
}
Add(EventRx,11951554,588,476)
{
EventTransmitter="event"
link(onEvent,4034427:doWork2,[])
}
Add(EventRx,7414473,588,518)
{
EventTransmitter="event"
link(onEvent,2351031:doWork2,[])
}
Add(EventRx,13253725,588,560)
{
EventTransmitter="event"
link(onEvent,7148200:doWork2,[])
}
Add(EventRx,14929543,588,602)
{
EventTransmitter="event"
link(onEvent,2860682:doWork3,[(655,608)])
}
Add(HubEx,12260526,651,266)
{
Angle=3
link(onEvent,15519122:doWork3,[])
}
Add(HubEx,10214421,651,308)
{
Angle=3
link(onEvent,12260526:doWork3,[])
}
Add(HubEx,7494733,651,350)
{
Angle=3
link(onEvent,10214421:doWork3,[])
}
Add(HubEx,8828265,651,392)
{
Angle=3
link(onEvent,7494733:doWork3,[])
}
Add(HubEx,14793478,651,434)
{
Angle=3
link(onEvent,8828265:doWork3,[])
}
Add(HubEx,4034427,651,476)
{
Angle=3
link(onEvent,14793478:doWork3,[])
}
Add(HubEx,2351031,651,518)
{
Angle=3
link(onEvent,4034427:doWork3,[])
}
Add(HubEx,7148200,651,560)
{
Angle=3
link(onEvent,2351031:doWork3,[])
}
Add(TimeCounter,5524020,350,224)
{
link(onStart,9155902:doFor,[])
link(onStop,9241126:doText,[(390,237)(390,279)])
}
Add(Hub,2346004,301,224)
{
OutCount=3
link(onEvent1,10515174:doStart,[(333,230)(333,160)])
link(onEvent2,5524020:doStart,[(333,237)(333,230)])
link(onEvent3,14913012:doStart,[(333,244)(333,335)])
}
Add(Label,9241126,399,273)
{
Left=185
Top=40
}
Add(Label,1196034,399,161)
{
Left=185
Top=20
}
Add(TimeCounter,10515174,350,154)
{
link(onStart,4264307:doFor,[])
link(onStop,1196034:doText,[])
}
Add(For,9155902,399,224)
{
End=100000
link(onEvent,6514674:doData,[])
link(onStop,5524020:doStop,[(443,237)(443,217)(339,217)(339,237)])
}
Add(For,4264307,441,154)
{
End=100000
link(onEvent,15354119:doData,[])
link(onStop,10515174:doStop,[(485,167)(485,203)(339,203)(339,167)])
}
Add(DoData,15354119,490,154)
{
Data=String(St)
link(onEventData,5102706:doEvent1,[(545,160)(545,132)])
}
Add(DoData,6514674,448,224)
{
Data=String(St)
link(onEventData,1:doInformRecievers,[])
}
Add(GlobalVarEx,2343732,504,329)
{
Name="s1"
Point(onValue)
}
Add(TimeCounter,14913012,350,329)
{
link(onStart,15833234:doFor,[])
link(onStop,9992112:doText,[(390,342)(390,384)])
}
Add(Label,9992112,399,378)
{
Left=185
Top=60
}
Add(For,15833234,399,329)
{
End=100000
link(onEvent,12377601:doData,[])
link(onStop,14913012:doStop,[(443,342)(443,322)(339,322)(339,342)])
}
Add(DoData,12377601,448,329)
{
Data=String(St)
link(onEventData,2343732:doValue,[])
}
Add(GlobalVarEx,2059838,588,742)
{
Name="s1"
Point(onValue)
link(onValue,4809364:doWork3,[(635,748)])
}
Add(GlobalVarEx,1939668,581,735)
{
Name="s1"
Point(onValue)
link(onValue,4809364:doWork2,[])
}
Add(GlobalVarEx,10665143,574,728)
{
Name="s1"
Point(onValue)
link(onValue,2764489:doWork2,[])
}
Add(GlobalVarEx,5884648,567,721)
{
Name="s1"
Point(onValue)
link(onValue,11328488:doWork2,[])
}
Add(GlobalVarEx,7137200,560,714)
{
Name="s1"
Point(onValue)
link(onValue,4062695:doWork2,[])
}
Add(GlobalVarEx,2946237,553,707)
{
Name="s1"
Point(onValue)
link(onValue,7993813:doWork2,[])
}
Add(GlobalVarEx,7747505,546,700)
{
Name="s1"
Point(onValue)
link(onValue,8867649:doWork2,[])
}
Add(GlobalVarEx,1203961,539,693)
{
Name="s1"
Point(onValue)
link(onValue,14293807:doWork2,[])
}
Add(GlobalVarEx,13135349,532,686)
{
Name="s1"
Point(onValue)
link(onValue,5638904:doWork2,[])
}
Add(GlobalVarEx,12156357,525,679)
{
Name="s1"
Point(onValue)
link(onValue,1707676:doWork2,[])
}
Add(HubEx,2860682,651,595)
{
Angle=3
link(onEvent,7148200:doWork3,[])
}
Add(HubEx,4809364,631,735)
{
Angle=3
link(onEvent,2764489:doWork3,[])
}
Add(HubEx,2764489,631,728)
{
Angle=3
link(onEvent,11328488:doWork3,[])
}
Add(HubEx,11328488,631,721)
{
Angle=3
link(onEvent,4062695:doWork3,[])
}
Add(HubEx,4062695,631,714)
{
Angle=3
link(onEvent,7993813:doWork3,[])
}
Add(HubEx,7993813,631,707)
{
Angle=3
link(onEvent,8867649:doWork3,[])
}
Add(HubEx,8867649,631,700)
{
Angle=3
link(onEvent,14293807:doWork3,[])
}
Add(HubEx,14293807,631,693)
{
Angle=3
link(onEvent,5638904:doWork3,[])
}
Add(HubEx,5638904,631,686)
{
Angle=3
link(onEvent,1707676:doWork3,[])
}
Add(HubEx,1707676,631,679)
{
Angle=3
link(onEvent,2860682:doWork2,[(635,601)])
}


Редактировалось 2 раз(а), последний 2020-04-09 12:35:25
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Ответов: 4629
Рейтинг: 749
#11: 2020-04-09 13:16:12 ЛС | профиль | цитата
Aziz писал(а):
не посвятите в тайны Hiasm?


Aziz писал(а):
Как вообще действуют линки в Хиасм? Они типа добавляют код подключенного элемента в заголовок Uses исходника?
Для каждого контейнера генерируется один исходный *.pas файл (модуль). Для каждого элемента в данном контейнере в uses модуля прописывается его файл исходного кода hi----.pas (без ".pas"). Затем в этом модуле конструируется объект контейнера и каждый компонент, заполняются их свойства (из панели свойств). Событие и верхняя точка компонентов являются свойствами в коде компонента, метод и нижняя точка - методами. Кодогенератор знает какая точка какого компонента куда подключена, поэтому при заполнении свойств в коде модуля свойству события компонента присваивается метод другого компонента, подключенного к событию.
_event_onXXX := _work_doYYY;
Так получается связь.

Редактировалось 3 раз(а), последний 2020-04-09 13:18:35
карма: 26

0
Ответов: 9906
Рейтинг: 351
#12: 2020-04-09 15:13:52 ЛС | профиль | цитата
Aziz писал(а):
... понравился больше
Их не очень правильно сравнивать - это разные изделия.

GlobalVarEx стреляет куда угодно, и откуда угодно. Любой из них может служить передатчиком - остальные принимают.
Манагеры так не умеют

Add(ChildPanel,6224963,182,84){
}
BEGIN_SDK
Add(EditMulti,10264605,21,21)
{
}
Add(Panel,13297013,35,105)
{
Left=35
Top=26
Width=89
Height=71
}
Add(Button,14652606,126,91)
{
Left=14
Top=14
Width=62
link(onClick,8158934:doValue,[])
}
Add(GlobalVarEx,8158934,182,91)
{
Name="КУ"
SkipOwn=0
Point(onValue)
link(onValue,10308432:doChangeValue,[])
}
Add(LED,10308432,238,91)
{
Left=35
Top=35
Blick=1
ColorOff=32768
}
END_SDK
Add(ChildPanel,6112460,238,84)
{
}
BEGIN_SDK
Add(EditMulti,3514443,21,21)
{
}
Add(Panel,6410340,35,105)
{
Left=140
Top=26
Width=89
Height=71
}
Add(Button,4146455,126,91)
{
Left=14
Top=14
Width=62
link(onClick,6287771:doValue,[])
}
Add(GlobalVarEx,6287771,182,91)
{
Name="КУ"
SkipOwn=0
Point(onValue)
link(onValue,3955009:doChangeValue,[])
}
Add(LED,3955009,238,91)
{
Left=35
Top=35
Blick=1
ColorOff=32768
}
END_SDK
Они умеют только с верхнего уровня в низ (при этом надо еще ручками указывать в имени уровень вложенности). И есть четкое разделение на - один передатчик, и какое-то количество приемников.

Типовой случай (к сожалению) применения интеллекта в IT-мире.
Создается некая "технология", объявляется модной. И применяется для решения относительно простой задачи. И когда выясняются ограничения применения - произносится много "умных слов". И все верят, что задача действительно очень и очень сложная.

А я - не верю. Ну не было необходимости внедрения новых технологий, для которых надо изменять CodeGen, нарушать семантику Z-order-а -- для решения этой конкретной задачи.
Другой разговор, нужен ли такой инструмент в общем доступе... Слишком острый инструмент, с двухсторонней заточкой.
Работающим "методом тыка" - противопоказан, как мне кажется.

Редактировалось 4 раз(а), последний 2020-04-09 15:31:42
карма: 9

1
Голосовали:flint2
Ответов: 2059
Рейтинг: 132
#13: 2020-04-09 15:44:06 ЛС | профиль | цитата
Galkov писал(а):
А я - не верю. Ну не было необходимости внедрения новых технологий, для которых надо изменять CodeGen, нарушать семантику Z-order-а -- для решения этой конкретной задачи.
Другой разговор, нужен ли такой инструмент в общем доступе... Слишком острый инструмент, с двухсторонней заточкой.
Работающим "методом тыка" - противопоказан, как мне кажется.

Мудрёно...
карма: 6

0
Ответов: 1291
Рейтинг: 47
#14: 2020-04-09 16:51:08 ЛС | профиль | цитата
Netspirit, спасибо, сложновато, но общая суть как я и представлял.
Galkov, да, я и указал поэтому что функциональнее.. Но спасибо за развернутый обзор. И за юмор) Обещаю вашей заточкой тыкать по-возможности осознанно)

--- Добавлено в 2020-04-09 17:14:27

Странно конечно, почему этим компонентом не заменят более урезанный аналогичный что в составе пакета идет. Какова логика что за этим стоит? Неспроста наверное. Или именно из-за "остроты" и "двусторонности" заточки?)

Редактировалось 3 раз(а), последний 2020-04-09 17:14:27
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Ответов: 9906
Рейтинг: 351
#15: 2020-04-09 21:08:05 ЛС | профиль | цитата
Aziz писал(а):
Например когда множество контролов должны получать одни и те же данные с левых точек для установления ширины и высоты, например при вписывании их в ячейку таблицы
Собственно -- ДА.
Хорошее оружие в натренированных руках - это большая сила. Однако, твои действия должны быть точны и экономны.
Вот, вспомнил я свою "разминку мозгов" на эту тему: https://forum.hiasm.com/post/289070
Можно ли это было сделать без Ex-ов -- ну конечно же. Любой может попробовать и прочувствовать эффективность применения GlobalVarEx в данном конкретном случае
Aziz писал(а):
Неспроста наверное. Или именно из-за "остроты" и "двусторонности" заточки?)
Да. Именно "из-за"
Работающим "методом тыка" - противопоказан
Много еще таких (не все, слава богу)
Порежутся, будут обижаться.

Редактировалось 1 раз(а), последний 2020-04-09 21:09:13
карма: 9

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