Вверх ↑
Этот топик читают: Гость
Этот топик был перемещен из раздела "Помощь по среде"
Ответов: 4
Рейтинг: 0
#1: 2020-09-30 07:37:29 ЛС | профиль | цитата
Уважаемые знатоки!

Хотел набросать программку, в которой можно было бы составлять блок-схемы. Хочу реализовать возможность добавлять блоки (не обязательно разной формы и цвета, но с текстом) и связи между ними. Самое главное чтобы по окончании составления схемы можно было перечислить все блоки и связи по имени (например "дом", "работа", "парк" для блоков и "дом#работа", "работа#парк", "парк#дом" для связей). Имея возможность перечисления для связей по имени, можно будет реализовать вывод полей edit по количеству связей или таблицы для заполнения расстояния. Связей может быть несколько (дом#работа, дом#парк, дом#магазин) причем дом#магазин и магазин#дом - это не одно и тоже, хотелось бы что бы при указании связи запоминалось начало и конец, на манер стрелочки.

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

Не обязательно чтобы были спрайты или графика, может можно как-то просто добавлять кнопки на форму, располагать их перетаскивая мышкой и указывать связи, но как это "просто" сделать я не знаю

Я не прошу всё сделать за меня, просто подскажите какие компоненты могли бы мне в этом помочь. Примеры, конечно, приветствуются.
карма: 0

0
Ответов: 783
Рейтинг: 168
#2: 2020-09-30 09:32:39 ЛС | профиль | цитата
Artie, посмотри в сторону https://forum.hiasm.com/topic/65447
карма: 15

0
Ответов: 2236
Рейтинг: 676
#3: 2020-09-30 11:26:58 ЛС | профиль | цитата
Artie, вопросы:
1. Блоки достаточно одной формы (прямоугольный)?
2. Связи (линия с стрелочкой) между блоками должны ломаться или быть прямыми?
3. Связи от блоков из одной точки выходят (если их несколько)? И в какой позиции должна находится эта точка(и) (в центре стороны, у угла)?
4. Связи от блока и к блокам подходят/отходят с определённой стороны или с любой?
карма: 11

0
Ответов: 4
Рейтинг: 0
#4: 2020-09-30 12:09:51 ЛС | профиль | цитата
Gunta писал(а):
Artie, посмотри в сторону https://forum.hiasm.com/topic/65447

Спасибо! Не успел глянуть как автор в моей теме появился
sla8a писал(а):
Artie, вопросы:
1. Блоки достаточно одной формы (прямоугольный)?
2. Связи (линия с стрелочкой) между блоками должны ломаться или быть прямыми?
3. Связи от блоков из одной точки выходят (если их несколько)? И в какой позиции должна находится эта точка(и) (в центре стороны, у угла)?
4. Связи от блока и к блокам подходят/отходят с определённой стороны или с любой?

Спасибо, что откликнулись! Если мы говорим о хотелках в общем, то примерно так:
1. Думаю можно обойтись одной формой (прямоугольник), но с возможностью менять размер и цвет;
2. Стрелочки можно прямые, но с возможностью размещения их под углом. То есть стрелочка будет менять положение в зависимости от расположения блоков (привязка);
3 и 4. Думаю хорошим решением было бы, чтобы стрелочки всегда "целились" в центр фигуры и начиналась из центра фигуры в независимости от стороны. При этом сам конец стрелочки отрисовывался бы на границе фигуры, а та часть что пересекается с фигурой была бы невидима. На границе фигуры из которой выходит стрелочка можно отрисовывать точку.
5. Было бы неплохо в выпадающем меню иметь возможность менять список с готовыми пресетами (фигурами): "Дом" (размер, цвет), "Работа" (размер, цвет). Сами свойства в списке отображать не нужно, а задавать их (пресеты) можно из StrList;
6. Ну и конечно сохранение в файл. Еще можно осуществить передачу в поток. При этом хорошо бы чтоб структура была вида: <name:'дом'><in>работа#дом;магазин#дом<\in><out>дом#парк<\out><coords>12;25<\coords><\name:'дом'>. Ну или только <out>, чтоб стрелки не дублировались.

Если же говорить о возможностях которыми HiAsm обладает вообще, то тут Вам видней
Не до красивостей, мне бы хотя бы перечисление связей организовать
карма: 0

0
Ответов: 2236
Рейтинг: 676
#5: 2020-09-30 13:06:16 ЛС | профиль | цитата
Вечером постараюсь сделать набросок.

Редактировалось 1 раз(а), последний 2020-09-30 20:49:26
карма: 11

0
Ответов: 2236
Рейтинг: 676
#6: 2020-09-30 20:50:16 ЛС | профиль | цитата
Вот такую заготовку можно доработать:

Add(MainForm,2953706,63,266)
{
Width=878
Height=475
Position=1
}
Add(PaintBox,6729962,63,315)
{
Top=5
Width=630
Height=440
Color=16777215
ClearBeforeDraw=0
Point(MouseX)
Point(MouseY)
Point(onMouseUp)
Point(onMouseDown)
Point(onMouseMove)
link(onBeforeDraw,16426687:doEvent1,[(106,321)(106,167)])
link(onMouseUp,2509035:doEvent,[(115,328)(115,286)])
link(onMouseDown,8361387:doEvent1,[])
link(onMouseMove,13564180:doCase,[(133,342)(133,762)])
}
Add(ListBox,11326653,441,476)
{
Left=635
Top=5
Width=230
Height=220
link(onChange,2401167:doWork,[])
}
Add(LineBreakEx,6206307,63,392)
{
Caption="bmp"
Type=3
link(_Data,6729962:Bitmap,[])
}
Add(LineBreakEx,969728,791,329)
{
Caption="bmp"
Type=2
}
Add(Img_Rectangle,10537941,791,364)
{
Point2AsOffset=0
Style=1
Point(Point1)
Point(Point2)
Point(BgColor)
link(onDraw,11399917:doDraw,[])
link(Bitmap,969728:getVar,[])
link(Point1,2369989:Var2,[])
link(Point2,11272237:Var1,[(818,349)])
link(BgColor,13898893:Part5,[(825,326)(839,326)])
}
Add(ArrayEnum,12022484,763,231)
{
link(onItem,13898893:doSplit,[])
link(Array,5681765:getVar,[])
}
Add(IndexToChanel,8473841,168,357)
{
link(onEvent1,157820:doCompare,[])
link(onEvent2,5707511:doCompare,[(212,370)(212,482)])
}
Add(IndexToChanel,3937080,266,756)
{
link(onEvent1,14662768:doEvent,[])
}
Add(PopupMenu,5920028,294,476)
{
Menu=#3:Дом|6:Работа|
link(onClick,8426183:doRead,[])
}
Add(LineBreakEx,16490902,70,378)
{
Caption="mX"
Type=3
link(_Data,6729962:MouseX,[])
}
Add(LineBreakEx,2532046,77,364)
{
Caption="mY"
Type=3
link(_Data,6729962:MouseY,[])
}
Add(StrList,4267223,329,427)
{
Strings=#14:120;50;255;Дом|18:80;80;34245;Работа|
}
Add(ArrayRW,8426183,343,476)
{
link(onRead,16289371:doString,[])
link(Array,4267223:Array,[])
}
Add(LineBreakEx,11948875,399,434)
{
Caption="mX"
Type=2
}
Add(LineBreakEx,7513093,406,455)
{
Caption="mY"
Type=2
}
Add(FormatStr,16289371,399,476)
{
DataCount=3
Mask="%1;%2;%3"
link(onFString,11326653:doAdd,[])
link(Str1,11948875:getVar,[])
link(Str2,7513093:getVar,[])
}
Add(LineBreakEx,2401167,483,476)
{
Caption="refr"
}
Add(LineBreakEx,11642147,14,315)
{
Caption="refr"
Type=1
link(OnEvent,6729962:doRefresh,[])
}
Add(Img_TextInRect,11399917,854,364)
{
Point2AsOffset=0
AlignHorizon=2
Alignvertical=2
link(Bitmap,15557969:getVar,[])
link(Text,13898893:Part6,[(867,327)(846,327)])
link(Point1,2369989:Var3,[(874,355)])
link(Point2,11272237:Var3,[(881,349)])
}
Add(LineBreakEx,15557969,854,329)
{
Caption="bmp"
Type=2
}
Add(MultiStrPart,13898893,805,231)
{
Count=6
link(onSplit,10537941:doDraw,[(893,237)(893,409)(784,409)(784,370)])
}
Add(PointXY,7692577,805,287)
{
link(X,13898893:Part1,[])
link(Y,13898893:Part2,[])
}
Add(GetDataEx,2369989,805,350)
{
link(Data,7692577:Point,[])
}
Add(PointXY,2866685,847,287)
{
link(X,13898893:Part3,[(853,278)(825,278)])
link(Y,13898893:Part4,[(860,271)(832,271)])
}
Add(GetDataEx,11272237,847,344)
{
link(Data,2866685:Point,[])
}
Add(LineBreakEx,15186323,455,518)
{
Caption="arrB"
Type=3
link(_Data,11326653:Array,[])
}
Add(LineBreakEx,5681765,763,203)
{
Caption="arrB"
Type=2
}
Add(LineBreakEx,4003678,364,966)
{
Caption="arrB"
Type=2
}
Add(Case,13564180,217,756)
{
Value=Integer(-1)
link(onNextCase,3937080:doEvent,[])
link(onTrue,11391387:doEvent,[(257,769)(257,825)])
AddHint(-1,-23,24,13,Value)
}
Add(PointInRect,11246959,574,994)
{
Point2AsOffset=0
link(onTrue,11831701:doValue,[(630,1000)(630,1141)(226,1141)(226,1007)])
link(Point,13182886:Point,[])
link(RPoint1,16607799:Point,[(587,982)(524,982)(524,1091)(538,1091)])
link(RPoint2,10829680:Point,[(594,982)(615,982)(615,1089)(580,1089)])
}
Add(LineBreakEx,14289882,574,896)
{
Caption="mX"
Type=2
}
Add(LineBreakEx,7528230,581,910)
{
Caption="mY"
Type=2
}
Add(PointXY,13182886,574,938)
{
link(X,14289882:getVar,[])
link(Y,7528230:getVar,[])
}
Add(PointXY,16607799,532,1050)
{
link(X,9216896:Part1,[])
link(Y,9216896:Part2,[])
}
Add(PointXY,10829680,574,1050)
{
link(X,9216896:Part3,[(580,1041)(552,1041)])
link(Y,9216896:Part4,[(587,1036)(559,1036)])
}
Add(MultiStrPart,9216896,532,994)
{
Count=4
link(onSplit,11246959:doCheck,[])
}
Add(Memory,11831701,245,1001)
{
Default=Integer(-1)
Point(Data)
link(onData,416120:doEvent1,[])
link(Data,8782099:Index,[(251,994)(284,994)(284,1039)(377,1039)])
AddHint(1,-28,24,13,Default)
}
Add(LineBreakEx,7590101,434,1008)
{
Caption="refr"
}
Add(LineBreakEx,7295866,245,1071)
{
Caption="IndS"
Type=3
link(_Data,11831701:Value,[])
}
Add(If_else,2845500,357,756)
{
Type=5
Op2=Integer(-1)
link(onTrue,210773:doEvent1,[])
link(Op1,8007823:getVar,[])
AddHint(7,-20,24,13,Op2)
}
Add(ArrayRW,5119967,434,721)
{
Index=Integer(0)
link(onRead,7375782:doCalc,[])
link(Array,13029281:getVar,[])
AddHint(10,-19,21,13,Index)
}
Add(Memory,1151541,483,994)
{
Default=String()
link(onData,9216896:doSplit,[])
}
Add(LineBreakEx,7603795,483,1036)
{
Caption="SrtS"
Type=3
link(_Data,1151541:Value,[])
}
Add(LineBreakEx,8007823,357,721)
{
Caption="IndS"
Type=2
}
Add(LineBreakEx,8576002,1043,511)
{
Caption="mX"
Type=2
}
Add(LineBreakEx,12954791,1106,511)
{
Caption="mY"
Type=2
}
Add(If_else,157820,238,357)
{
Type=5
Op2=Integer(-1)
link(onTrue,8020821:doEvent,[])
link(Op1,10399383:getVar,[])
AddHint(7,-20,24,13,Op2)
}
Add(LineBreakEx,10399383,238,322)
{
Caption="IndS"
Type=2
}
Add(Memory,2567729,1043,539)
{
Point(Data)
link(onData,522413:doValue,[])
link(Data,8576002:getVar,[])
}
Add(Memory,522413,1106,539)
{
Point(Data)
link(Data,12954791:getVar,[])
}
Add(StrList,7080889,406,1043)
{
}
Add(Replace,2979710,364,1064)
{
SubStr=";"
DestStr="\13\10"
link(onReplace,7080889:doText,[])
link(Str,8782099:Item,[])
}
Add(ArrayRW,5882122,546,721)
{
Index=Integer(1)
link(onRead,11680807:doCalc,[])
link(Array,2374127:getVar,[])
AddHint(10,-19,21,13,Index)
}
Add(MathParse,7375782,476,721)
{
DataCount=3
MathStr="%3 + %2 - %1"
link(onResult,5119967:doWrite,[(515,727)(515,761)(428,761)(428,734)])
link(X1,10101095:getVar,[])
link(X2,3433573:getVar,[])
}
Add(MathParse,11680807,588,721)
{
DataCount=3
MathStr="%3 + %2 - %1"
link(onResult,5882122:doWrite,[(629,727)(629,765)(534,765)(534,734)])
link(X1,3216291:getVar,[])
link(X2,13667626:getVar,[])
}
Add(Replace,5009103,644,770)
{
SubStr="\13\10"
DestStr=";"
link(onReplace,15547270:doTrim,[])
link(Str,3300114:getVar,[])
}
Add(ArrayRW,1752270,728,763)
{
link(Array,5744204:getVar,[])
link(Index,520625:getVar,[])
}
Add(LineBreakEx,5744204,728,721)
{
Caption="arrB"
Type=2
}
Add(Hub,210773,399,756)
{
OutCount=5
link(onEvent1,5119967:doRead,[(421,762)(421,727)])
link(onEvent2,5882122:doRead,[(527,769)(527,727)])
link(onEvent3,5009103:doReplace,[])
link(onEvent4,16259542:doWork,[])
link(onEvent5,12148942:doWork,[])
}
Add(LineBreakEx,3433573,483,693)
{
Caption="mX"
Type=2
}
Add(LineBreakEx,13667626,595,693)
{
Caption="mY"
Type=2
}
Add(LineBreakEx,9735752,1043,581)
{
Caption="OldmX"
Type=3
link(_Data,2567729:Value,[])
}
Add(LineBreakEx,9678386,1106,581)
{
Caption="OldmY"
Type=3
link(_Data,522413:Value,[])
}
Add(LineBreakEx,10101095,476,679)
{
Caption="OldmX"
Type=2
}
Add(LineBreakEx,3216291,588,679)
{
Caption="OldmY"
Type=2
}
Add(LineBreakEx,16259542,420,777)
{
Caption="refr"
}
Add(LineBreakEx,520625,735,735)
{
Caption="IndS"
Type=2
}
Add(Trim,15547270,686,770)
{
Char=";"
Mode=2
link(onTrim,1752270:doWrite,[])
}
Add(LineBreakEx,2862042,336,357)
{
Caption="OldmXY"
}
Add(LineBreakEx,16270557,973,539)
{
Caption="OldmXY"
Type=1
link(OnEvent,2567729:doValue,[])
}
Add(LineBreakEx,12148942,462,784)
{
Caption="OldmXY"
}
Add(If_else,5707511,245,476)
{
Op2=Integer(-1)
link(onTrue,5920028:doPopupHere,[])
link(onFalse,7583823:doPopupHere,[(285,489)(285,552)])
link(Op1,2640391:getVar,[])
AddHint(7,-20,24,13,Op2)
}
Add(LineBreakEx,2640391,245,434)
{
Caption="IndS"
Type=2
}
Add(ArrayEnum,8782099,364,994)
{
onBreakEnable=0
Point(onBreak)
link(onItem,1151541:doValue,[])
link(onEndEnum,11831701:doClear,[(416,1007)(416,1051)(235,1051)(235,1014)])
link(Array,4003678:getVar,[])
link(onBreak,7590101:doWork,[])
}
Add(PopupMenu,7583823,294,546)
{
Menu=#5:Связь|4:Цвет|
link(onClick,3373475:doEvent,[])
}
Add(Hub,8361387,140,329)
{
link(onEvent1,1340359:doWork,[])
link(onEvent2,8473841:doEvent,[(161,342)(161,363)])
}
Add(IndexToChanel,3373475,343,546)
{
link(onEvent1,8729978:doEvent1,[])
link(onEvent2,16707805:doOpen,[(383,559)(383,587)])
}
Add(Img_Line,188428,1057,287)
{
Point(Point1)
Point(Point2)
link(Bitmap,950411:getVar,[])
link(Point1,1273801:Result,[])
}
Add(LineBreakEx,950411,1057,140)
{
Caption="bmp"
Type=2
}
Add(MathParse,1273801,1064,217)
{
DataCount=4
MathStr="%1 + %3 div 2 + (%2 + %4 div 2) * 65536"
link(X1,6043130:Part1,[])
link(X2,6043130:Part2,[])
link(X3,6043130:Part3,[])
link(X4,6043130:Part4,[])
}
Add(MathParse,4564525,1015,287)
{
DataCount=4
MathStr="%1 + %3 div 2 + (%2 + %4 div 2) * 65536"
link(onResult,188428:doDraw,[])
link(X1,12466762:Part1,[])
link(X2,12466762:Part2,[])
link(X3,12466762:Part3,[])
link(X4,12466762:Part4,[])
}
Add(Memory,16193715,854,539)
{
Default=Integer(0)
AddHint(-1,-25,21,13,Default)
}
Add(LineBreakEx,8131691,854,581)
{
Caption="line"
Type=3
link(_Data,16193715:Value,[])
}
Add(ColorDialog,16707805,392,581)
{
}
Add(ChanelToIndex,4772653,805,539)
{
link(onIndex,16193715:doValue,[])
}
Add(LineBreakEx,11678369,287,322)
{
Caption="line"
Type=2
}
Add(IndexToChanel,8020821,287,357)
{
Point(Index)
link(onEvent1,2862042:doWork,[])
link(onEvent2,12678313:doEvent1,[])
link(Index,11678369:getVar,[])
}
Add(LineBreakEx,1947824,434,273)
{
Caption="IndS"
Type=2
}
Add(Memory,4268331,434,301)
{
Point(Data)
link(Data,1947824:getVar,[])
}
Add(LineBreakEx,14063833,469,315)
{
Caption="IndS"
Type=2
}
Add(LineBreakEx,15568657,371,805)
{
Caption="select?"
}
Add(LineBreakEx,12587519,231,952)
{
Caption="select?"
Type=1
link(OnEvent,8782099:doEnum,[(354,958)(354,1000)])
}
Add(LineBreakEx,1340359,168,329)
{
Caption="select?"
}
Add(If_else,13634660,434,364)
{
Type=5
link(onTrue,7073963:doStrCatDlm,[])
link(onFalse,16632171:doMessage,[(482,377)(482,412)])
link(Op1,8455901:Var2,[])
link(Op2,14063833:getVar,[(447,355)(475,355)])
}
Add(LineBreak,9995889,735,539)
{
Caption="stopLine"
link(Out,4772653:doWork1,[])
Primary=[15299609,-525,-252]
}
Add(LineBreak,16605100,735,560)
{
Caption="startLine"
link(Out,4772653:doWork2,[(797,566)(797,552)])
Primary=[12632685,-315,-7]
}
Add(LineBreakEx,8190088,420,1092)
{
Caption="arrS"
Type=3
link(_Data,7080889:Array,[])
}
Add(LineBreakEx,1713676,406,1106)
{
Caption="txtS"
Type=3
link(_Data,7080889:Text,[])
}
Add(LineBreakEx,13029281,434,679)
{
Caption="arrS"
Type=2
}
Add(LineBreakEx,2374127,546,679)
{
Caption="arrS"
Type=2
}
Add(LineBreakEx,3300114,644,735)
{
Caption="txtS"
Type=2
}
Add(Message,16632171,504,406)
{
Message="Нельзя!"
Caption="Нельзя!"
}
Add(Hub,12678313,399,364)
{
link(onEvent1,13634660:doCompare,[])
}
Add(Hub,8729978,392,546)
{
link(onEvent1,4268331:doValue,[(637,552)(637,253)(422,253)(422,307)])
link(onEvent2,12632685:In,[])
}
Add(Hub,416120,308,1001)
{
link(onEvent1,8782099:doStop,[])
link(onEvent2,2979710:doReplace,[(343,1014)(343,1070)])
}
Add(GetDataEx,8455901,434,336)
{
link(Data,4268331:Value,[])
}
Add(ListBox,7794246,553,364)
{
Left=635
Top=230
Width=230
Height=215
link(onChange,1034094:doWork,[])
}
Add(LineBreakEx,5733660,567,406)
{
Caption="arrL"
Type=3
link(_Data,7794246:Array,[])
}
Add(Hub,16426687,280,161)
{
OutCount=3
link(onEvent1,2486414:doEvent,[(318,167)(318,76)])
link(onEvent2,4465715:doEnum,[])
link(onEvent3,12022484:doEnum,[(735,181)(735,237)])
}
Add(ArrayEnum,4465715,763,168)
{
link(onItem,10221688:doSplit,[])
link(Array,11209163:getVar,[])
}
Add(LineBreakEx,11209163,763,140)
{
Caption="arrL"
Type=2
}
Add(ArrayRW,5800353,966,168)
{
link(onRead,6043130:doSplit,[])
link(Array,6288842:getVar,[])
}
Add(LineBreakEx,6288842,966,140)
{
Caption="arrB"
Type=2
}
Add(StrPart,10221688,917,168)
{
Char=";"
DirectEvent=0
link(onSplit,5800353:doRead,[])
link(onPart,9190251:doRead,[(957,181)(957,244)])
}
Add(ArrayRW,9190251,966,238)
{
link(onRead,12466762:doSplit,[])
link(Array,14903023:getVar,[])
}
Add(LineBreakEx,14903023,966,210)
{
Caption="arrB"
Type=2
}
Add(StrCatDelim,7073963,504,364)
{
Delimiter=";"
link(onStrCatDlm,7794246:doAdd,[])
link(Str1,8455901:Var3,[(510,341)])
link(Str2,1390174:getVar,[])
}
Add(LineBreakEx,1390174,511,329)
{
Caption="IndS"
Type=2
}
Add(LineBreakEx,1034094,595,364)
{
Caption="refr"
}
Add(MultiStrPart,6043130,1064,168)
{
Count=4
link(onSplit,1273801:doCalc,[(1106,174)(1106,208)(1052,208)(1052,223)])
}
Add(MultiStrPart,12466762,1015,238)
{
Count=4
link(onSplit,4564525:doCalc,[(1053,244)(1053,278)(1003,278)(1003,293)])
}
Add(LineBreakEx,1142656,168,245)
{
Caption="line"
Type=2
}
Add(IndexToChanel,2509035,168,280)
{
Point(Index)
link(onEvent2,15299609:In,[])
link(Index,1142656:getVar,[])
}
Add(LineBreakEx,3536623,315,721)
{
Caption="line"
Type=2
}
Add(IndexToChanel,14662768,315,756)
{
Point(Index)
link(onEvent1,2845500:doCompare,[])
link(Index,3536623:getVar,[])
}
Add(InfoTip,13507826,210,637)
{
Info=#23:Изменение позиции блока|
Frame=2
Width=582
Height=214
}
Add(InfoTip,6622573,203,868)
{
Info=#51:Получение индекса (IndS) блока под курсором или -1 |
Frame=2
Width=470
Height=291
}
Add(InfoTip,11832086,707,112)
{
Info=#25:Рисуем связи, потом блоки|
Frame=2
Width=512
Height=319
}
Add(LineBreakEx,67514,413,35)
{
Caption="line"
Type=2
}
Add(IndexToChanel,2486414,413,70)
{
Point(Index)
link(onEvent2,4154843:doSplit,[])
link(Index,67514:getVar,[])
}
Add(Img_Line,16215272,518,126)
{
Point(Point1)
Point(Point2)
link(Bitmap,416687:getVar,[])
link(Point2,12190381:Point,[])
}
Add(LineBreakEx,416687,518,28)
{
Caption="bmp"
Type=2
}
Add(LineBreakEx,13408932,532,42)
{
Caption="mX"
Type=2
}
Add(LineBreakEx,9703122,539,56)
{
Caption="mY"
Type=2
}
Add(PointXY,12190381,532,77)
{
link(X,13408932:getVar,[])
link(Y,9703122:getVar,[])
}
Add(LineBreakEx,9502902,469,49)
{
Caption="SrtS"
Type=2
}
Add(MathParse,11480246,469,126)
{
DataCount=4
MathStr="%1 + %3 div 2 + (%2 + %4 div 2) * 65536"
link(onResult,16215272:doDraw,[])
link(X1,4154843:Part1,[])
link(X2,4154843:Part2,[])
link(X3,4154843:Part3,[])
link(X4,4154843:Part4,[])
}
Add(MultiStrPart,4154843,469,77)
{
Count=4
link(onSplit,11480246:doCalc,[(511,83)(511,117)(457,117)(457,132)])
link(Str,9502902:getVar,[])
}
Add(LineBreakEx,1434951,371,826)
{
Caption="refr"
}
Add(LineBreakEx,6429415,287,784)
{
Caption="line"
Type=2
}
Add(IndexToChanel,11391387,287,819)
{
Point(Index)
link(onEvent1,15568657:doWork,[(345,825)(345,811)])
link(onEvent2,1434951:doWork,[])
link(Index,6429415:getVar,[])
}
При правом клике по полю или блоку выпадает список.
Зажав блок курсором его можно передвинуть вместе со связями.

Редактировалось 2 раз(а), последний 2020-09-30 20:53:16
карма: 11

1
Голосовали:Poputchik
Ответов: 16884
Рейтинг: 1239
#7: 2020-10-01 14:47:01 ЛС | профиль | цитата
Artie писал(а):
1. Думаю можно обойтись одной формой (прямоугольник), но с возможностью менять размер и цвет;
Есть стандартный набор фигур.

https://grapholite.ru/flowcharts/
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 4
Рейтинг: 0
#8: 2020-10-02 07:41:07 ЛС | профиль | цитата
sla8a писал(а):

Вот такую заготовку можно доработать:
При правом клике по полю или блоку выпадает список.
Зажав блок курсором его можно передвинуть вместе со связями.

Редактировалось 2 раз(а), последний 2020-09-30 20:53:16

Сударь, огромное приогромное спасибо! Эх, мне бы так же шарить как вы
Если это Вас не сильно обременит, не могли бы вы подсказать еще как сохранение и загрузку в приложенной вами схеме реализовать.
Спасибо!
Tad писал(а):

Artie писал(а):
1. Думаю можно обойтись одной формой (прямоугольник), но с возможностью менять размер и цвет;
Есть стандартный набор фигур.

https://grapholite.ru/flowcharts/

Спасибо за наводку, но тут нужно не только строить блок-схему но и тут же считать введенные данные по связям между блоками.
То есть по блок-схеме будет строиться математическая модель.
карма: 0

0
Ответов: 2236
Рейтинг: 676
#9: 2020-10-02 09:00:30 ЛС | профиль | цитата
Artie писал(а):
как сохранение и загрузку в приложенной вами схеме реализовать.

Есть два списка строк. В одном хранится данные о блоке в формате(x, y, ширина, высота, цвет, текст), а во втором данные о связях между блоками в форматеиндекс блока начала связи, индекс блока конца связи).
Сохранить эти два списка можно как в обычный текстовой файл, так и в ini файл.
карма: 11

0
Ответов: 4
Рейтинг: 0
#10: 2020-10-05 06:02:55 ЛС | профиль | цитата
sla8a писал(а):

Artie писал(а):
как сохранение и загрузку в приложенной вами схеме реализовать.

Есть два списка строк. В одном хранится данные о блоке в формате(x, y, ширина, высота, цвет, текст), а во втором данные о связях между блоками в форматеиндекс блока начала связи, индекс блока конца связи).
Сохранить эти два списка можно как в обычный текстовой файл, так и в ini файл.

Прошу простить, не сразу въехал в предложенный Вами алгоритм. Теперь вижу каким образом эти списки строк "прикручены" к схеме и как их можно использовать для сохранения/загрузки. Спасибо!

Плюсанул бы всем за помощь если бы не отсутствие рейтинга
карма: 0

0
Ответов: 413
Рейтинг: 57
#11: 2020-10-11 09:45:05 ЛС | профиль | цитата
sla8a, возможно ли реализовать добавление на поле сложных фигур (например контур радиодетали с контактными площадками с возможностью их поворота) и нет ли примера?

Может у кого есть набросок трассировщика плат в HiAsm (привязка линий к сетке, рисование линий под углом), чтоб с нуля не начинать.

Редактировалось 1 раз(а), последний 2020-10-11 10:50:15
карма: 0

0
Ответов: 2236
Рейтинг: 676
#12: 2020-10-11 21:19:14 ЛС | профиль | цитата
Poputchik, да любые фигуры можно, только нужно сразу определится какие фигуры будут и как будут тянутся связи. С поворотом тоже не должно быть проблем. По поводу примера, то тот что я выложил выше более чем достаточен для понимания как сделать. Конкретно под такую задачу у меня нет.
карма: 11

0
Ответов: 413
Рейтинг: 57
#13: 2020-10-11 22:19:55 ЛС | профиль | цитата
По поводу примера, то тот что я выложил выше более чем достаточен для понимания как сделать.

Кое что получается, но это только самое начало и то только работа с линией:
https://forum.hiasm.com/getfile/39154
Работают кнопки: настройки, рисовать линию, перетаскивать узел, сетка, ПКМ.

Но пока очень много вопросов. Как сделать, чтоб перерисовка сетки меньше ресурсов потребляла? Можно при рисовании линии к сетке привязаться? Как создать радиодеталь и потом перетянуть на поле? В какой файл всё это потом записывать (может Sqlite нужно использовать, для большей скорости обработки данных?)?

Может кто, что полезного по данной теме подскажет?

Редактировалось 2 раз(а), последний 2020-10-11 22:51:10
карма: 0

0
Ответов: 2236
Рейтинг: 676
#14: 2020-10-11 22:34:43 ЛС | профиль | цитата
Poputchik писал(а):
https://forum.hiasm.com/getfile/39153
exe
карма: 11

0
Ответов: 413
Рейтинг: 57
#15: 2020-10-11 22:50:55 ЛС | профиль | цитата
exe


Ошибся! Исправил (sha):
https://forum.hiasm.com/getfile/39154

Редактировалось 2 раз(а), последний 2020-10-12 20:31:41
карма: 0

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