Вверх ↑
Этот топик читают: Гость
Ответов: 9906
Рейтинг: 351
#406: 2017-12-10 12:32:46 ЛС | профиль | цитата
Netspirit писал(а):
видимо, что-то

Ну так про это "ЧТО-ТО" я тебе и говорю: в результате паразитной "обратной отдачи"
_hi_OnEvent может испортить свой входной аргумент (и, следовательно, угробить ссылку на хвост, необходимый к уничтожению).
Это только для TData overload-версии _hi_OnEvent.

А вот _hi_OnEvent_ - это его же версия с буферизацией.
Решение то было в замене _hi_OnEvent на _hi_OnEvent_.
А замена @OutDT на FreeDT - это просто так, для общности картины...

До меня тоже, пока дошло - чуть веру в закон Ома не потерял...

Редактировалось 2 раз(а), последний 2017-12-11 13:37:55
карма: 9

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#407: 2017-12-10 16:02:04 ЛС | профиль | цитата
Для справки: существует еще один тип цепочных данных MT -- TMT. Первый раз он стал применяться в компоненте NetInterfaces
карма: 22

0
Ответов: 9906
Рейтинг: 351
#408: 2017-12-11 00:34:28 ЛС | профиль | цитата
nesco писал(а):
существует еще один тип цепочных данных MT -- TMT

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

Так что, к списку коллеги Netspirit-а следует прибавить еще кое какие элементы (и вычесть MathParse, конечно же)...
Использующее упомянутую TMT-технику

Редактировалось 3 раз(а), последний 2017-12-11 00:40:02
карма: 9

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#409: 2017-12-11 01:37:36 ЛС | профиль | цитата
Galkov писал(а):
Что-то мне кажется, что эта технология тоже не защищена от вышеописанной паразитной "обратной отдачи"

Да это я как справку для Netspirit-a привел. Просто иногда это тип и его методы удобно использовать. Хотя мне больше нравится "ручная" организация MT-цепи.
карма: 22

0
Ответов: 4628
Рейтинг: 749
#410: 2017-12-11 12:01:31 ЛС | профиль | цитата
Galkov писал(а):
Решение то было в замене _hi_OnEvent на _hi_OnEvent_.
Блин, ну и как с этим жить? Кто так обзывает методы? Я ведь не заметил, что дело в имени метода, а не в аргументе.
карма: 26

0
Ответов: 9906
Рейтинг: 351
#411: 2017-12-11 13:33:30 ЛС | профиль | цитата
Netspirit писал(а):
Кто так обзывает методы?

Может и я.... Точно не помню.
Но это было очень давно. Я был крайне мал, я был дитя

--- Добавлено в 2017-12-11 14:08:26

Galkov писал(а):
Что-то мне кажется, что эта технология тоже не защищена от вышеописанной паразитной "обратной отдачи"

Если в примере Netspirit-а применить технику TMT:
Add(InlineCode,16037272,518,91)
{
WorkPoints=#6:doWork|
EventPoints=#8:onResult|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|4:uses|28: Windows, KOL, Share, Debug;|0:|4:type|29: THiAsmClass = class(TDebug)|11: private|0:|10: public|29: onResult: THI_Event; |54: procedure doWork(var _Data: TData; Index: Word);|6: end;|0:|14:implementation|0:|3:var|19: Counter: Integer;|0:|60:procedure THiAsmClass.doWork(var _Data: TData; Index: Word);|3:var|14: OutDT:TData;|9: mt:PMT;|5:begin|15: Inc(Counter);|2: |35: // Хочу выдать в поток 2 элемента|28: dtInteger(OutDT, Counter);|23: mt := mt_make(OutDT);|34: mt_string(mt, Int2Str(Counter));|0:|31: _hi_OnEvent(onResult, OutDT);|2: |14: mt_free(mt);|4:end;|0:|0:|0:|0:|4:end.|
}
То это дело жрет память так же, как и в оригинальном примере из этого поста.
И, аналогичным образом, чинится заменой _hi_OnEvent на _hi_OnEvent_.

Т.е., утверждение из разряда "кажется" переходит в разряд экспериментального факта.

Редактировалось 5 раз(а), последний 2017-12-11 14:11:45
карма: 9

0
Ответов: 537
Рейтинг: 14
#412: 2017-12-13 23:14:28 ЛС | профиль | цитата
Подскажите как посчитать тэги div. Есть форма и в ней RadioButton-ны, нужно нажать или выбрать тот, который с id=gmcr_imgc3.
Add(MainForm,2953706,14,133)
{
link(onCreate,4976115:doData,[])
}
Add(WebBrowser,5678376,231,119)
{
Width=712
Height=549
Align=5
URL=""
Silent=0
Point(PHandle)
Point(doFromText)
}
Add(DoData,4976115,91,147)
{
Data=String(https://www.google.com/advanced_image_search)
link(onEventData,5678376:doFromText,[])
link(Data,8968811:Text,[])
}
Add(StrList,8968811,91,77)
{
Strings=#45:<form><label for="imgc">Фильтр цвета:</label>|52:<input value="" id="imgc" name="imgc" type="hidden">|60:<input value="" id="imgcolor" name="imgcolor" type="hidden">|43:<div id="color-panel" style="display:none">|59:<div id="gmcr_imgc1" style="display:table-cell">любые</div>|61:<div id="gmcr_imgc2" style="display:table-cell">цветные</div>|65:<div id="gmcr_imgc3" style="display:table-cell">черно-белые</div>|71:<div id="gmcr_imgc4" style="display:table-cell">Прозрачные</div></form>|
}
Add(Button,14453633,161,189)
{
Left=10
Top=105
Width=50
Caption="Клик"
link(onClick,11984697:Zap,[])
}
Add(InlineCode,11984697,245,189)
{
@Hint=#13:Клик google 1|
WorkPoints=#3:Zap|
DataPoints=#1:h|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|61:uses kol,Share,Debug,windows,ActiveX,KOLSHDocVw,Win,ShellApi;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|16: wb:PControl;|9: public|16: h:THI_Event;|4: |42:procedure Zap(var Data:TData; index:word);|4: |5: end;|0:|15:implementation |0:|4:type|31: TKOLWebBrowser = PWebBrowser;|31: PKOLWebBrowser = PWebBrowser;|2: |26:procedure THiAsmClass.Zap;|5:begin|61: if not assigned (wb) then wb := PControl(ToIntegerEvent(h));|74: if PKOLWebBrowser(wb).OleObject.Document.all.tags('FORM').Length > 0 then|5:begin|81: PKOLWebBrowser(WB).OleObject.Document.getElementsByTagName('div').item(3).Click;|5: end;|4:end;|0:|4:end.|
link(h,5678376:PHandle,[])
}

Код страницы не весь и переключатели не видно. Как в схеме, в теории посчитать тэги div и нажать на тот, где есть id=gmcr_imgc3

Поправьте схему
Add(InlineCode,9377786,322,168)
{
WorkPoints=#5:doSet|
DataPoints=#1:h|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|32:uses kol,Share,Debug,KOLSHDocVw;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|16: wb:PControl;|9: public|16: h:THI_Event;|0:|46: procedure doSet(var dt:TData; index:word);|0:|5: end;|0:|14:implementation|0:|4:type|31: TKOLWebBrowser = PWebBrowser;|31: PKOLWebBrowser = PWebBrowser;|0:|28:procedure THiAsmClass.doSet;|16:var i,k:integer;|21: FormItem:Variant;|5:begin|61: if not assigned (wb) then wb := PControl(ToIntegerEvent(h));|79: if PKOLWebBrowser(wb).OleObject.Document.all.tags('div').Length = 0 then exit;|68: for i:=0 to PKOLWebBrowser(wb).OleObject.Document.forms.Length-1 do|7: begin|67: FormItem := PKOLWebBrowser(wb).OleObject.Document.forms.Item(i);|35: for k:=0 to FormItem.length-1 do|49: if FormItem.Item(k).Id = 'gmcr_imgc3'.Click;|6: end;|4:end;|0:|4:end.|
link(h,5678376:PHandle,[])
}
Add(MainForm,7984657,91,112)
{
link(onCreate,4976115:doData,[])
}
Add(WebBrowser,5678376,308,98)
{
Width=712
Height=549
Align=5
URL=""
Silent=0
Point(PHandle)
Point(doFromText)
}
Add(DoData,4976115,168,126)
{
Data=String(https://www.google.com/advanced_image_search)
link(onEventData,5678376:doFromText,[])
link(Data,8968811:Text,[])
}
Add(StrList,8968811,168,56)
{
Strings=#45:<form><label for="imgc">Фильтр цвета:</label>|52:<input value="" id="imgc" name="imgc" type="hidden">|60:<input value="" id="imgcolor" name="imgcolor" type="hidden">|43:<div id="color-panel" style="display:none">|59:<div id="gmcr_imgc1" style="display:table-cell">любые</div>|61:<div id="gmcr_imgc2" style="display:table-cell">цветные</div>|65:<div id="gmcr_imgc3" style="display:table-cell">черно-белые</div>|71:<div id="gmcr_imgc4" style="display:table-cell">Прозрачные</div></form>|
}
Add(Button,14453633,238,168)
{
Left=10
Top=105
Width=50
Caption="Клик"
link(onClick,9377786:doSet,[])
}


Редактировалось 2 раз(а), последний 2017-12-13 23:36:14
карма: 4

0
Ответов: 537
Рейтинг: 14
#413: 2017-12-21 23:16:20 ЛС | профиль | цитата
Так что, никто не ответит по моему вопросу
Add(InlineCode,9377786,476,301)
{
WorkPoints=#5:doSet|
DataPoints=#1:h|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|32:uses kol,Share,Debug,KOLSHDocVw;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|16: wb:PControl;|9: public|16: h:THI_Event;|0:|46: procedure doSet(var dt:TData; index:word);|0:|5: end;|0:|14:implementation|0:|4:type|31: TKOLWebBrowser = PWebBrowser;|31: PKOLWebBrowser = PWebBrowser;|0:|28:procedure THiAsmClass.doSet;|16:var i,k:integer;|21: FormItem:Variant;|5:begin|61: if not assigned (wb) then wb := PControl(ToIntegerEvent(h));|79: if PKOLWebBrowser(wb).OleObject.Document.all.tags('div').Length = 0 then exit;|68: for i:=0 to PKOLWebBrowser(wb).OleObject.Document.forms.Length-1 do|7: begin|67: FormItem := PKOLWebBrowser(wb).OleObject.Document.forms.Item(i);|35: for k:=0 to FormItem.length-1 do|49: if FormItem.Item(k).Id = 'gmcr_imgc3'.Click;|6: end;|4:end;|0:|4:end.|
}
Add(MainForm,7984657,168,182)
{
link(onCreate,4976115:doData,[])
}
Add(WebBrowser,5678376,385,168)
{
Width=712
Height=549
Align=5
URL=""
Silent=0
Point(PHandle)
Point(doFromText)
}
Add(DoData,4976115,245,196)
{
Data=String(https://www.google.com/advanced_image_search)
link(onEventData,5678376:doFromText,[])
link(Data,8968811:Text,[])
}
Add(StrList,8968811,245,126)
{
Strings=#45:<form><label for="imgc">Фильтр цвета:</label>|52:<input value="" id="imgc" name="imgc" type="hidden">|60:<input value="" id="imgcolor" name="imgcolor" type="hidden">|43:<div id="color-panel" style="display:none">|59:<div id="gmcr_imgc1" style="display:table-cell">любые</div>|61:<div id="gmcr_imgc2" style="display:table-cell">цветные</div>|65:<div id="gmcr_imgc3" style="display:table-cell">черно-белые</div>|71:<div id="gmcr_imgc4" style="display:table-cell">Прозрачные</div></form>|
}
Add(Button,14453633,315,238)
{
Left=10
Top=105
Width=50
Caption="Клик"
link(onClick,6493342:Zap,[(373,244)(373,307)])
}
Add(InlineCode,6493342,399,301)
{
@Hint=#13:Клик google 1|
WorkPoints=#3:Zap|
DataPoints=#1:h|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|61:uses kol,Share,Debug,windows,ActiveX,KOLSHDocVw,Win,ShellApi;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|16: wb:PControl;|9: public|16: h:THI_Event;|4: |46: procedure Zap(var Data:TData; index:word);|4: |5: end;|0:|15:implementation |0:|4:type|31: TKOLWebBrowser = PWebBrowser;|32: PKOLWebBrowser = PWebBrowser; |0:|26:procedure THiAsmClass.Zap;|3:var|25: ovElements: OleVariant;|13: i: Integer;|5:begin|37: wb := PControl(ToIntegerEvent(h));|80: ovElements := PKOLWebBrowser(WB).OleObject.Document.Forms.Item( 0 ).Elements;|43: for i := 0 to ( ovElements.Length-1 ) do|76: if ( AnsiUpperCase( ovElements.Item( i ).tagName ) = 'imgcolor' ) then|76: if ( AnsiUpperCase( ovElements.Item( i ).Id ) = 'gmcr_imgc3' ) then|66: if ( ovElements.item( i ).Value = 'черно-белые' ) then|42: ovElements.Item( i ).Click;|4:end;|0:|4:end.|
link(h,5678376:PHandle,[])
}


Обще запутался и непонятные ошибки при компиляции
Тема ведь для обучения, так подскажите как надо

Мне нужно в гуле в поиске выбрать нужные переключатели, я то сделал с указанием нужного item, хочу на будущее научится искать его в коде страницы. Покажите как нужно, а то два варианта и не найдут

Вот код который сделал
Add(MainForm,2953706,7,105)
{
Width=728
Height=587
WindowsState=2
Point(onClose)
link(onCreate,13322211:doEvent1,[(47,125)(47,118)])
link(onClose,4169119:del,[(65,132)(65,118)])
}
Add(WebBrowser,5678376,273,119)
{
Width=712
Height=549
Align=5
URL=""
Silent=0
Point(PHandle)
Point(doFromText)
}
Add(DoData,4976115,140,119)
{
Data=String(https://www.google.com/advanced_image_search)
link(onEventData,5678376:doNavigate,[])
}
Add(VisualStrings,3555302,322,126)
{
Lines=#3:Кот|
Width=60
}
Add(Hub,13322211,56,112)
{
link(onEvent1,4169119:write,[(77,118)(77,111)])
link(onEvent2,4976115:doData,[])
}
Add(MultiElementEx,4169119,91,105)
{
}
BEGIN_SDK
Add(EditMultiEx,16512711,21,21)
{
WorkCount=#5:write|3:del|
Height=249
link(write,3634544:doPart,[(95,27)(95,97)])
link(del,8467764:doDeleteValue,[(42,34)(42,160)])
}
Add(Registry,8467764,154,140)
{
HKey=1
Key="SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION\"
DataType=0
Point(doDeleteValue)
link(Data,12071228:Text,[])
link(Value,3634544:Part,[])
}
Add(Application,4084507,168,42)
{
}
Add(FilePartElm,3634544,168,91)
{
Point(Part)
link(onPart,8467764:doWrite,[(207,97)(207,125)(144,125)(144,153)])
link(FileName,4084507:AppFileName,[])
}
Add(VisualStrings,12071228,154,21)
{
Lines=#5:11001|
Width=46
}
END_SDK
Add(Button,14453633,14,231)
{
Left=195
Top=65
Width=165
Caption="Отправить"
link(onClick,16188447:doEvent1,[])
}
Add(ComboBox,7552476,91,168)
{
Left=325
Top=20
Width=130
Height=21
Strings=#5:Любые|8:Портреты|10:фотографии|8:Клип-арт|19:Черно-белые рисунки|13:Анимированные|
Text="Тип"
ReadOnly=0
DropDownCount=6
Point(Index)
}
Add(ComboBox,11546339,147,168)
{
Left=460
Top=20
Width=85
Height=21
Strings=#5:Любые|7:Цветные|11:Черно-белые|10:Прозрачные|
Text="Цвет"
ReadOnly=0
DropDownCount=4
Point(Index)
}
Add(DoData,602843,105,231)
{
link(onEventData,8562839:Тип,[(212,237)(212,202)])
link(Data,7552476:Index,[])
}
Add(DoData,14115759,161,273)
{
link(onEventData,8562839:Цвет,[(240,279)(240,209)])
link(Data,11546339:Index,[])
}
Add(Hub,16188447,63,231)
{
link(onEvent1,602843:doData,[])
link(onEvent2,14115759:doData,[(119,244)(119,279)])
}
Add(MultiElementEx,8562839,287,196)
{
link(h,5678376:PHandle,[])
link(Текст,3555302:Text,[(300,167)(328,167)])
}
BEGIN_SDK
Add(EditMultiEx,2177314,21,21)
{
WorkCount=#3:Тип|4:Цвет|
DataCount=#1:h|5:Текст|4:Сайт|
Width=146
Height=123
link(Тип,7482920:doEvent,[(45,27)(45,48)])
link(Цвет,139623:doEvent1,[(31,34)(31,90)])
}
Add(IndexToChanel,8128150,70,84)
{
Count=4
link(onEvent1,3731023:Any,[])
link(onEvent2,3731023:Colored,[])
link(onEvent3,3731023:Black,[])
link(onEvent4,3731023:Transparent,[])
}
Add(IndexToChanel,7482920,70,42)
{
Count=6
link(onEvent1,3731023:img_1,[])
link(onEvent2,3731023:img_2,[])
link(onEvent3,3731023:img_3,[])
link(onEvent4,3731023:img_4,[])
link(onEvent5,3731023:img_5,[])
link(onEvent6,3731023:img_6,[])
}
Add(Hub,139623,42,84)
{
link(onEvent1,8128150:doEvent,[])
link(onEvent2,3731023:Zap,[(65,97)(65,118)])
}
Add(InlineCode,3731023,126,42)
{
@Hint=#13:Клик google 1|
WorkPoints=#36:img_1=0 Любые картинки по содержанию|16:img_2=1 Портреты|18:img_3=2 фотографии|16:img_4=3 Клип-арт|27:img_5=4 Черно-белые рисунки|21:img_6=5 Анимированные|29:Any=0 Любые картинки по цвету|17:Colored=1 Цветные|19:Black=2 Черно-белые|24:Transparent=3 Прозрачные|28:Zap=10 Заполнить и отправить|
DataPoints=#1:h|4:Name|4:Site|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|61:uses kol,Share,Debug,windows,ActiveX,KOLSHDocVw,Win,ShellApi;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|16: wb:PControl;|9: public|16: h:THI_Event;|19: Name:THI_Event;|19: Site:THI_Event;|4: |48: procedure img_1(var Data:TData; index:word);|48: procedure img_2(var Data:TData; index:word);|48: procedure img_3(var Data:TData; index:word);|48: procedure img_4(var Data:TData; index:word);|48: procedure img_5(var Data:TData; index:word);|48: procedure img_6(var Data:TData; index:word);|5: |46: procedure Any(var Data:TData; index:word);|50: procedure Colored(var Data:TData; index:word);|48: procedure Black(var Data:TData; index:word);|54: procedure Transparent(var Data:TData; index:word);|4: |46: procedure Zap(var Data:TData; index:word);|4: |5: end;|0:|15:implementation |0:|4:type|31: TKOLWebBrowser = PWebBrowser;|31: PKOLWebBrowser = PWebBrowser;|2: |28:procedure THiAsmClass.img_1;|5:begin|35: wb := PControl(ToIntegerEvent(h));|83: PKOLWebBrowser(WB).OleObject.Document.getElementById('imgtype_input').value := '';|5: end;|0:|28:procedure THiAsmClass.img_2;|5:begin|35: wb := PControl(ToIntegerEvent(h));|87: PKOLWebBrowser(WB).OleObject.Document.getElementById('imgtype_input').value := 'face';|5: end;|0:|28:procedure THiAsmClass.img_3;|5:begin|35: wb := PControl(ToIntegerEvent(h));|88: PKOLWebBrowser(WB).OleObject.Document.getElementById('imgtype_input').value := 'photo';|5: end;|0:|28:procedure THiAsmClass.img_4;|5:begin|35: wb := PControl(ToIntegerEvent(h));|90: PKOLWebBrowser(WB).OleObject.Document.getElementById('imgtype_input').value := 'clipart';|5: end;|0:|28:procedure THiAsmClass.img_5;|5:begin|35: wb := PControl(ToIntegerEvent(h));|90: PKOLWebBrowser(WB).OleObject.Document.getElementById('imgtype_input').value := 'lineart';|5: end;|0:|28:procedure THiAsmClass.img_6;|5:begin|35: wb := PControl(ToIntegerEvent(h));|91: PKOLWebBrowser(WB).OleObject.Document.getElementById('imgtype_input').value := 'animated';|5: end;|0:|77://---------------------------------------------------------------------------|0:|26:procedure THiAsmClass.Any;|5:begin|35: wb := PControl(ToIntegerEvent(h));|82: PKOLWebBrowser(WB).OleObject.Document.getElementsByTagName('div').item(92).Click;|5: end;|0:|30:procedure THiAsmClass.Colored;|5:begin|35: wb := PControl(ToIntegerEvent(h));|82: PKOLWebBrowser(WB).OleObject.Document.getElementsByTagName('div').item(95).Click;|5: end;|0:|28:procedure THiAsmClass.Black;|5:begin|35: wb := PControl(ToIntegerEvent(h));|82: PKOLWebBrowser(WB).OleObject.Document.getElementsByTagName('div').item(97).Click;|5: end;|0:|34:procedure THiAsmClass.Transparent;|5:begin|35: wb := PControl(ToIntegerEvent(h));|83: PKOLWebBrowser(WB).OleObject.Document.getElementsByTagName('div').item(100).Click;|5: end;|0:|77://---------------------------------------------------------------------------|0:|26:procedure THiAsmClass.Zap;|5:begin|35: wb := PControl(ToIntegerEvent(h));|92: PKOLWebBrowser(WB).OleObject.Document.getElementById('_dKg').value := ToStringEvent (Name);|92: PKOLWebBrowser(WB).OleObject.Document.getElementById('_SKg').value := ToStringEvent (Site);|104: PKOLWebBrowser(WB).OleObject.Document.getElementById('imgsz_input').value := 'qsvga'; // Размер 400x300|112: PKOLWebBrowser(WB).OleObject.Document.getElementsByClassName('jfk-button jfk-button-action _JQ').item(0).Click;|5: end;|0:|4:end.|
link(h,2177314:h,[(132,32)(27,32)])
link(Name,2177314:Текст,[(139,32)(34,32)])
link(Site,2177314:Сайт,[(146,32)(41,32)])
}
END_SDK


Хотя в коде наверно лучше объявить клобальную переменную wb := PControl(ToIntegerEvent(h)); Чтобы не писать каждый раз

И скажите зачем нужно в коде TKOLWebBrowser = PWebBrowser; а то немного списал и без него работает. Просто в примерах всегда так делают

Редактировалось 3 раз(а), последний 2017-12-21 23:41:02
карма: 4

0
Ответов: 4628
Рейтинг: 749
#414: 2017-12-22 12:16:09 ЛС | профиль | цитата
Поиск нужного тега в тексте - компонент BlockFind.
карма: 26

0
Ответов: 51
Рейтинг: 0
#415: 2018-08-15 12:08:01 ЛС | профиль | цитата
Есть кто живой? нужна помощь в написание кода и правильном его подключение,
в кратце суть программы это большая база данных, со многими страницами , туда заносят инфу и надо сделать условие , если машина проезжает более n количество км то должна загораться лампочка или через ленту показывать что надо к примеру ТО или замена масла , сделать на отдельной вкладке или снизу , не важно , главное должно показывать когда надо делать ТО, замену масла и тд и тп, данные про пройденные км записываются в таблицу на странице моторесурса , машин будет много.
Сама программа прикрепленна , точнее то что есть сейчас .

Add(ChildGroupBox,16594303,847,74)
{
link(onEvent1,5968126:doEvent2,[(943,80)(943,258)])
}
BEGIN_SDK
Add(EditMulti,9384139,21,21)
{
EventCount=1
WorkCount=2
Width=881
Height=585
link(doWork1,10546403:doBringToFront,[(28,27)(28,111)])
}
Add(GroupBox,10546403,35,105)
{
Left=220
Top=35
Width=775
Height=450
Caption="Персонал"
Point(doBringToFront)
Point(doSendToBack)
}
Add(MultiStrPart,16530701,555,319)
{
Char="\9"
Count=1
link(onSplit,13977232:doString,[])
}
Add(Button,722977,37,252)
{
Left=265
Top=34
Width=100
Font=[Broadway,12,0,8421504,0]
Caption="Завантажити"
link(onClick,6261690:doOpen,[(85,258)(85,192)])
}
Add(Button,9298806,219,273)
{
Left=375
Top=34
Width=70
Font=[Broadway,12,0,8421504,0]
Caption="Очистить"
link(onClick,6451170:doClear,[(361,279)(361,164)])
}
Add(StringTableMT,6451170,471,151)
{
Left=10
Top=55
Width=775
Height=320
Columns=#4:№=25|20:Військове звання=150|7:ПІБ=200|27:Серія,номер посвідчення=150|20:Дата та № наказу=150|0:|
StrDelimiter="\9"
Redaction=0
IconsCheck=[]
MiscIcons=[]
Icons=[]
Point(doMT_Add)
Point(Strings)
Point(onLineChange)
Point(Index)
link(onLineChange,9248840:doRead,[])
}
Add(Button,16355538,303,151)
{
Left=10
Top=34
Width=120
Caption="Добавить строку"
link(onClick,11826088:doOperation,[])
}
Add(Math,11826088,352,151)
{
Op2=1
ResultType=0
link(onResult,11892657:doEvent1,[])
link(Op1,6451170:Count,[(358,132)(418,132)(418,215)(477,215)])
}
Add(Edit,6924426,93,130)
{
Left=60
Top=13
Width=465
Text="MyDataBase1.db"
link(onEnter,9384139:onEvent1,[(513,143)(513,27)])
}
Add(Label,5399162,142,130)
{
Left=10
Top=13
Width=48
Height=17
Caption="Имя БД:"
}
Add(DS_SQLite,6261690,100,186)
{
Name="db"
link(onOpen,5124064:doEvent1,[])
link(FileName,6924426:Text,[(106,174)(99,174)])
}
Add(DSC_Exec,11620320,163,235)
{
SQL="CREATE TABLE table2 (number int, firstname char, lastname char, serial char, date char)"
DSManager="db"
}
Add(DSC_Exec,8618512,520,95)
{
DSManager="db"
}
Add(ArrayRW,9248840,603,158)
{
link(onRead,4885776:doSplit,[])
link(Array,12011409:Var3,[(609,142)(553,142)(553,216)])
}
Add(Hub,11892657,408,151)
{
link(onEvent1,6451170:doAdd,[])
link(onEvent2,2342500:doString,[(446,164)(446,101)])
}
Add(FormatStr,2342500,471,95)
{
DataCount=1
Mask="INSERT INTO table2 (number) VALUES (%1)"
link(onFString,8618512:doExec,[])
}
Add(DSC_Query,12224532,268,200)
{
SQL="SELECT * FROM table2"
DSManager="db"
link(onQuery,6451170:doMT_Add,[(386,206)(386,192)])
}
Add(DSC_Exec,3428744,695,228)
{
DSManager="db"
}
Add(FormatStr,4361700,646,228)
{
DataCount=5
Mask="UPDATE table2 SET firstname='%2', lastname='%3', serial='%4', date='%5' WHERE number=%1"
link(onFString,3428744:doExec,[])
link(Str1,4885776:Part1,[])
link(Str2,4885776:Part2,[])
link(Str3,4885776:Part3,[])
link(Str4,4885776:Part4,[])
link(Str5,4885776:Part5,[])
}
Add(MultiStrPart,4885776,646,158)
{
Char="\9"
Count=5
link(onSplit,4361700:doString,[(690,164)(690,199)(634,199)(634,234)])
}
Add(Hub,5124064,149,186)
{
link(onEvent1,12224532:doQuery,[(215,192)(215,206)])
link(onEvent2,11620320:doExec,[])
}
Add(Button,6320311,289,319)
{
Left=135
Top=34
Width=120
Caption="Удалить строку"
link(onClick,8987325:doEvent1,[])
}
Add(Hub,8987325,345,319)
{
link(onEvent1,12390890:doRead,[])
link(onEvent2,10031616:doData,[])
}
Add(DoData,10031616,387,326)
{
link(onEventData,6451170:doDelete,[(445,332)(445,171)])
link(Data,6296645:Var1,[(393,265)])
}
Add(DSC_Exec,12949506,653,319)
{
DSManager="db"
}
Add(FormatStr,13977232,604,319)
{
DataCount=1
Mask="DELETE FROM table2 WHERE number=%1"
link(onFString,12949506:doExec,[])
link(Str1,16530701:Part1,[(610,307)(586,307)(586,363)(561,363)])
}
Add(ArrayRW,12390890,506,319)
{
link(onRead,16530701:doSplit,[])
link(Array,12011409:Var2,[])
link(Index,6296645:Var2,[(519,294)(463,294)])
}
Add(GetDataEx,12011409,506,211)
{
Angle=3
link(Data,6451170:Strings,[(491,216)])
}
Add(GetDataEx,6296645,457,260)
{
Angle=1
link(Data,6451170:Index,[(498,265)])
}
END_SDK
Add(TabControl,8774474,175,203)
{
Left=215
Top=6
Width=735
Height=440
Tabs=#10:Інформація|8:Персонал|2:ТО|4:Шини|3:АКБ|5:Масло|18:Охолоджуюча рідина|15:Тормозна рідина|3:ЗІП|10:Моторесурс|
Bitmaps=[]
Buttons=0
HotTrack=0
Point(PageTab)
link(onChange,4412880:doEvent,[(231,220)(340,220)(556,220)(556,258)])
}
Add(ChildGroupBox,3392,847,116)
{
link(onEvent1,5968126:doEvent3,[(943,122)(943,265)])
}
BEGIN_SDK
Add(EditMulti,594006,-14,14)
{
EventCount=1
WorkCount=2
Width=783
Height=585
link(doWork1,14145463:doBringToFront,[(77,20)(77,111)])
link(doWork2,8670019:doText,[(29,27)(29,178)])
}
Add(GroupBox,14145463,35,105)
{
Left=220
Top=35
Width=775
Height=450
Caption="ТО"
Point(doBringToFront)
}
Add(MultiStrPart,6596111,534,361)
{
Char="\9"
Count=1
link(onSplit,12549810:doString,[])
}
Add(Button,10578518,16,294)
{
Left=265
Top=34
Width=100
Font=[Broadway,12,0,8421504,0]
Caption="Завантажити"
link(onClick,9742640:doOpen,[(64,300)(64,234)])
}
Add(Button,8792157,198,315)
{
Left=375
Top=34
Width=70
Font=[Broadway,12,0,8421504,0]
Caption="Очистить"
link(onClick,10156469:doClear,[(340,321)(340,206)])
}
Add(StringTableMT,10156469,450,193)
{
Left=10
Top=55
Width=775
Height=320
Columns=#4:№=25|19:Дата проведення=150|10:Вид ТО=150|23:Показник спідометру=150|19:Висновок про ТО=200|0:|
StrDelimiter="\9"
Redaction=0
IconsCheck=[]
MiscIcons=[]
Icons=[]
Point(doMT_Add)
Point(Strings)
Point(onLineChange)
Point(Index)
link(onLineChange,7660174:doRead,[])
}
Add(Button,12281969,282,193)
{
Left=10
Top=34
Width=120
Caption="Добавить строку"
link(onClick,7952942:doOperation,[])
}
Add(Math,7952942,331,193)
{
Op2=1
ResultType=0
link(onResult,9388554:doEvent1,[])
link(Op1,10156469:Count,[(337,174)(397,174)(397,257)(456,257)])
}
Add(Edit,8670019,72,172)
{
Left=60
Top=13
Width=465
Text="MyDataBase1.db"
link(onEnter,594006:onEvent1,[(436,185)(436,20)])
}
Add(Label,10005151,121,172)
{
Left=10
Top=13
Width=48
Height=17
Caption="Имя БД:"
}
Add(DS_SQLite,9742640,79,228)
{
Name="db"
link(onOpen,12589275:doEvent1,[])
link(FileName,8670019:Text,[(85,216)(78,216)])
}
Add(DSC_Exec,16276188,142,277)
{
SQL="CREATE TABLE table3 (number int, firstname char, lastname char, date char, conclusion char)"
DSManager="db"
}
Add(DSC_Exec,3063644,499,137)
{
DSManager="db"
}
Add(ArrayRW,7660174,582,200)
{
link(onRead,2536623:doSplit,[])
link(Array,355376:Var3,[(588,184)(532,184)(532,258)])
}
Add(Hub,9388554,387,193)
{
link(onEvent1,10156469:doAdd,[])
link(onEvent2,6135054:doString,[(425,206)(425,143)])
}
Add(FormatStr,6135054,450,137)
{
DataCount=1
Mask="INSERT INTO table3 (number) VALUES (%1)"
link(onFString,3063644:doExec,[])
}
Add(DSC_Query,3811334,247,242)
{
SQL="SELECT * FROM table3"
DSManager="db"
link(onQuery,10156469:doMT_Add,[(365,248)(365,234)])
}
Add(DSC_Exec,13779534,674,270)
{
DSManager="db"
}
Add(FormatStr,2197243,625,270)
{
DataCount=5
Mask="UPDATE table3 SET firstname='%2', lastname='%3', date='%4', conclusion='%5' WHERE number=%1"
link(onFString,13779534:doExec,[])
link(Str1,2536623:Part1,[])
link(Str2,2536623:Part2,[])
link(Str3,2536623:Part3,[])
link(Str4,2536623:Part4,[])
link(Str5,2536623:Part5,[])
}
Add(MultiStrPart,2536623,625,200)
{
Char="\9"
Count=5
link(onSplit,2197243:doString,[(669,206)(669,241)(613,241)(613,276)])
}
Add(Hub,12589275,128,228)
{
link(onEvent1,3811334:doQuery,[(194,234)(194,248)])
link(onEvent2,16276188:doExec,[])
}
Add(Button,2956267,268,361)
{
Left=135
Top=34
Width=120
Caption="Удалить строку"
link(onClick,6767165:doEvent1,[])
}
Add(Hub,6767165,324,361)
{
link(onEvent1,12972110:doRead,[])
link(onEvent2,361708:doData,[])
}
Add(DoData,361708,366,368)
{
link(onEventData,10156469:doDelete,[(415,374)(415,211)(444,211)])
link(Data,7895740:Var1,[(372,307)])
}
Add(DSC_Exec,12366266,632,361)
{
DSManager="db"
}
Add(FormatStr,12549810,583,361)
{
DataCount=1
Mask="DELETE FROM table3 WHERE number=%1"
link(onFString,12366266:doExec,[])
link(Str1,6596111:Part1,[(589,349)(565,349)(565,405)(540,405)])
}
Add(ArrayRW,12972110,485,361)
{
link(onRead,6596111:doSplit,[])
link(Array,355376:Var2,[])
link(Index,7895740:Var2,[(498,336)(442,336)])
}
Add(GetDataEx,355376,485,253)
{
Angle=3
link(Data,10156469:Strings,[(470,258)])
}
Add(GetDataEx,7895740,436,302)
{
Angle=1
link(Data,10156469:Index,[(477,307)])
}
END_SDK
Add(ChildGroupBox,13958430,845,158)
{
link(onEvent1,5968126:doEvent4,[(943,164)(943,272)])
}
BEGIN_SDK
Add(EditMulti,11052900,21,21)
{
EventCount=1
WorkCount=2
Width=769
Height=571
link(doWork1,7766036:doBringToFront,[(28,27)(28,111)])
link(doWork2,2042301:doText,[(64,34)(64,136)])
}
Add(GroupBox,7766036,35,105)
{
Left=220
Top=35
Width=775
Height=450
Caption="Шини"
Point(doBringToFront)
}
Add(MultiStrPart,164653,569,319)
{
Char="\9"
Count=1
link(onSplit,16206179:doString,[])
}
Add(Button,10697705,51,252)
{
Left=265
Top=34
Width=100
Font=[Broadway,12,0,8421504,0]
Caption="Завантажити"
link(onClick,11438517:doOpen,[(99,258)(99,192)])
}
Add(Button,765990,233,273)
{
Left=375
Top=34
Width=70
Font=[Broadway,12,0,8421504,0]
Caption="Очистить"
link(onClick,12222526:doClear,[(375,279)(375,164)])
}
Add(StringTableMT,12222526,485,151)
{
Left=10
Top=55
Width=775
Height=320
Columns=#4:№=25|20:Заводсткий номер=150|10:Розмір=100|18:Завод-виробник=150|21:Дата виготовлення=150|31:Дата встановлення та пробіг=250|25:Дата зняття та пробіг=250|18:Причина зняття=200|0:|0:|
StrDelimiter="\9"
Redaction=0
IconsCheck=[]
MiscIcons=[]
Icons=[]
Point(doMT_Add)
Point(Strings)
Point(onLineChange)
Point(Index)
link(onLineChange,2912116:doRead,[])
}
Add(Button,1627946,317,151)
{
Left=10
Top=34
Width=120
Caption="Добавить строку"
link(onClick,11123210:doOperation,[])
}
Add(Math,11123210,366,151)
{
Op2=1
ResultType=0
link(onResult,1709848:doEvent1,[])
link(Op1,12222526:Count,[(372,132)(432,132)(432,215)(491,215)])
}
Add(Edit,2042301,107,130)
{
Left=60
Top=13
Width=465
Text="MyDataBase1.db"
link(onEnter,11052900:onEvent1,[(465,143)(465,27)])
}
Add(Label,14593757,156,130)
{
Left=10
Top=13
Width=48
Height=17
Caption="Имя БД:"
}
Add(DS_SQLite,11438517,114,186)
{
Name="db"
link(onOpen,69171:doEvent1,[])
link(FileName,2042301:Text,[(120,174)(113,174)])
}
Add(DSC_Exec,5760494,177,235)
{
SQL="CREATE TABLE table4 (number int, firstname char, lastname char, factory char, date char, install char, remove char, cause char)"
DSManager="db"
}
Add(DSC_Exec,2306334,534,95)
{
DSManager="db"
}
Add(ArrayRW,2912116,617,158)
{
link(onRead,4873003:doSplit,[])
link(Array,8100482:Var3,[(623,142)(567,142)(567,216)])
}
Add(Hub,1709848,422,151)
{
link(onEvent1,12222526:doAdd,[])
link(onEvent2,13982991:doString,[(460,164)(460,101)])
}
Add(FormatStr,13982991,485,95)
{
DataCount=1
Mask="INSERT INTO table4 (number) VALUES (%1)"
link(onFString,2306334:doExec,[])
}
Add(DSC_Query,15845815,282,200)
{
SQL="SELECT * FROM table4"
DSManager="db"
link(onQuery,12222526:doMT_Add,[(400,206)(400,192)])
}
Add(DSC_Exec,623392,744,228)
{
DSManager="db"
}
Add(FormatStr,13284577,660,228)
{
DataCount=8
Mask="UPDATE table4 SET firstname='%2', lastname='%3', factory='%4', date='%5', install='%6', remove='%7', cause='%8' WHERE number=%1"
link(onFString,623392:doExec,[])
link(Str1,4873003:Part1,[])
link(Str2,4873003:Part2,[])
link(Str3,4873003:Part3,[])
link(Str4,4873003:Part4,[])
link(Str5,4873003:Part5,[])
link(Str6,4873003:Part6,[])
link(Str7,4873003:Part7,[])
link(Str8,4873003:Part8,[])
}
Add(MultiStrPart,4873003,660,158)
{
Char="\9"
Count=8
link(onSplit,13284577:doString,[(704,164)(704,199)(648,199)(648,234)])
}
Add(Hub,69171,163,186)
{
link(onEvent1,15845815:doQuery,[(229,192)(229,206)])
link(onEvent2,5760494:doExec,[])
}
Add(Button,15015739,303,319)
{
Left=135
Top=34
Width=120
Caption="Удалить строку"
link(onClick,5234139:doEvent1,[])
}
Add(Hub,5234139,359,319)
{
link(onEvent1,8789522:doRead,[])
link(onEvent2,3503678:doData,[])
}
Add(DoData,3503678,401,326)
{
link(onEventData,12222526:doDelete,[(459,332)(459,171)])
link(Data,1425860:Var1,[(407,265)])
}
Add(DSC_Exec,16768126,667,319)
{
DSManager="db"
}
Add(FormatStr,16206179,618,319)
{
DataCount=1
Mask="DELETE FROM table4 WHERE number=%1"
link(onFString,16768126:doExec,[])
link(Str1,164653:Part1,[(624,307)(600,307)(600,363)(575,363)])
}
Add(ArrayRW,8789522,520,319)
{
link(onRead,164653:doSplit,[])
link(Array,8100482:Var2,[])
link(Index,1425860:Var2,[(533,294)(477,294)])
}
Add(GetDataEx,8100482,520,211)
{
Angle=3
link(Data,12222526:Strings,[(505,216)])
}
Add(GetDataEx,1425860,471,260)
{
Angle=1
link(Data,12222526:Index,[(512,265)])
}
END_SDK
Add(ChildGroupBox,12437118,846,207)
{
link(onEvent1,5968126:doEvent5,[(943,213)(943,279)])
}
BEGIN_SDK
Add(EditMulti,2678438,21,21)
{
EventCount=1
WorkCount=2
Width=797
Height=599
link(doWork1,11109616:doBringToFront,[(28,27)(28,111)])
link(doWork2,12530325:doText,[(57,34)(57,136)])
}
Add(GroupBox,11109616,35,105)
{
Left=220
Top=35
Width=775
Height=450
Caption="АКБ"
Point(doBringToFront)
}
Add(MultiStrPart,16078728,555,319)
{
Char="\9"
Count=1
link(onSplit,7767836:doString,[])
}
Add(Button,11203241,37,252)
{
Left=265
Top=34
Width=100
Font=[Broadway,12,0,8421504,0]
Caption="Завантажити"
link(onClick,1541997:doOpen,[(85,258)(85,192)])
}
Add(Button,4458194,219,273)
{
Left=375
Top=34
Width=70
Font=[Broadway,12,0,8421504,0]
Caption="Очистить"
link(onClick,1489459:doClear,[(361,279)(361,164)])
}
Add(StringTableMT,1489459,471,151)
{
Left=10
Top=55
Width=775
Height=320
Columns=#4:№=25|13:№ батареї=100|17:Марка батареї=150|18:Завод-виробник=150|21:Дата виготовлення=150|29:Приведення у робочий стан=200|16:Встановлення=150|12:Дата КТЦ=150|26:Дата та причина зняття=250|
StrDelimiter="\9"
Redaction=0
IconsCheck=[]
MiscIcons=[]
Icons=[]
Point(doMT_Add)
Point(Strings)
Point(onLineChange)
Point(Index)
link(onLineChange,5757406:doRead,[])
}
Add(Button,8590332,303,151)
{
Left=10
Top=34
Width=120
Caption="Добавить строку"
link(onClick,2138464:doOperation,[])
}
Add(Math,2138464,352,151)
{
Op2=1
ResultType=0
link(onResult,3796150:doEvent1,[])
link(Op1,1489459:Count,[(358,132)(418,132)(418,215)(477,215)])
}
Add(Edit,12530325,93,130)
{
Left=60
Top=13
Width=465
Text="MyDataBase1.db"
link(onEnter,2678438:onEvent1,[(471,143)(471,27)])
}
Add(Label,598003,142,130)
{
Left=10
Top=13
Width=48
Height=17
Caption="Имя БД:"
}
Add(DS_SQLite,1541997,100,186)
{
Name="db"
link(onOpen,4580828:doEvent1,[])
link(FileName,12530325:Text,[(106,174)(99,174)])
}
Add(DSC_Exec,15987716,163,235)
{
SQL="CREATE TABLE table5 (number int, firstname char, lastname char, factory char, date char, state char, installation char, training char, cause char)"
DSManager="db"
}
Add(DSC_Exec,16705274,520,95)
{
DSManager="db"
}
Add(ArrayRW,5757406,603,158)
{
link(onRead,11663236:doSplit,[])
link(Array,12674698:Var3,[(609,142)(553,142)(553,216)])
}
Add(Hub,3796150,408,151)
{
link(onEvent1,1489459:doAdd,[])
link(onEvent2,164066:doString,[(446,164)(446,101)])
}
Add(FormatStr,164066,471,95)
{
DataCount=1
Mask="INSERT INTO table5 (number) VALUES (%1)"
link(onFString,16705274:doExec,[])
}
Add(DSC_Query,3556222,268,200)
{
SQL="SELECT * FROM table5"
DSManager="db"
link(onQuery,1489459:doMT_Add,[(386,206)(386,192)])
}
Add(DSC_Exec,1996129,772,228)
{
DSManager="db"
}
Add(FormatStr,12564212,646,228)
{
DataCount=9
Mask="UPDATE table5 SET firstname='%2', lastname='%3',factory='%4', date='%5', state='%6' , installation='%7', training='%8', cause='%9' WHERE number=%1"
link(onFString,1996129:doExec,[])
link(Str1,11663236:Part1,[])
link(Str2,11663236:Part2,[])
link(Str3,11663236:Part3,[])
link(Str4,11663236:Part4,[])
link(Str5,11663236:Part5,[])
link(Str6,11663236:Part6,[])
link(Str7,11663236:Part7,[])
link(Str8,11663236:Part8,[])
link(Str9,11663236:Part9,[])
}
Add(MultiStrPart,11663236,646,158)
{
Char="\9"
Count=9
link(onSplit,12564212:doString,[(690,164)(690,199)(634,199)(634,234)])
}
Add(Hub,4580828,149,186)
{
link(onEvent1,3556222:doQuery,[(215,192)(215,206)])
link(onEvent2,15987716:doExec,[])
}
Add(Button,16054055,289,319)
{
Left=135
Top=34
Width=120
Caption="Удалить строку"
link(onClick,6925697:doEvent1,[])
}
Add(Hub,6925697,345,319)
{
link(onEvent1,3491835:doRead,[])
link(onEvent2,7449784:doData,[])
}
Add(DoData,7449784,387,326)
{
link(onEventData,1489459:doDelete,[(445,332)(445,171)])
link(Data,12358231:Var1,[(393,265)])
}
Add(DSC_Exec,7579152,653,319)
{
DSManager="db"
}
Add(FormatStr,7767836,604,319)
{
DataCount=1
Mask="DELETE FROM table5 WHERE number=%1"
link(onFString,7579152:doExec,[])
link(Str1,16078728:Part1,[(610,307)(586,307)(586,363)(561,363)])
}
Add(ArrayRW,3491835,506,319)
{
link(onRead,16078728:doSplit,[])
link(Array,12674698:Var2,[])
link(Index,12358231:Var2,[(519,294)(463,294)])
}
Add(GetDataEx,12674698,506,211)
{
Angle=3
link(Data,1489459:Strings,[(491,216)])
}
Add(GetDataEx,12358231,457,260)
{
Angle=1
link(Data,1489459:Index,[(498,265)])
}
END_SDK
Add(ChildGroupBox,12602276,846,256)
{
link(onEvent1,5968126:doEvent6,[(943,262)(943,286)])
}
BEGIN_SDK
Add(EditMulti,3944223,0,14)
{
EventCount=1
WorkCount=2
Width=839
Height=585
link(doWork1,3695041:doBringToFront,[(7,20)])
link(doWork2,13614708:doText,[(43,27)(43,164)])
}
Add(GroupBox,3695041,7,112)
{
Left=220
Top=35
Width=775
Height=450
Caption="Масло"
Point(doBringToFront)
}
Add(MultiStrPart,13327469,548,347)
{
Char="\9"
Count=1
link(onSplit,11016733:doString,[])
}
Add(Button,12470845,30,280)
{
Left=265
Top=34
Width=100
Font=[Broadway,12,0,8421504,0]
Caption="Завантажити"
link(onClick,4409359:doOpen,[(78,286)(78,220)])
}
Add(Button,9005124,212,301)
{
Left=375
Top=34
Width=70
Font=[Broadway,12,0,8421504,0]
Caption="Очистить"
link(onClick,12397356:doClear,[(354,307)(354,192)])
}
Add(StringTableMT,12397356,464,179)
{
Left=10
Top=55
Width=775
Height=320
Columns=#4:№=25|21:Дата заміни масла=200|13:Тип масла=150|24:Причина заміни масла=250|23:Дата заміни фільтру=200|26:Причина заміни фільтру=250|0:|0:|
StrDelimiter="\9"
Redaction=0
IconsCheck=[]
MiscIcons=[]
Icons=[]
Point(doMT_Add)
Point(Strings)
Point(onLineChange)
Point(Index)
link(onLineChange,2213808:doRead,[])
}
Add(Button,2222468,296,179)
{
Left=10
Top=34
Width=120
Caption="Добавить строку"
link(onClick,5021796:doOperation,[])
}
Add(Math,5021796,345,179)
{
Op2=1
ResultType=0
link(onResult,11461881:doEvent1,[])
link(Op1,12397356:Count,[(351,160)(411,160)(411,243)(470,243)])
}
Add(Edit,13614708,86,158)
{
Left=60
Top=13
Width=465
Text="MyDataBase1.db"
link(onEnter,3944223:onEvent1,[(478,171)(478,20)])
}
Add(Label,7069515,135,158)
{
Left=10
Top=13
Width=48
Height=17
Caption="Имя БД:"
}
Add(DS_SQLite,4409359,93,214)
{
Name="db"
link(onOpen,9846779:doEvent1,[])
link(FileName,13614708:Text,[(99,202)(92,202)])
}
Add(DSC_Exec,6978250,156,263)
{
SQL="CREATE TABLE table6 (number int, firstname char, lastname char, cause char, date char, filter char)"
DSManager="db"
}
Add(DSC_Exec,1493733,513,123)
{
DSManager="db"
}
Add(ArrayRW,2213808,596,186)
{
link(onRead,2571016:doSplit,[])
link(Array,4410071:Var3,[(602,170)(546,170)(546,244)])
}
Add(Hub,11461881,401,179)
{
link(onEvent1,12397356:doAdd,[])
link(onEvent2,2009613:doString,[(439,192)(439,129)])
}
Add(FormatStr,2009613,464,123)
{
DataCount=1
Mask="INSERT INTO table6 (number) VALUES (%1)"
link(onFString,1493733:doExec,[])
}
Add(DSC_Query,15798435,261,228)
{
SQL="SELECT * FROM table6"
DSManager="db"
link(onQuery,12397356:doMT_Add,[(379,234)(379,220)])
}
Add(DSC_Exec,11379607,772,256)
{
DSManager="db"
}
Add(FormatStr,15297647,639,256)
{
DataCount=6
Mask="UPDATE table6 SET firstname='%2', lastname='%3', cause='%4', date='%5', filter='%6' WHERE number=%1"
link(onFString,11379607:doExec,[])
link(Str1,2571016:Part1,[])
link(Str2,2571016:Part2,[])
link(Str3,2571016:Part3,[])
link(Str4,2571016:Part4,[])
link(Str5,2571016:Part5,[])
link(Str6,2571016:Part6,[])
}
Add(MultiStrPart,2571016,639,186)
{
Char="\9"
Count=6
link(onSplit,15297647:doString,[(683,192)(683,227)(627,227)(627,262)])
}
Add(Hub,9846779,142,214)
{
link(onEvent1,15798435:doQuery,[(208,220)(208,234)])
link(onEvent2,6978250:doExec,[])
}
Add(Button,7148669,282,347)
{
Left=135
Top=34
Width=120
Caption="Удалить строку"
link(onClick,15398364:doEvent1,[])
}
Add(Hub,15398364,338,347)
{
link(onEvent1,14184427:doRead,[])
link(onEvent2,13652696:doData,[])
}
Add(DoData,13652696,380,354)
{
link(onEventData,12397356:doDelete,[(438,360)(438,199)])
link(Data,8455910:Var1,[(386,293)])
}
Add(DSC_Exec,8749688,646,347)
{
DSManager="db"
}
Add(FormatStr,11016733,597,347)
{
DataCount=1
Mask="DELETE FROM table6 WHERE number=%1"
link(onFString,8749688:doExec,[])
link(Str1,13327469:Part1,[(603,335)(579,335)(579,391)(554,391)])
}
Add(ArrayRW,14184427,499,347)
{
link(onRead,13327469:doSplit,[])
link(Array,4410071:Var2,[])
link(Index,8455910:Var2,[(512,322)(456,322)])
}
Add(GetDataEx,4410071,499,239)
{
Angle=3
link(Data,12397356:Strings,[(484,244)])
}
Add(GetDataEx,8455910,450,288)
{
Angle=1
link(Data,12397356:Index,[(491,293)])
}
END_SDK
Add(ChildGroupBox,7725053,846,305)
{
link(onEvent1,5968126:doEvent7,[(943,311)(943,293)])
}
BEGIN_SDK
Add(EditMulti,3276299,21,21)
{
EventCount=1
WorkCount=2
Width=797
Height=585
link(doWork1,2250338:doBringToFront,[(28,27)(28,111)])
link(doWork2,12758551:doText,[(81,34)(81,178)])
}
Add(GroupBox,2250338,35,105)
{
Left=220
Top=35
Width=775
Height=450
Caption="Охолоджуюча рідина"
Point(doBringToFront)
}
Add(MultiStrPart,11193971,604,361)
{
Char="\9"
Count=1
link(onSplit,7187556:doString,[])
}
Add(Button,7621771,86,294)
{
Left=265
Top=34
Width=100
Font=[Broadway,12,0,8421504,0]
Caption="Завантажити"
link(onClick,3823219:doOpen,[(134,300)(134,234)])
}
Add(Button,6950051,268,315)
{
Left=375
Top=34
Width=70
Font=[Broadway,12,0,8421504,0]
Caption="Очистить"
link(onClick,7261521:doClear,[(410,321)(410,206)])
}
Add(StringTableMT,7261521,520,193)
{
Left=10
Top=55
Width=775
Height=320
Columns=#4:№=25|22:Дата заміни рідини=150|14:Тип рідини=200|18:Причина заміни=200|
StrDelimiter="\9"
Redaction=0
IconsCheck=[]
MiscIcons=[]
Icons=[]
Point(doMT_Add)
Point(Strings)
Point(onLineChange)
Point(Index)
link(onLineChange,9813648:doRead,[])
}
Add(Button,5857724,352,193)
{
Left=10
Top=34
Width=120
Caption="Добавить строку"
link(onClick,15887589:doOperation,[])
}
Add(Math,15887589,401,193)
{
Op2=1
ResultType=0
link(onResult,3341652:doEvent1,[])
link(Op1,7261521:Count,[(407,174)(467,174)(467,257)(526,257)])
}
Add(Edit,12758551,142,172)
{
Left=60
Top=13
Width=465
Text="MyDataBase1.db"
link(onEnter,3276299:onEvent1,[(496,185)(496,27)])
}
Add(Label,15381254,191,172)
{
Left=10
Top=13
Width=48
Height=17
Caption="Имя БД:"
}
Add(DS_SQLite,3823219,149,228)
{
Name="db"
link(onOpen,6688445:doEvent1,[])
link(FileName,12758551:Text,[(155,216)(148,216)])
}
Add(DSC_Exec,1789287,212,277)
{
SQL="CREATE TABLE table7 (number int, firstname char, lastname char, cause char)"
DSManager="db"
}
Add(DSC_Exec,12537168,569,137)
{
DSManager="db"
}
Add(ArrayRW,9813648,652,200)
{
link(onRead,1315024:doSplit,[])
link(Array,16245542:Var3,[(658,184)(602,184)(602,258)])
}
Add(Hub,3341652,457,193)
{
link(onEvent1,7261521:doAdd,[])
link(onEvent2,15364540:doString,[(495,206)(495,143)])
}
Add(FormatStr,15364540,520,137)
{
DataCount=1
Mask="INSERT INTO table7 (number) VALUES (%1)"
link(onFString,12537168:doExec,[])
}
Add(DSC_Query,9317544,317,242)
{
SQL="SELECT * FROM table7"
DSManager="db"
link(onQuery,7261521:doMT_Add,[(435,248)(435,234)])
}
Add(DSC_Exec,7252923,744,270)
{
DSManager="db"
}
Add(FormatStr,7483739,695,270)
{
DataCount=4
Mask="UPDATE table7 SET firstname='%2', lastname='%3', cause='%4' WHERE number=%1"
link(onFString,7252923:doExec,[])
link(Str1,1315024:Part1,[])
link(Str2,1315024:Part2,[])
link(Str3,1315024:Part3,[])
link(Str4,1315024:Part4,[])
}
Add(MultiStrPart,1315024,695,200)
{
Char="\9"
Count=4
link(onSplit,7483739:doString,[(739,206)(739,241)(683,241)(683,276)])
}
Add(Hub,6688445,198,228)
{
link(onEvent1,9317544:doQuery,[(264,234)(264,248)])
link(onEvent2,1789287:doExec,[])
}
Add(Button,12564371,338,361)
{
Left=135
Top=34
Width=120
Caption="Удалить строку"
link(onClick,4543428:doEvent1,[])
}
Add(Hub,4543428,394,361)
{
link(onEvent1,13862924:doRead,[])
link(onEvent2,1966287:doData,[])
}
Add(DoData,1966287,436,368)
{
link(onEventData,7261521:doDelete,[(494,374)(494,213)])
link(Data,12472011:Var1,[(442,307)])
}
Add(DSC_Exec,11719274,702,361)
{
DSManager="db"
}
Add(FormatStr,7187556,653,361)
{
DataCount=1
Mask="DELETE FROM table7 WHERE number=%1"
link(onFString,11719274:doExec,[])
link(Str1,11193971:Part1,[(659,349)(635,349)(635,405)(610,405)])
}
Add(ArrayRW,13862924,555,361)
{
link(onRead,11193971:doSplit,[])
link(Array,16245542:Var2,[])
link(Index,12472011:Var2,[(568,336)(512,336)])
}
Add(GetDataEx,16245542,555,253)
{
Angle=3
link(Data,7261521:Strings,[(540,258)])
}
Add(GetDataEx,12472011,506,302)
{
Angle=1
link(Data,7261521:Index,[(547,307)])
}
END_SDK
Add(ChildGroupBox,6441274,846,347)
{
link(onEvent1,5968126:doEvent8,[(944,353)(944,300)])
}
BEGIN_SDK
Add(EditMulti,14658651,21,21)
{
EventCount=1
WorkCount=2
Width=797
Height=585
link(doWork1,9482439:doBringToFront,[(28,27)(28,111)])
link(doWork2,9880777:doText,[(57,34)(57,192)])
}
Add(GroupBox,9482439,35,105)
{
Left=220
Top=35
Width=775
Height=450
Caption="Тормозна рідина"
Point(doBringToFront)
}
Add(MultiStrPart,11808187,555,375)
{
Char="\9"
Count=1
link(onSplit,14921085:doString,[])
}
Add(Button,16461806,37,308)
{
Left=265
Top=34
Width=100
Font=[Broadway,12,0,8421504,0]
Caption="Завантажити"
link(onClick,11676265:doOpen,[(85,314)(85,248)])
}
Add(Button,4100224,219,329)
{
Left=375
Top=34
Width=70
Font=[Broadway,12,0,8421504,0]
Caption="Очистить"
link(onClick,11628349:doClear,[(361,335)(361,220)])
}
Add(StringTableMT,11628349,471,207)
{
Left=10
Top=55
Width=775
Height=320
Columns=#4:№=25|22:Дата заміни рідини=150|14:Тип рідини=150|25:Причини заміни рідини=200|
StrDelimiter="\9"
Redaction=0
IconsCheck=[]
MiscIcons=[]
Icons=[]
Point(doMT_Add)
Point(Strings)
Point(onLineChange)
Point(Index)
link(onLineChange,14554881:doRead,[])
}
Add(Button,10175587,303,207)
{
Left=10
Top=34
Width=120
Caption="Добавить строку"
link(onClick,13477734:doOperation,[])
}
Add(Math,13477734,352,207)
{
Op2=1
ResultType=0
link(onResult,14374679:doEvent1,[])
link(Op1,11628349:Count,[(358,188)(418,188)(418,271)(477,271)])
}
Add(Edit,9880777,93,186)
{
Left=60
Top=13
Width=465
Text="MyDataBase1.db"
link(onEnter,14658651:onEvent1,[(471,199)(471,27)])
}
Add(Label,626523,142,186)
{
Left=10
Top=14
Width=48
Height=17
Caption="Имя БД:"
}
Add(DS_SQLite,11676265,100,242)
{
Name="db"
link(onOpen,5852984:doEvent1,[])
link(FileName,9880777:Text,[(106,230)(99,230)])
}
Add(DSC_Exec,6635697,163,291)
{
SQL="CREATE TABLE table8 (number int, firstname char, lastname char,cause char)"
DSManager="db"
}
Add(DSC_Exec,13306669,520,151)
{
DSManager="db"
}
Add(ArrayRW,14554881,603,214)
{
link(onRead,1415404:doSplit,[])
link(Array,9121665:Var3,[(609,198)(553,198)(553,272)])
}
Add(Hub,14374679,408,207)
{
link(onEvent1,11628349:doAdd,[])
link(onEvent2,1146953:doString,[(446,220)(446,157)])
}
Add(FormatStr,1146953,471,151)
{
DataCount=1
Mask="INSERT INTO table8 (number) VALUES (%1)"
link(onFString,13306669:doExec,[])
}
Add(DSC_Query,10021401,268,256)
{
SQL="SELECT * FROM table8"
DSManager="db"
link(onQuery,11628349:doMT_Add,[(386,262)(386,248)])
}
Add(DSC_Exec,9590347,695,284)
{
DSManager="db"
}
Add(FormatStr,3525371,646,284)
{
DataCount=4
Mask="UPDATE table8 SET firstname='%2', lastname='%3', cause='%4' WHERE number=%1"
link(onFString,9590347:doExec,[])
link(Str1,1415404:Part1,[])
link(Str2,1415404:Part2,[])
link(Str3,1415404:Part3,[])
link(Str4,1415404:Part4,[])
}
Add(MultiStrPart,1415404,646,214)
{
Char="\9"
Count=4
link(onSplit,3525371:doString,[(690,220)(690,255)(634,255)(634,290)])
}
Add(Hub,5852984,149,242)
{
link(onEvent1,10021401:doQuery,[(215,248)(215,262)])
link(onEvent2,6635697:doExec,[])
}
Add(Button,13607318,289,375)
{
Left=135
Top=34
Width=120
Caption="Удалить строку"
link(onClick,7314400:doEvent1,[])
}
Add(Hub,7314400,345,375)
{
link(onEvent1,901330:doRead,[])
link(onEvent2,7677846:doData,[])
}
Add(DoData,7677846,387,382)
{
link(onEventData,11628349:doDelete,[(445,388)(445,227)])
link(Data,11513600:Var1,[(393,321)])
}
Add(DSC_Exec,15743862,653,375)
{
DSManager="db"
}
Add(FormatStr,14921085,604,375)
{
DataCount=1
Mask="DELETE FROM table8 WHERE number=%1"
link(onFString,15743862:doExec,[])
link(Str1,11808187:Part1,[(610,363)(586,363)(586,419)(561,419)])
}
Add(ArrayRW,901330,506,375)
{
link(onRead,11808187:doSplit,[])
link(Array,9121665:Var2,[])
link(Index,11513600:Var2,[(519,350)(463,350)])
}
Add(GetDataEx,9121665,506,267)
{
Angle=3
link(Data,11628349:Strings,[(491,272)])
}
Add(GetDataEx,11513600,457,316)
{
Angle=1
link(Data,11628349:Index,[(498,321)])
}
END_SDK
Add(DatePicker,6955404,0,21)
{
Left=880
Top=5
Width=115
Height=21
}
Add(ChanelToIndex,983114,126,210)
{
link(onIndex,8774474:PageTab,[])
}
Add(Hub,16008142,91,203)
{
link(onEvent1,983114:doWork2,[(112,209)(112,223)])
link(onEvent2,983114:doWork1,[])
}
Add(ChildGroupBox,2049293,846,398)
{
link(onEvent1,5968126:doEvent9,[(944,404)(944,307)])
}
BEGIN_SDK
Add(EditMulti,10278234,21,21)
{
EventCount=1
WorkCount=2
Width=832
Height=536
link(doWork1,5492797:doBringToFront,[(28,27)(30,34)(28,111)])
link(doWork2,8211285:doText,[(73,34)(73,115)])
}
Add(GroupBox,5492797,35,105)
{
Left=220
Top=35
Width=775
Height=450
Caption="ЗІП"
Point(doBringToFront)
}
Add(Button,12661638,252,252)
{
Left=375
Top=34
Width=70
Font=[Broadway,12,0,8421504,0]
Caption="Очистить"
link(onClick,15469714:doClear,[(394,258)(394,143)(497,144)])
}
Add(StringTableMT,15469714,504,130)
{
Left=10
Top=55
Width=760
Height=320
Columns=#4:№=25|16:Найменування=150|12:Кількість=75|13:Наявність=150|
StrDelimiter="\9"
Redaction=0
IconsCheck=[]
MiscIcons=[]
Icons=[]
Point(doMT_Add)
Point(Strings)
Point(onLineChange)
Point(Index)
link(onLineChange,4396345:doRead,[])
}
Add(Button,12082724,336,130)
{
Left=10
Top=34
Width=120
Caption="Добавить строку"
link(onClick,10464164:doOperation,[])
}
Add(Math,10464164,385,130)
{
Op2=1
ResultType=0
link(onResult,14385736:doEvent1,[])
link(Op1,15469714:Count,[(391,111)(451,111)(451,194)(510,194)])
}
Add(Edit,8211285,126,109)
{
Left=60
Top=13
Width=465
Text="MyDataBase1.db"
link(onEnter,10278234:onEvent1,[(506,122)(506,27)])
}
Add(Label,12175055,175,109)
{
Left=10
Top=13
Width=48
Height=17
Caption="Имя БД:"
}
Add(DS_SQLite,8917315,133,165)
{
Name="db"
link(onOpen,8537194:doEvent1,[])
link(FileName,8211285:Text,[(139,153)(132,153)])
}
Add(DSC_Exec,6109932,196,214)
{
SQL="CREATE TABLE table9 (number int, firstname char, lastname char, availability char)"
DSManager="db"
}
Add(DSC_Exec,3352109,553,74)
{
DSManager="db"
}
Add(ArrayRW,4396345,636,137)
{
link(onRead,7276389:doSplit,[])
link(Array,13512207:Var3,[(642,121)(586,121)(586,195)])
}
Add(Hub,14385736,441,130)
{
link(onEvent1,15469714:doAdd,[])
link(onEvent2,13810872:doString,[(479,143)(479,80)])
}
Add(FormatStr,13810872,504,74)
{
DataCount=1
Mask="INSERT INTO table9 (number) VALUES (%1)"
link(onFString,3352109:doExec,[])
}
Add(DSC_Query,11464347,301,179)
{
SQL="SELECT * FROM table9"
DSManager="db"
link(onQuery,15469714:doMT_Add,[(419,185)(419,171)])
}
Add(DSC_Exec,13958286,728,207)
{
DSManager="db"
}
Add(FormatStr,8698081,679,207)
{
DataCount=4
Mask="UPDATE table9 SET firstname='%2', lastname='%3', availability='%4' WHERE number=%1"
link(onFString,13958286:doExec,[])
link(Str1,7276389:Part1,[])
link(Str2,7276389:Part2,[(692,177)])
link(Str3,7276389:Part3,[])
link(Str4,7276389:Part4,[])
}
Add(MultiStrPart,7276389,679,137)
{
Char="\9"
Count=4
link(onSplit,8698081:doString,[(723,143)(723,178)(667,178)(667,213)])
}
Add(Hub,8537194,182,165)
{
link(onEvent1,11464347:doQuery,[(248,171)(248,185)])
link(onEvent2,6109932:doExec,[])
}
Add(Button,838602,322,298)
{
Left=135
Top=34
Width=120
Caption="Удалить строку"
link(onClick,3158010:doEvent1,[])
}
Add(Hub,3158010,378,298)
{
link(onEvent1,12698045:doRead,[])
link(onEvent2,5386638:doData,[])
}
Add(DoData,5386638,420,305)
{
link(onEventData,15469714:doDelete,[(478,311)(478,150)])
link(Data,6121884:Var1,[(426,244)])
}
Add(DSC_Exec,14026919,686,298)
{
DSManager="db"
}
Add(FormatStr,2168871,637,298)
{
DataCount=1
Mask="DELETE FROM table9 WHERE number=%1"
link(onFString,14026919:doExec,[])
link(Str1,13695267:Part1,[(643,286)(619,286)(619,342)(594,342)])
}
Add(ArrayRW,12698045,539,298)
{
link(onRead,13695267:doSplit,[])
link(Array,13512207:Var2,[])
link(Index,6121884:Var2,[(552,273)(496,273)])
}
Add(GetDataEx,13512207,539,190)
{
Angle=3
link(Data,15469714:Strings,[(524,195)])
}
Add(GetDataEx,6121884,490,239)
{
Angle=1
link(Data,15469714:Index,[(531,244)])
}
Add(MultiStrPart,13695267,588,298)
{
Char="\9"
Count=1
link(onSplit,2168871:doString,[])
}
Add(Button,15782808,70,231)
{
Left=265
Top=34
Width=100
Font=[Broadway,12,0,8421504,0]
Caption="Завантажити"
link(onClick,8917315:doOpen,[(118,237)(118,171)])
}
END_SDK
Add(DoData,1090255,763,32)
{
link(onEventData,13869979:doWork1,[])
}
Add(DoData,12636495,763,74)
{
link(onEventData,16594303:doWork1,[])
}
Add(DoData,2973519,763,116)
{
link(onEventData,3392:doWork1,[])
}
Add(DoData,11432164,761,158)
{
link(onEventData,13958430:doWork1,[])
}
Add(DoData,12030643,762,207)
{
link(onEventData,12437118:doWork1,[])
}
Add(DoData,11648305,762,256)
{
link(onEventData,12602276:doWork1,[])
}
Add(DoData,15919337,762,305)
{
link(onEventData,7725053:doWork1,[])
}
Add(DoData,3114967,762,347)
{
link(onEventData,6441274:doWork1,[])
}
Add(DoData,772131,762,398)
{
link(onEventData,2049293:doWork1,[])
}
Add(IndexToChanel,4412880,672,252)
{
Count=11
link(onEvent1,1090255:doData,[(744,258)(744,38)])
link(onEvent2,12636495:doData,[(744,265)(744,80)])
link(onEvent3,2973519:doData,[(744,272)(744,122)])
link(onEvent4,11432164:doData,[(744,279)(744,164)])
link(onEvent5,12030643:doData,[(744,286)(744,213)])
link(onEvent6,11648305:doData,[(744,293)(744,262)])
link(onEvent7,15919337:doData,[(744,300)(744,311)])
link(onEvent8,3114967:doData,[(744,307)(744,353)])
link(onEvent9,772131:doData,[(744,314)(744,404)])
link(onEvent10,14087333:doData,[(744,321)(744,451)])
}
Add(MainForm,5210529,328,105)
{
Width=1044
Height=606
Point(onClose)
link(onCreate,4133222:In,[])
}
Add(Hub,5968126,1008,245)
{
InCount=10
link(onEvent1,2811278:In,[])
}
Add(Hub,5246273,504,252)
{
OutCount=10
link(onEvent1,13869979:doWork2,[(556,258)(556,45)])
link(onEvent2,16594303:doWork2,[(556,265)(556,87)])
link(onEvent3,3392:doWork2,[(556,272)(556,129)])
link(onEvent4,13958430:doWork2,[(556,279)(556,171)])
link(onEvent5,12437118:doWork2,[(556,286)(556,220)])
link(onEvent6,12602276:doWork2,[(556,293)(556,269)])
link(onEvent7,7725053:doWork2,[(556,300)(556,318)])
link(onEvent8,6441274:doWork2,[(556,307)(556,360)])
link(onEvent9,2049293:doWork2,[(556,314)(556,411)])
link(onEvent10,11784741:doWork2,[(556,321)(556,458)])
}
Add(ListBox,5671226,406,245)
{
Left=5
Top=30
Width=200
Height=665
DataType=1
Point(Index)
Point(onDblClick)
link(onClick,5246273:doEvent1,[])
}
Add(DoData,736780,427,350)
{
link(onEventData,5671226:doDelete,[(467,356)(467,317)(366,317)(366,265)])
link(Data,5671226:Index,[])
}
Add(Button,16015661,343,350)
{
Left=150
Top=5
Width=60
Caption="Удалить"
link(onClick,736780:doData,[])
}
Add(ODialog,4673223,126,56)
{
Filter="Текст|*.txt"
link(onExecute,14485583:doEvent1,[])
}
Add(SDialog,6419896,126,105)
{
Filter="Текст|*.txt"
link(onExecute,12522412:doEvent1,[])
}
Add(Menu,7920668,0,77)
{
Menu=#4:Файл|1:(|5:Новий|8:Відкрити|8:Зберегти|11:Зберегти як|1:-|5:Вихід|1:)|8:Допомога|12:Про програму|
Point(onSelectNum)
link(onSelectNum,3934991:doEvent,[])
}
Add(IndexToChanel,3934991,49,84)
{
Count=11
link(onEvent3,4673223:doExecute,[(117,104)(117,62)])
link(onEvent4,5625880:doWork2,[])
link(onEvent5,5625880:doWork3,[(117,118)])
link(onEvent10,5210529:doClose,[(201,153)(201,132)])
link(onEvent11,10924091:doMessage,[])
}
Add(Hub,14485583,182,56)
{
link(onEvent1,13865704:doWork2,[])
link(onEvent2,12700761:In,[])
}
Add(Memory,12805926,329,56)
{
}
Add(Message,10924091,126,154)
{
Message="Привет "
}
Add(HubEx,5625880,113,105)
{
link(onEvent,6419896:doExecute,[])
}
Add(Hub,12522412,182,105)
{
link(onEvent1,13865704:doWork3,[(300,111)])
link(onEvent2,13036038:In,[])
}
Add(HubEx,13865704,296,56)
{
link(onEvent,12805926:doValue,[])
}
Add(ChildGroupBox,11784741,849,445)
{
link(onEvent1,5968126:doEvent10,[(944,451)(944,314)])
}
BEGIN_SDK
Add(EditMulti,13082838,21,21)
{
EventCount=1
WorkCount=2
Width=832
Height=536
link(doWork1,12209291:doBringToFront,[(28,27)(30,34)(28,111)])
link(doWork2,7743094:doText,[(73,34)(73,115)])
}
Add(GroupBox,12209291,35,105)
{
Left=220
Top=35
Width=775
Height=450
Caption="Моторесурс"
Point(doBringToFront)
}
Add(Button,9425159,252,252)
{
Left=375
Top=34
Width=70
Font=[Broadway,12,0,8421504,0]
Caption="Очистить"
link(onClick,7735608:doClear,[(394,258)(394,143)(497,144)])
}
Add(StringTableMT,7735608,504,130)
{
Left=10
Top=55
Width=760
Height=320
Columns=#6:Рік=50|10:Січень=100|9:Лютий=100|12:Березень=100|11:Квітень=100|11:Травень=100|11:Червень=100|10:Липень=100|11:Серпень=100|12:Вересень=100|11:Жовтень=100|12:Листопад=100|11:Грудень=100|10:Річний=150|25:З початку експлатації=250|23:Після останнього КР=250|
StrDelimiter="\9"
Redaction=0
IconsCheck=[]
MiscIcons=[]
Icons=[]
Point(doMT_Add)
Point(Strings)
Point(onLineChange)
Point(Index)
link(onLineChange,1283587:doRead,[])
}
Add(Button,2317060,336,130)
{
Left=10
Top=34
Width=120
Caption="Добавить строку"
link(onClick,5922852:doOperation,[])
}
Add(Math,5922852,385,130)
{
Op2=1
ResultType=0
link(onResult,14753751:doEvent1,[])
link(Op1,7735608:Count,[(391,111)(451,111)(451,194)(510,194)])
}
Add(Edit,7743094,126,109)
{
Left=60
Top=13
Width=465
Text="MyDataBase1.db"
link(onEnter,13082838:onEvent1,[(506,122)(506,27)])
}
Add(Label,14235026,182,109)
{
Left=10
Top=13
Width=48
Height=17
Caption="Имя БД:"
}
Add(DS_SQLite,10583734,133,165)
{
Name="db"
link(onOpen,1870618:doEvent1,[])
link(FileName,7743094:Text,[(139,153)(132,153)])
}
Add(DSC_Exec,2633806,196,214)
{
SQL="CREATE TABLE table10 (number int, firstname char, lastname char, Jan char, feb char, march char , april char, may char, june char, jule char, august char, sept char, october char, november char, december char, year char, start char, end char)"
DSManager="db"
}
Add(DSC_Exec,16616374,553,74)
{
DSManager="db"
}
Add(ArrayRW,1283587,636,137)
{
link(onRead,8118530:doSplit,[])
link(Array,16774790:Var3,[(642,121)(586,121)(586,195)])
}
Add(Hub,14753751,441,130)
{
link(onEvent1,7735608:doAdd,[])
link(onEvent2,14995619:doString,[(479,143)(479,80)])
}
Add(FormatStr,14995619,504,74)
{
DataCount=1
Mask="INSERT INTO table10 (number) VALUES (%1)"
link(onFString,16616374:doExec,[])
}
Add(DSC_Query,15192787,301,179)
{
SQL="SELECT * FROM table10"
DSManager="db"
link(onQuery,7735608:doMT_Add,[(419,185)(419,171)])
}
Add(DSC_Exec,10253509,749,270)
{
DSManager="db"
}
Add(FormatStr,6136212,679,207)
{
DataCount=17
Mask="UPDATE table10 SET firstname='%2', lastname='%3', feb = '%4', march = '%5' , april = '%6', may = '%7', june = '%8', jule = '%9', august = '%10', sept = '%11' , october = '%12' , november = '%13', december = '%14', year= '%15' , start= '%16', end= '%17' WHERE number=%1"
link(onFString,10253509:doExec,[(764,213)(764,245)(737,245)(737,276)])
link(Str1,8118530:Part1,[])
link(Str2,8118530:Part2,[])
link(Str3,8118530:Part3,[])
link(Str4,8118530:Part4,[])
link(Str5,8118530:Part5,[])
link(Str6,8118530:Part6,[])
link(Str7,8118530:Part7,[])
link(Str8,8118530:Part8,[])
link(Str9,8118530:Part9,[])
link(Str10,8118530:Part10,[])
link(Str11,8118530:Part11,[])
link(Str12,8118530:Part12,[])
link(Str13,8118530:Part13,[])
link(Str14,8118530:Part14,[])
link(Str15,8118530:Part15,[])
link(Str16,8118530:Part16,[])
link(Str17,8118530:Part17,[])
}
Add(MultiStrPart,8118530,679,137)
{
Char="\9"
Count=17
link(onSplit,6136212:doString,[(723,143)(723,178)(667,178)(667,213)])
}
Add(Hub,1870618,182,165)
{
link(onEvent1,15192787:doQuery,[(248,171)(248,185)])
link(onEvent2,2633806:doExec,[])
}
Add(Button,3984982,322,298)
{
Left=135
Top=34
Width=120
Caption="Удалить строку"
link(onClick,1303128:doEvent1,[])
}
Add(Hub,1303128,378,298)
{
link(onEvent1,8562638:doRead,[])
link(onEvent2,15559044:doData,[])
}
Add(DoData,15559044,420,305)
{
link(onEventData,7735608:doDelete,[(478,311)(478,150)])
link(Data,11617938:Var1,[(426,244)])
}
Add(DSC_Exec,11160853,686,298)
{
DSManager="db"
}
Add(FormatStr,4574577,637,298)
{
DataCount=1
Mask="DELETE FROM table10 WHERE number=%1"
link(onFString,11160853:doExec,[])
link(Str1,5605138:Part1,[(643,286)(619,286)(619,342)(594,342)])
}
Add(ArrayRW,8562638,539,298)
{
link(onRead,5605138:doSplit,[])
link(Array,16774790:Var2,[])
link(Index,11617938:Var2,[(552,273)(496,273)])
}
Add(GetDataEx,16774790,539,190)
{
Angle=3
link(Data,7735608:Strings,[(524,195)])
}
Add(GetDataEx,11617938,490,239)
{
Angle=1
link(Data,7735608:Index,[(531,244)])
}
Add(MultiStrPart,5605138,588,298)
{
Char="\9"
Count=1
link(onSplit,4574577:doString,[])
}
Add(Button,7490277,35,165)
{
Left=265
Top=34
Width=100
Font=[Broadway,12,0,8421504,0]
Caption="Завантажити"
link(onClick,10583734:doOpen,[(118,171)(118,171)])
}
END_SDK
Add(DoData,14087333,763,445)
{
link(onEventData,11784741:doWork1,[])
}
Add(InfoTip,10612721,828,345)
{
Info=#0:|26: Тормозна рідина|
Width=169
Height=39
}
Add(InfoTip,13875501,828,303)
{
Info=#1: |34: Охолоджуюча рідина|
Width=169
Height=39
}
Add(InfoTip,1920936,828,205)
{
Info=#0:|12: АКБ|
Width=169
Height=39
}
Add(InfoTip,13177498,828,156)
{
Info=#0:|13: Шини|
Width=169
Height=39
}
Add(InfoTip,12905837,828,114)
{
Info=#0:|11: ТО|
Width=169
Height=39
}
Add(InfoTip,16183452,485,16)
{
Info=#18:Сторінки програми |
Width=561
Height=487
}
Add(InfoTip,14087171,828,254)
{
Info=#0:|14: Масло|
Width=169
Height=39
}
Add(InfoTip,9347721,828,394)
{
Info=#0:|12: ЗІП|
Width=169
Height=39
}
Add(InfoTip,6981593,828,72)
{
Info=#0:|17: Персонал|
Width=169
Height=39
}
Add(InfoTip,1691909,828,23)
{
Info=#0:|20: Информація|
Width=169
Height=46
}
Add(InfoTip,10770090,826,441)
{
Info=#0:|19: Моторесурс|
Width=169
Height=39
}
Add(LineBreak,8882554,259,245)
{
Caption="Занос данных"
link(Out,5671226:doAdd,[])
Primary=[2811278,812,0]
}
Add(LineBreak,16480005,259,266)
{
Caption="Открытие"
link(Out,5671226:doLoad,[(375,272)(375,279)])
Primary=[12700761,-42,-203]
}
Add(LineBreak,8408385,259,287)
{
Caption="Сохранение "
link(Out,5671226:doSave,[(371,293)(371,286)])
Primary=[13036038,-35,-175]
}
Add(ChildGroupBox,13869979,847,32)
{
link(onEvent3,5968126:doEvent1,[(943,52)(943,251)])
}
BEGIN_SDK
Add(EditMulti,1093219,-21,14)
{
EventCount=3
WorkCount=2
Width=790
Height=599
link(doWork1,1821971:doBringToFront,[(28,20)(28,111)])
link(doWork2,12731683:doText,[(29,27)(29,152)])
}
Add(GroupBox,1821971,35,105)
{
Left=220
Top=35
Width=775
Height=450
Caption="Інформація"
Point(doBringToFront)
}
Add(Button,2336772,23,266)
{
Left=265
Top=34
Width=100
Font=[Broadway,12,0,8421504,0]
Caption="Завантажити"
link(onClick,2788739:doOpen,[(71,272)(71,206)])
}
Add(Button,7745239,205,287)
{
Left=375
Top=34
Width=70
Font=[Broadway,12,0,8421504,0]
Caption="Очистить"
link(onClick,3507321:doClear,[(347,293)(347,178)])
}
Add(StringTableMT,3507321,457,165)
{
Left=10
Top=55
Width=775
Height=320
Columns=#4:№=25|22:Загальні відомості=200|9:Данні=250|
StrDelimiter="\9"
Redaction=0
IconsCheck=[]
MiscIcons=[]
Icons=[]
Point(doMT_Add)
Point(Strings)
Point(onLineChange)
Point(Index)
link(onLineChange,8097891:doRead,[])
}
Add(Button,5227062,289,165)
{
Left=10
Top=34
Width=120
Caption="Добавить строку"
link(onClick,5709514:doOperation,[])
}
Add(Math,5709514,338,165)
{
Op2=1
ResultType=0
link(onResult,15254699:doEvent1,[])
link(Op1,3507321:Count,[(344,146)(404,146)(404,229)(463,229)])
}
Add(Edit,12731683,79,146)
{
Left=60
Top=13
Width=465
Text="MyDataBase1.db"
link(onChange,1093219:onEvent2,[(440,152)(440,27)])
link(onEnter,1093219:onEvent3,[(440,159)(440,34)])
}
Add(Label,15829541,128,144)
{
Left=10
Top=13
Width=48
Height=17
Caption="Имя БД:"
}
Add(DS_SQLite,2788739,86,200)
{
Name="db"
link(onOpen,16210215:doEvent1,[])
link(FileName,12731683:Text,[(92,188)(85,188)])
}
Add(DSC_Exec,3817980,149,249)
{
SQL="CREATE TABLE table1 (number int, firstname char, lastname char)"
DSManager="db"
}
Add(DSC_Exec,13011596,506,109)
{
DSManager="db"
}
Add(ArrayRW,8097891,589,172)
{
link(onRead,1975636:doSplit,[])
link(Array,10746862:Var3,[(595,156)(539,156)(539,230)])
}
Add(Hub,15254699,394,165)
{
link(onEvent1,3507321:doAdd,[])
link(onEvent2,363894:doString,[(432,178)(432,115)])
}
Add(FormatStr,363894,457,109)
{
DataCount=1
Mask="INSERT INTO table1 (number) VALUES (%1)"
link(onFString,13011596:doExec,[])
}
Add(DSC_Query,5954143,254,214)
{
SQL="SELECT * FROM table1"
DSManager="db"
link(onQuery,3507321:doMT_Add,[(372,220)(372,206)])
}
Add(DSC_Exec,8261552,681,242)
{
DSManager="db"
}
Add(FormatStr,14594587,632,242)
{
DataCount=3
Mask="UPDATE table1 SET firstname='%2', lastname='%3' WHERE number=%1"
link(onFString,8261552:doExec,[])
link(Str1,1975636:Part1,[])
link(Str2,1975636:Part2,[])
link(Str3,1975636:Part3,[])
}
Add(MultiStrPart,1975636,632,172)
{
Char="\9"
Count=3
link(onSplit,14594587:doString,[(676,178)(676,213)(620,213)(620,248)])
}
Add(Hub,16210215,135,200)
{
link(onEvent1,5954143:doQuery,[(201,206)(201,220)])
link(onEvent2,3817980:doExec,[])
}
Add(Button,9039559,275,333)
{
Left=135
Top=34
Width=120
Caption="Удалить строку"
link(onClick,12175230:doEvent1,[])
}
Add(Hub,12175230,331,333)
{
link(onEvent1,16009664:doRead,[])
link(onEvent2,14938611:doData,[])
}
Add(DoData,14938611,373,340)
{
link(onEventData,3507321:doDelete,[(431,346)(431,185)])
link(Data,13069318:Var1,[(379,279)])
}
Add(DSC_Exec,2818224,639,333)
{
DSManager="db"
}
Add(FormatStr,9911972,590,333)
{
DataCount=1
Mask="DELETE FROM table1 WHERE number=%1"
link(onFString,2818224:doExec,[])
link(Str1,1062532:Part1,[(596,321)(572,321)(572,377)(547,377)])
}
Add(ArrayRW,16009664,492,333)
{
link(onRead,1062532:doSplit,[])
link(Array,10746862:Var2,[])
link(Index,13069318:Var2,[(505,308)(449,308)])
}
Add(GetDataEx,10746862,492,225)
{
Angle=3
link(Data,3507321:Strings,[(477,230)])
}
Add(GetDataEx,13069318,443,274)
{
Angle=1
link(Data,3507321:Index,[(484,279)])
}
Add(MultiStrPart,1062532,541,333)
{
Char="\9"
Count=1
link(onSplit,9911972:doString,[])
}
END_SDK
Add(LineBreak,491666,-21,203)
{
Caption="Открытие вкладок"
link(Out,16008142:doEvent1,[])
Primary=[4133222,392,-84]
}




Редактировалось 1 раз(а), последний 2018-08-15 12:10:36
карма: 1

0
Ответов: 1291
Рейтинг: 47
#416: 2023-04-01 17:50:40 ЛС | профиль | цитата
Продолжим изучение IC.. Кстати, User 108 - это был я когда-то... Уж не помню зачем и куда делся тот ник. Помню публиковал еще тестовую схему с IC.
Итак, сегодня я попытался портировать код нейросети и сразу столкнулся с ошибками в IC, а значит пошло мое его изучение) А именно:
Код интересный взял из этой темы:
https://forum.hiasm.com/topic/66147/1

код нейросети

//https://forum.hiasm.com/topic/66147/1
// Исходник нейросети на Delphi
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Grids, Spin; // стандартный набор модулей

type
TForm1 = class(TForm)
procedure CreateNeuroClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure SpinEdit1Change(Sender: TObject);
procedure SaveNSrisClick(Sender: TObject);
procedure RaschetClick(Sender: TObject);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure ObuchClick(Sender: TObject);
procedure SaveVesClick(Sender: TObject);
procedure LoadVesClick(Sender: TObject);
private
public
end;

Type
TNeuron = Record // Нейрон.
X: Array of Real; // Входы нейрона.
W: Array of Real; // Массив весовых коэффициентов нейрона.
dw: Array of Real; // Массив изменений весов нейрона.
sigma: Real; // Ошибка нейрона.
OutN: Real; // Выход нейрона.
end;

TSloy = Record // Слой.
Neuron: Array of TNeuron;// Массив нейронов слоя.
end;

TSety = Record // Cеть.
Sloy: Array of TSloy; // Массив слоев.
end;

TViborka = Record // Структура обучающей выборки
VhodV: Array of Real; // Входной вектор
VihodV: Array of Real; // Выходной вектор
end;

Var
Form1: TForm1;
Sety: TSety; // Нейронная сеть, массив слоёв нейронов.
ParSety: Array of Integer; // Структура сети.
InV: Array of Real; // Вх. вектор сети.
OutV: Array of Real; // Вых. вектор сети.
SDraw: Array of Array of TPoint; // Для рисования сети (координаты)
Viborka: Array of TViborka; // Массив с обучающей выборкой.
ko: Real; // коэфициент крутизны сигмоида (обычно от 0.1 до 1.5)
e: Real; // скорость обучения. (обычно от 0.01 до 0.9)
Xo: Integer; // Дополнительный вход с +1 у каждого нейрона (если 0 то нет доп. входа).
im: Real; // Коэффициент импульса (обычно от 0.1 до 0.95)

implementation

{$R *.dfm}

Procedure CreateSety(Const Par: Array of Integer); // Создает сеть.
Var
i, j, k: Integer; // i - слой. j - нейрон. k - веса нейрона.
begin
Randomize; // ГСЧ.
SetLength(Sety.Sloy, High(Par)+1); // Устанавливаем колличество слоев.
For i:= 0 To High(Par) Do // Перебераем слои.
begin
SetLength(Sety.Sloy[i].Neuron, Par[i]); // Устанавливаем колличество нейрон в слое.
For j:= 0 To High(Sety.Sloy[i].Neuron) Do // Перебераем нейроны в слое
begin // Если слой входной то.
if i = 0 Then SetLength(Sety.Sloy[i].Neuron[j].X, 1) // у нейрона 1 вход.
Else
begin // колличество входов и весов последующих слоев = колличеству нейрон предыдущего слоя + 1 вес и вход.
SetLength(Sety.Sloy[i].Neuron[j].X, (High(Sety.Sloy[i-1].Neuron)+1+1)); // +1 вход еденичный
SetLength(Sety.Sloy[i].Neuron[j].W, (High(Sety.Sloy[i-1].Neuron)+1+1)); // +1 вес для еденичного входа.
SetLength(Sety.Sloy[i].Neuron[j].dw, (High(Sety.Sloy[i-1].Neuron)+1+1)); // +1 изм. вес для еденичного входа.
For k:= 0 To High(Sety.Sloy[i].Neuron[j].W) Do // Перебераем веса нейрона.
begin
Sety.Sloy[i].Neuron[j].W[k]:= (Random(200)-100)/200; // веса нейронов заполняем СЧ.(-0,5..0,5).
Sety.Sloy[i].Neuron[j].dw[k]:= Sety.Sloy[i].Neuron[j].W[k]; // изменение веса вначале = СЧ. весу.
end;
Sety.Sloy[i].Neuron[j].X[High(Sety.Sloy[i].Neuron[j].X)]:= Xo; // подаем еденицу на еденичный вход.
end;
end;
end;
SetLength(OutV, High(Sety.Sloy[High(Sety.Sloy)].Neuron) + 1); // установка размера вых. вектора сети.
end;

Function NeuronSigmoid(Const Xn, Wn: Array of Real): Real; // Модель нейрона.
Var
Sum: Real; // взвешенная сумма.
i: Integer; // счетчик.
begin
Sum:= 0;
For i:= 0 To High(Xn) Do Sum:= Sum + Xn[i]*Wn[i]; // подсчет взвешенной суммы.
if Abs(Sum) < 40 Then // предел расчета.
Result:= 1/(1 + Exp(-Sum*ko)) // Ф-ла сигмоида.
Else
begin
if Sum >= 40 Then // результат при выходе за предел.
Result:= 1
Else
Result:= 0;
end;
end;

Procedure SetNeuroIn(Const InVektor: Array of Real); // Подача входных данных на нейросеть.
Var
j: Integer; // j - нейрон.
begin
For j:= 0 To High(Sety.Sloy[0].Neuron) Do // перебераем нейроны входного слоя.
Sety.Sloy[0].Neuron[j].X[0]:= InVektor[j]; // Присваеваем входной вектор.
end;

Procedure GetNeuroOut(Var OutVektor: Array of Real); // Вых. нейросети.
Var
j, OutSloy: Integer; // j - нейрон. OutSloy - индекс выходного слоя.
begin
OutSloy:= High(Sety.Sloy); // узнаем индекс выходного слоя.
For j:= 0 To High(Sety.Sloy[OutSloy].Neuron) Do // перебераем нейроны выходного слоя.
OutVektor[j]:= Sety.Sloy[OutSloy].Neuron[j].OutN; // Присваеваем выходной вектор.
end;

Procedure CalculateNeuro; // Вычисление всей сети.
Var
i, j, k: Integer; // i - слой. j - нейрон. k - веса нейрона.
begin
For i:= 0 To High(Sety.Sloy) Do // перебераем слои.
begin
For j:= 0 To High(Sety.Sloy[i].Neuron) Do // перебераем нейроны в слое.
if i = 0 Then // если слой входной то..
Sety.Sloy[i].Neuron[j].OutN:= Sety.Sloy[i].Neuron[j].X[0] // входной сигнал = выходу.
Else // если слой внутренний или последний..
Sety.Sloy[i].Neuron[j].OutN:= NeuronSigmoid(Sety.Sloy[i].Neuron[j].X, Sety.Sloy[i].Neuron[j].W); // считаем нейрон.
if i < High(Sety.Sloy) Then // если не последний слой то
begin
For j:= 0 To High(Sety.Sloy[i+1].Neuron) Do // перебераем нейроны следующего слоя
For k:= 0 To High(Sety.Sloy[i].Neuron) Do // перебераем входы нейрона следующего слоя.
Sety.Sloy[i+1].Neuron[j].X[k]:= Sety.Sloy[i].Neuron[k].OutN; // присваеваем вых. просчитаных нейронов
end; // входам нейронов следующего слоя.
end;
end;

Function SiSloy(SloyIndex, VesIndex: Integer): Real; // расчет ошибки внутр. слоя.
Var
j: Integer; // j - нейрон.
Sum: Real;
begin
Sum:= 0; // обнулим сумму.
For j:= 0 To High(Sety.Sloy[SloyIndex].Neuron) Do // перебераем нейроны слоя.
Sum:= Sum + Sety.Sloy[SloyIndex].Neuron[j].sigma*Sety.Sloy[SloyIndex].Neuron[j].W[VesIndex]; // считаем
Result:= Sum; // взвешенную сумму ошибок слоя.
end;

Procedure CalculateSigma(Const TselVektor: Array of Real); // расчет ошибoк нейронов.
Var
si, nO: Real; // si - текущяя ошибка нейрона. nO - вых. нейрона.
i, j: Integer; // i - слой. j - нейрон.
begin
For i:= High(Sety.Sloy) DownTo 1 Do // перебераем слои с конца до 1 слоя (0 - слой входной sigma нет).
For j:= 0 To High(Sety.Sloy[i].Neuron) Do // перебераем нейроны в слое.
begin
nO:= Sety.Sloy[i].Neuron[j].OutN; // узнали вых. значение нейрона.
if i = High(Sety.Sloy) Then // если слой последний то..
si:= nO*(1 - nO)*(TselVektor[j] - nO) // подсчитали ошибку нейрона вых слоя.
Else si:= nO*(1 - nO)*SiSloy(i+1, j); // подсчитали ошибку нейрона скрытых слоев.
Sety.Sloy[i].Neuron[j].sigma:= si; // присвоили нейрону его ошибку.
end;
end;

Procedure KorectWNeuro; // корректирует веса нейронов.
Var
dw: Real; // изменение веса.
i, j, k: Integer; // i - слой. j - нейрон. k - веса нейрона.
begin
For i:= 1 To High(Sety.Sloy) Do // перебераем слои с 1 слоя (0 - слой входной весов нет).
For j:= 0 To High(Sety.Sloy[i].Neuron) Do // перебераем нейроны в слое.
For k:= 0 To High(Sety.Sloy[i].Neuron[j].W) Do // перебераем веса текущего нейрона.
begin
dw:= e*Sety.Sloy[i].Neuron[j].sigma + im*Sety.Sloy[i].Neuron[j].dw[k]; // расчет изменения веса
Sety.Sloy[i].Neuron[j].dw[k]:= dw; // обновление изменения веса.
Sety.Sloy[i].Neuron[j].W[k]:= Sety.Sloy[i].Neuron[j].W[k] + dw; // корректировка веса.
end;
end;

Procedure RandomizeWesaNC; // Генератор случайных весовых коэфициентов.
Var
i, j, k: Integer; // i - слой. j - нейрон. k - веса нейрона.
begin
Randomize; // ГСЧ.
For i:= 1 To High(Sety.Sloy) Do // перебераем слои с 1 слоя (0 - слой входной весов нет).
For j:= 0 To High(Sety.Sloy[i].Neuron) Do // перебераем нейроны в слое.
For k:= 0 To High(Sety.Sloy[i].Neuron[j].W) Do // перебераем веса текущего нейрона.
begin
Sety.Sloy[i].Neuron[j].W[k]:= (Random(200)-100)/200; // веса нейронов заполняем СЧ.(-0,5..0,5).
Sety.Sloy[i].Neuron[j].dw[k]:= Sety.Sloy[i].Neuron[j].W[k]; // изменение веса вначале = СЧ. весу.
end;
end;

Procedure DrawSety(w, h, r, c: Integer; Const Par: Array of Integer); // Рисует сеть.
Var
Bmp: TBitmap; // холст
i, j, k, dx, dy: Integer; // i, j, k - счетчики, dx, dy - расстояния между нейронами
begin
Bmp:= TBitmap.Create; // создали
Bmp.Width:= w; // уст. размер
Bmp.Height:= h;
SetLength(SDraw, SizeOf(Par)); // уст. размер слоев
dy:= w div (High(Par) + 2) + 1; // узнали расстояние между слоями
For i:= 0 To High(Par) Do // перебераем слои
begin
SetLength(SDraw[i], Par[i]); // уст. к-во нейронов в слое.
dx:= h div (Par[i] + 1) + 1; // узнаем расстояние между нейронами в слое
For j:= 0 To Par[i] - 1 Do // перебераем нейроны
begin
SDraw[i, j].X:= (i+1)*dy; // присваиваим координаты каждому нейрону
SDraw[i, j].Y:= (j+1)*dx;
end;
end;
For i:= 0 To High(Par) Do // перебераем слои
For j:= 0 To Par[i] - 1 Do // перебераем нейроны
begin
if i < High(Par) Then // если слой не последний то...
begin
For k:= 0 To Par[i+1] - 1 Do // перебераем нейроны следующего слоя
begin
if i = 0 Then // если слой первый то...
begin
Bmp.Canvas.Brush.Color:= clWhite; // заливка белая
Bmp.Canvas.TextOut(8, SDraw[i, j].Y - 15, 'X'+IntToStr(j+1)); // пишим Х
Bmp.Canvas.MoveTo(SDraw[i, j].X, SDraw[i, j].Y); // рисуем входы
Bmp.Canvas.LineTo(0, SDraw[i, j].Y);
end;
Bmp.Canvas.MoveTo(SDraw[i, j].X, SDraw[i, j].Y); // рисуем связи.
Bmp.Canvas.LineTo(SDraw[i+1, k].X, SDraw[i+1, k].Y);
end;
end
Else // слой последний
begin
Bmp.Canvas.Brush.Color:= clWhite; // заливка белая
Bmp.Canvas.TextOut(w - 25, SDraw[i, j].Y - 15, 'Y'+IntToStr(j+1)); // пишим У
Bmp.Canvas.MoveTo(SDraw[i, j].X, SDraw[i, j].Y); // рисуем выходы
Bmp.Canvas.LineTo(w, SDraw[i, j].Y);
end;
if i = 0 Then Bmp.Canvas.Brush.Color:= clGreen // если слой первый то заливка зеленая
Else // иначе
begin
if c = 1 Then // если есть дополнительный вход то...
begin
Bmp.Canvas.Brush.Color:= clWhite; // заливка белая
Bmp.Canvas.MoveTo(SDraw[i, j].X, SDraw[i, j].Y); // рисуем вход
Bmp.Canvas.LineTo(SDraw[i, j].X, SDraw[i, j].Y-2*r);
if j = 0 Then Bmp.Canvas.TextOut(SDraw[i, j].X-5, SDraw[i, j].Y-3*r-2, '+1'); // пишим +1
end;
Bmp.Canvas.Brush.Color:= clRed; // заливка красная
end;
Bmp.Canvas.Ellipse(SDraw[i, j].X-r, SDraw[i, j].Y-r, SDraw[i, j].X+r, SDraw[i, j].Y+r); // рис нейроны
end;
Form1.Image1.Canvas.Draw(0, 0, Bmp); // Переносим BMP на Image.
Bmp.Free; // освободили.
end;

procedure TForm1.FormCreate(Sender: TObject);
begin // начальные параметры
SetLength(ParSety, 4); // 4 слоя
ParSety[0]:= 2; // входной 2 - нейрона
ParSety[1]:= 4; // первый скрытый слой 4 - нейрона
ParSety[2]:= 3; // второй скрытый слой 3 - нейрона
ParSety[3]:= 1; // выходной 1 - нейрон
SloiCol.Cells[0, 0]:= 'Слой1'; SloiCol.Cells[0, 1]:= '2'; // надписи для красоты)
SloiCol.Cells[1, 0]:= 'Слой2'; SloiCol.Cells[1, 1]:= '4';
SloiCol.Cells[2, 0]:= 'Слой3'; SloiCol.Cells[2, 1]:= '3';
SloiCol.Cells[3, 0]:= 'Слой4'; SloiCol.Cells[3, 1]:= '1';
InVector.Cells[0, 0]:= 'X1'; InVector.Cells[1, 0]:= '0';
InVector.Cells[0, 1]:= 'X2'; InVector.Cells[1, 1]:= '0';
OutVector.Cells[0, 0]:= 'Y1'; OutVector.Cells[1, 0]:= '0';
Application.HintHidePause:= 150000; // время показа подсказок.
end;

procedure TForm1.SpinEdit1Change(Sender: TObject);
Var
i: Integer;
begin
SloiCol.ColCount:= SpinEdit1.Value; // уст. к-во слоев.
SetLength(ParSety, SpinEdit1.Value); // уст. к-во слоев.
For i:= 0 To SloiCol.ColCount - 1 Do
begin
SloiCol.Cells[i, 0]:= 'Слой: '+IntToStr(i+1); // надпись для красоты)
if SloiCol.Cells[i, 1] = '' Then SloiCol.Cells[i, 1]:= '1'; // если ячейка пустая то присвоим 1.
end;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
Var
i, j, k: Integer; // счетчики
St: String; // строка с подсказкой
OutN: Real; // вых. нейрона
Sig: Real; // ошибка нейрона
begin
For i:= 0 To High(SDraw) Do // перебираем слои
For j:= 0 To High(SDraw[i]) Do // перебираем нейроны
begin // если мыши попадает в радиус (8) нейрона то...
if (Abs(SDraw[i, j].X - X) < 8) and (Abs(SDraw[i, j].Y - Y) < 8) Then
begin
Image1.ShowHint:= True; // вкл. подсказки
OutN:= Sety.Sloy[i].Neuron[j].OutN; //узнали выход нейрона
Sig:= Sety.Sloy[i].Neuron[j].sigma; // узнали ошибку
St:= ''; // очистка
if i > 0 Then // если слой не входной то...
For k:= 0 To High(Sety.Sloy[i].Neuron[j].X) Do // перебираем веса нейрона
if k < High(Sety.Sloy[i].Neuron[j].X) Then // если вес не дополнительный (последний) то...
St:= St + 'Вход'+IntToStr(k+1)+' = '+FormatFloat('0.000000', Sety.Sloy[i].Neuron[j].X[k])+'; '+
'Вес'+IntToStr(k+1)+' = '+FormatFloat('0.000000', Sety.Sloy[i].Neuron[j].W[k])+#13 // формируем подсказку
Else // вес доп.
St:= St + 'Доп. вход = '+FormatFloat('0.000000', Sety.Sloy[i].Neuron[j].X[k])+'; '+
'Доп. вес = '+FormatFloat('0.000000', Sety.Sloy[i].Neuron[j].W[k])+#13; // формируем подсказку
if i = 0 Then // если слой входной то..
Image1.Hint:= St+'Выход повторителя = '+FormatFloat('0.000000', OutN) // присвоили подсказку Image
Else // иначе
Image1.Hint:= St+'Выход нейрона = '+FormatFloat('0.000000', OutN)+#13+
'Ошибка нейрона = '+FormatFloat('0.000000', Sig); // присвоили подсказку Image
Exit;
end
Else Image1.ShowHint:= False; // выкл. подсказки
end;
end;

procedure TForm1.CreateNeuroClick(Sender: TObject);
Var
i: Integer;
begin
InVector.RowCount:= StrToInt(SloiCol.Cells[0, 1]); // Уст. размер входного вектора
For i:= 0 To InVector.RowCount - 1 Do // перебираем вх вектор поелементно.
begin
InVector.Cells[0, i]:= 'X'+IntToStr(i+1); // для красоты
if InVector.Cells[1, i] = '' Then InVector.Cells[1, i]:= '0'; //если ячейка пуста то присвоим 0.
end;
OutVector.RowCount:= StrToInt(SloiCol.Cells[SpinEdit1.Value-1, 1]);// Уст. размер выходного вектора
For i:= 0 To OutVector.RowCount - 1 Do // перебираем вых вектор поелементно.
begin
OutVector.Cells[0, i]:= 'Y'+IntToStr(i+1); // для красоты
if OutVector.Cells[1, i] = '' Then OutVector.Cells[1, i]:= '0'; //если ячейка пуста то присвоим 0.
end;
if RadioGroup1.ItemIndex = 0 Then Xo:= 1 Else Xo:= 0; // узнаем есть или нет доп вход
For i:= 0 To SloiCol.ColCount - 1 Do ParSety[i]:= StrToInt(SloiCol.Cells[i, 1]); //формируем массив со структурой сети
ko:= StrToFloat(Edit1.Text); // присвоим крутизну сигмоида.
im:= StrToFloat(Edit2.Text); // присвоим коэфициент импульса.
e:= StrToFloat(Edit3.Text); // присвоим скорость обучения.
DrawSety(Image1.Width, Image1.Height, 8, Xo, ParSety); // нарисуем сеть
CreateSety(ParSety); // создадим сеть
ShowMessage('Нейросеть создана!');
Raschet.Enabled:= True; // разрешим нажатие остальных кнопок.
SaveNSris.Enabled:= True;
SaveVes.Enabled:= True;
LoadVes.Enabled:= True;
Obuch.Enabled:= True;
end;

procedure TForm1.SaveNSrisClick(Sender: TObject);
begin
Image1.Picture.SaveToFile('NeuroTest.bmp'); // сохр. рис. сети в файл
ShowMessage('Рис. сохранен!');
end;

procedure TForm1.RaschetClick(Sender: TObject);
Var
i: Integer; // счетчик
begin
SetLength(InV, InVector.RowCount); // уст. размер вх. вектора
For i:= 0 To InVector.RowCount - 1 Do InV[i]:= StrToFloat(InVector.Cells[1, i]); //заполним вх. вектор
SetNeuroIn(InV); // подадим вх. вектор на вход сети
CalculateNeuro; // прсчитаем сеть
GetNeuroOut(OutV); // получаем вых вектор сети
For i:= 0 To OutVector.RowCount - 1 Do OutVector.Cells[1, i]:= FormatFloat('0.000000', OutV[i]);// выводим вых вектор сети
end;

Function LoadFromFile(Fn: String): Boolean; // загрузка обучающей выборки из текстового файла
Var
Sl: TStringList; // набор строк класс
St, Re: String; // строка и выдиленое число
i, j, k, k1, Xi, Xt, Yi: Integer; // счетчики
begin
Result:= True;
if Not FileExists(Fn) Then // если файла нет
begin
Result:= False;
Exit; // выходим.
end;
Xi:= 0; Yi:= 0;
Sl:= TStringList.Create;
Sl.LoadFromFile(Fn); // загружаем текст
St:= Sl.Strings[0]; // узнаем первую строчку
Try
For i:= 0 To Length(St) - 1 Do // перебор посимвольно первой строки
begin
if St[i] = 'X' Then Inc(Xi); // символ = Х то увеличим счетчик Х-ов
if St[i] = 'Y' Then Inc(Yi); // символ = У то увеличим счетчик У-ов
end;
k:= 1;
For i:= 1 To Sl.Count - 1 Do // Перебираем строки
if Sl.Strings[i] <> '' Then // если строка не пустая то..
begin
SetLength(Viborka, k); // Уст. размер выборки.
Inc(k); // Увеличим размер выборки на 1.
end;
For i:= 0 To High(Viborka) Do // перебераем елементы выборки
begin
SetLength(Viborka[i].VhodV, Xi); // Уст. размер входов
SetLength(Viborka[i].VihodV, Yi); // Уст. размер выходов
end;
For i:= 1 To Sl.Count - 1 Do // перебераем строки начиная со второй.
begin
Re:= ''; // очистка
k:= 0; k1:= 0;
Xt:= Xi; // Xt - к-во иксов (входов)
St:= Sl.Strings[i]; // Узнали строку
if St <> '' Then // Если строка не пуста то..
begin
For j:= 1 To Length(St) + 1 Do // перебераем посимвольно
begin // если символ не пробел и не конец строки то..
if (St[j] <> ' ') and (j <= Length(St)) Then Re:= Re + St[j] // добавим этот символ
Else
begin
if Re <> '' Then // если выделенная строка не пуста то...
if Xt > 0 Then // если иксы не закончились то..
begin
Dec(Xt); // уменьшим иксы
Viborka[i-1].VhodV[k]:= StrToFloat(Re); // поместим в выборку число Х
Inc(k); // увеличем счетчик елементов выборки х
end
Else // иксы закончились
begin
Viborka[i-1].VihodV[k1]:= StrToFloat(Re); // поместим в выборку число У
Inc(k1); // увеличем счетчик елементов выборки у
end;
Re:= ''; // очистка
end;
end;
end;
end;
Except
begin
ShowMessage('Ошибка в файле с выборкой!');
Result:= False;
end;
end;
Sl.Free;
end;

procedure TForm1.ObuchClick(Sender: TObject);
Var
Et, T, En, Ev: Real; // Ev - допустимая ошибка. En - текущая ошибка. T - сумма СКВ. Et - сумма СКВ по выборке
i, j, Ep, Mp: Integer; // счетчики
begin
if Not LoadFromFile('Viborka.txt') Then // загрузили выборку
begin
ShowMessage('Не загружен файл с обучающей выборкой!');
Exit;
end;
Ev:= StrToFloat(Edit4.Text); // узнали допустимую ошибку сети.
Et:= 0; // обнулили.
Ep:= 0;
Mp:= 0;
For i:= 0 To High(Viborka) Do // перебор елементов выборки
begin
SetNeuroIn(Viborka[i].VhodV); // подали на вход сети елемент выборки
CalculateNeuro; // посчитали сеть
GetNeuroOut(OutV); // получили выходной вектор.
T:= 0; // обнуляем сумму.
For j:= 0 To High(OutV) Do T:= T + Sqr(Viborka[i].VihodV[j] - OutV[j]); // СКВ отклонение
Et:= Et + 0.5*T; // по выборке
end;
En:= Et/(High(Viborka) + 1); // Ошибка Нач
Label5.Caption:= 'СКВ Ошибка Нач.: '+FormatFloat('0.000000', En); // отображение.
While En > Ev do // цикл пока текущяя ошибка будет меньше допустимой
begin
Et:= 0;
For i:= 0 To High(Viborka) Do // перебор елементов выборки
begin
SetNeuroIn(Viborka[i].VhodV); // подали на вход сети елемент выборки
CalculateNeuro; // посчитали сеть
CalculateSigma(Viborka[i].VihodV); // считаем ошибки нейронов
KorectWNeuro; // коррекция весовых коэфициентов
CalculateNeuro; // посчитали сеть
GetNeuroOut(OutV); // получили выходной вектор.
T:= 0; // обнуляем сумму.
For j:= 0 To High(OutV) Do T:= T + Sqr(Viborka[i].VihodV[j] - OutV[j]); // СКВ отклонение
Et:= Et + 0.5*T; // по выборке
end;
En:= Et/(High(Viborka) + 1); // Ошибка Тек.
Inc(Ep); // Увеличим счетчик эпох
if Ep > 70000 Then // если епох прошло 70000 то
begin // считаем что сеть попала в локальный мин.
Et:= 0; // обнулим
Ep:= 0;
RandomizeWesaNC; // сгенерируем новые веса сеити
Inc(Mp); // увеличим счетчик минимумов.
end;
// if Ep > 100000 Then Break;
Application.ProcessMessages; // чтоб не подвисало.
Label6.Caption:= 'СКВ Ошибка Тек.: '+FormatFloat('0.000000', En); // вывод
Label7.Caption:= 'Эпох обучения: '+IntToStr(Ep)+' раз.'; // переменных
Label9.Caption:= 'Попали в мин: '+IntToStr(Mp)+' раз.';
end;
ShowMessage('Нейросеть обучена!');
end;

procedure TForm1.SaveVesClick(Sender: TObject);
Var
F: File of Real; // файл
i, j, k: Integer; // счетчики
begin
AssignFile(F, 'NeuroVesa.nvs');
ReWrite(F); // откр. на перезапись
For i:= 1 To High(Sety.Sloy) Do // перебираем слои
For j:= 0 To High(Sety.Sloy[i].Neuron) Do // перебираем нейроны
For k:= 0 To High(Sety.Sloy[i].Neuron[j].W) Do // перебираем веса
Write(F, Sety.Sloy[i].Neuron[j].W[k]); // запись весов
CloseFile(F); // закрыли файл.
ShowMessage('Весовые коэффициенты нейросети записаны!');
end;

procedure TForm1.LoadVesClick(Sender: TObject);
Var
F: File of Real; // файл
i, j, k: Integer; // счетчики
begin
if Not FileExists('NeuroVesa.nvs') Then // если нет файла
begin
ShowMessage('Не найден файл!');
Exit;
end;
AssignFile(F, 'NeuroVesa.nvs');
Reset(F);
Try
For i:= 1 To High(Sety.Sloy) Do // перебираем слои
For j:= 0 To High(Sety.Sloy[i].Neuron) Do // перебираем нейроны
For k:= 0 To High(Sety.Sloy[i].Neuron[j].W) Do // перебираем веса
Read(F, Sety.Sloy[i].Neuron[j].W[k]); // чтение весов
Except
begin
ShowMessage('Ошибка структуры сети!');
Exit;
end;
end;
CloseFile(F); // закрыли файл.
ShowMessage('Весовые коэфициенты загружены!');
end;

end.

--- Добавлено в 2023-04-01 17:56:34

Первым делом копирую в IC типы (type) после ключевого слова в IC и уже объявленного там THiAsmClass = class(TDebug)

копируем типы

TNeuron = Record // Нейрон.
X: Array of Real; // Входы нейрона.
W: Array of Real; // Массив весовых коэффициентов нейрона.
dw: Array of Real; // Массив изменений весов нейрона.
sigma: Real; // Ошибка нейрона.
OutN: Real; // Выход нейрона.
end;

TSloy = Record // Слой.
Neuron: Array of TNeuron;// Массив нейронов слоя.
end;

TSety = Record // Cеть.
Sloy: Array of TSloy; // Массив слоев.
end;

TViborka = Record // Структура обучающей выборки
VhodV: Array of Real; // Входной вектор
VihodV: Array of Real; // Выходной вектор
end;

И получаем ошибку! Долго ломал голову, но в конце разобрался, подглядев в компоненте hiCryptography, что копировать нужно не после THiAsmClass = class(TDebug), а ДО этой строчки. Тогда ошибок не выдает при компиляции.

В итоге рабочий промежуточное содержимое IC теперь выглядит так:

ИК с типами

unit HiAsmUnit;

interface

uses kol,Share,Debug;

type

TNeuron = Record // Нейрон.
X: Array of Real; // Входы нейрона.
W: Array of Real; // Массив весовых коэффициентов нейрона.
dw: Array of Real; // Массив изменений весов нейрона.
sigma: Real; // Ошибка нейрона.
OutN: Real; // Выход нейрона.
end;

TSloy = Record // Слой.
Neuron: Array of TNeuron;// Массив нейронов слоя.
end;

TSety = Record // Cеть.
Sloy: Array of TSloy; // Массив слоев.
end;

TViborka = Record // Структура обучающей выборки
VhodV: Array of Real; // Входной вектор
VihodV: Array of Real; // Выходной вектор
end;

THiAsmClass = class(TDebug)
private

public

end;

implementation

end.

--- Добавлено в 2023-04-01 18:19:29

Переходим к переменным, копируем, компилируем закомментив дельфийский //Form1: TForm1; тк его нету в Хиасм и и вставляем перед implementation.
Получаем опять ошибку - в Хиасм вместо TPoint для координат используется структура TData.
Меняем ее на TData в строке с ошибкой:

Копируем Переменные

Var
//Form1: TForm1;
Sety: TSety; // Нейронная сеть, массив слоёв нейронов.
ParSety: Array of Integer; // Структура сети.
InV: Array of Real; // Вх. вектор сети.
OutV: Array of Real; // Вых. вектор сети.
SDraw: Array of Array of TPoint; // Для рисования сети (координаты)
Viborka: Array of TViborka; // Массив с обучающей выборкой.
ko: Real; // коэфициент крутизны сигмоида (обычно от 0.1 до 1.5)
e: Real; // скорость обучения. (обычно от 0.01 до 0.9)
Xo: Integer; // Дополнительный вход с +1 у каждого нейрона (если 0 то нет доп. входа).
im: Real; // Коэффициент импульса (обычно от 0.1 до 0.95)

Пока полет компиляции нормальный. Кстати, для редактора советую Visual Studio Code, установив туда еще для паскаля подсветку кода.

--- Добавлено в 2023-04-01 18:27:42

Переходим к самому интересному - к процедурам. Вставляем без изменений код сразу после implementation

Копируем процедуры


Procedure CreateSety(Const Par: Array of Integer); // Создает сеть.
Var
i, j, k: Integer; // i - слой. j - нейрон. k - веса нейрона.
begin
Randomize; // ГСЧ.
SetLength(Sety.Sloy, High(Par)+1); // Устанавливаем колличество слоев.
For i:= 0 To High(Par) Do // Перебераем слои.
begin
SetLength(Sety.Sloy[i].Neuron, Par[i]); // Устанавливаем колличество нейрон в слое.
For j:= 0 To High(Sety.Sloy[i].Neuron) Do // Перебераем нейроны в слое
begin // Если слой входной то.
if i = 0 Then SetLength(Sety.Sloy[i].Neuron[j].X, 1) // у нейрона 1 вход.
Else
begin // колличество входов и весов последующих слоев = колличеству нейрон предыдущего слоя + 1 вес и вход.
SetLength(Sety.Sloy[i].Neuron[j].X, (High(Sety.Sloy[i-1].Neuron)+1+1)); // +1 вход еденичный
SetLength(Sety.Sloy[i].Neuron[j].W, (High(Sety.Sloy[i-1].Neuron)+1+1)); // +1 вес для еденичного входа.
SetLength(Sety.Sloy[i].Neuron[j].dw, (High(Sety.Sloy[i-1].Neuron)+1+1)); // +1 изм. вес для еденичного входа.
For k:= 0 To High(Sety.Sloy[i].Neuron[j].W) Do // Перебераем веса нейрона.
begin
Sety.Sloy[i].Neuron[j].W[k]:= (Random(200)-100)/200; // веса нейронов заполняем СЧ.(-0,5..0,5).
Sety.Sloy[i].Neuron[j].dw[k]:= Sety.Sloy[i].Neuron[j].W[k]; // изменение веса вначале = СЧ. весу.
end;
Sety.Sloy[i].Neuron[j].X[High(Sety.Sloy[i].Neuron[j].X)]:= Xo; // подаем еденицу на еденичный вход.
end;
end;
end;
SetLength(OutV, High(Sety.Sloy[High(Sety.Sloy)].Neuron) + 1); // установка размера вых. вектора сети.
end;
Компилится нормально. Повторим для оставшихся процедур, вставляя их после этой.

Редактировалось 10 раз(а), последний 2023-04-01 18:27:42
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Ответов: 1291
Рейтинг: 47
#417: 2023-04-01 19:00:25 ЛС | профиль | цитата
Получаем ошибку о несовместимости типов (89) Error: Incompatible types: 'Integer' and 'Real'
Несовместимые характером типы - целое и дробное.

--- Добавлено в 2023-04-01 19:20:13

В этой строке: if Abs(Sum) < 40 Then // предел расчета.
Что с ней не так? я уж и 40 писал как дробное 40.0 и умножал его на 1.0 - не помогало. Ведь Sum определен уже как дробное (real) а единственным целым в этой строке является 40.. Сижу, бубнами обложился скоро пляска начнется) Если меня не спасут от нее..
Мой тернистый путь с этим портированием кода - я специально документирую, тк с этим столкнется любой новичок. Посмотрим, как я выйду из этого тупика и где там порылась @.

--- Добавлено в 2023-04-01 19:30:09

Forget_Flin, так вы не совсем верный раздел выбрали. И не совсем ясно что нужно доделывать в вашей программе, что работает и что нет. Сохранение как я понял не работает - сохранило нулевой файл. Создайте тему в заказах программ, а здесь будем дальше грызть IC.

Редактировалось 5 раз(а), последний 2023-04-01 19:30:09
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Ответов: 1291
Рейтинг: 47
#418: 2023-04-01 20:15:30 ЛС | профиль | цитата
Вот нашел Гуглом тут свою старую тему по IC..
https://forum.hiasm.com/topic/58012/0
И выяснил что я даже Hello World не могу вывести без кнопки, чтобы при старте IC автоматом исполнялась функция или какой-то код(..
ShowMessage('Hello World') ; - и куда его писать?
Спасибо за 3-й +))

--- Добавлено в 2023-04-01 20:22:14

Победа! Вот она, простейшая самая первая программа в IC выводящая "Hello World":

Add(MainForm,2953706,21,105)
{
}
Add(InlineCode,11934225,392,385)
{
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|0:|5: end;|0:|14:implementation|0:|0:|0:|0:|5:begin|0:|33: ShowMessage('Hello World') ;|0:|1: |4:end.|
}


Уметь выводить это сообщение очень пригодится при дальнейшей отладке программ.

--- Добавлено в 2023-04-01 20:37:23

Вызов функции:


Add(MainForm,2953706,21,105)
{
}
Add(InlineCode,11934225,392,385)
{
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|0:|5: end;|0:|14:implementation|0:|33:function showM(st:string):string;|17:var s1,s2:string;|5:begin|4: |34: s1:=' Это моя первая функция';|40: s2:=' которую я запомню навсегда..';|27: ShowMessage(st+s1+s2) ; |4:end;|0:|0:|5:begin|0:|41: showM('Привет Мир! '); // вызов функции|6: |57: ShowMessage('Hello World') ; // прямое выполнение кода|0:|1: |4:end.|
}


Редактировалось 5 раз(а), последний 2023-04-01 20:37:23
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Ответов: 1291
Рейтинг: 47
#419: 2023-04-01 21:53:01 ЛС | профиль | цитата
Застрял на фатальной ошибке .pas(144) Fatal: Internal error: C1127
Предыдущую ошибку преодолел убрав Abs.
Нейросеть


Add(InlineCode,12457072,497,448)
{
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|5:type |28: THiAsmClass = class(TDebug)|10: private|0:|9: public|0:|5: end;|1: |5:Type |27:TNeuron = Record // Нейрон.|35:X: Array of Real; // Входы нейрона.|58:W: Array of Real; // Массив весовых коэффициентов нейрона.|53:dw: Array of Real; // Массив изменений весов нейрона.|31:sigma: Real; // Ошибка нейрона.|29:OutN: Real; // Выход нейрона.|4:end;|0:|23:TSloy = Record // Слой.|49:Neuron: Array of TNeuron;// Массив нейронов слоя.|4:end;|0:|23:TSety = Record // Cеть.|38:Sloy: Array of TSloy; // Массив слоев.|4:end;|0:|48:TViborka = Record // Структура обучающей выборки|39:VhodV: Array of Real; // Входной вектор|41:VihodV: Array of Real; // Выходной вектор|4:end;|1: |4: Var|16://Form1: TForm1;|54:Sety: TSety; // Нейронная сеть, массив слоёв нейронов.|45:ParSety: Array of Integer; // Структура сети.|39:InV: Array of Real; // Вх. вектор сети.|41:OutV: Array of Real; // Вых. вектор сети.|66:SDraw: Array of Array of TData; // Для рисования сети (координаты)|59:Viborka: Array of TViborka; // Массив с обучающей выборкой.|64:ko: Real; // коэфициент крутизны сигмоида (обычно от 0.1 до 1.5)|54:e: Real; // скорость обучения. (обычно от 0.01 до 0.9)|86:Xo: Integer; // Дополнительный вход с +1 у каждого нейрона (если 0 то нет доп. входа).|57:im: Real; // Коэффициент импульса (обычно от 0.1 до 0.95)|0:|0:|14:implementation|0:|67:Procedure CreateSety(Const Par: Array of Integer); // Создает сеть.|3:Var|60:i, j, k: Integer; // i - слой. j - нейрон. k - веса нейрона.|5:begin|18:Randomize; // ГСЧ.|70:SetLength(Sety.Sloy, High(Par)+1); // Устанавливаем колличество слоев.|45:For i:= 0 To High(Par) Do // Перебераем слои.|5:begin|83:SetLength(Sety.Sloy[i].Neuron, Par[i]); // Устанавливаем колличество нейрон в слое.|70:For j:= 0 To High(Sety.Sloy[i].Neuron) Do // Перебераем нейроны в слое|30:begin // Если слой входной то.|73:if i = 0 Then SetLength(Sety.Sloy[i].Neuron[j].X, 1) // у нейрона 1 вход.|4:Else|107:begin // колличество входов и весов последующих слоев = колличеству нейрон предыдущего слоя + 1 вес и вход.|92:SetLength(Sety.Sloy[i].Neuron[j].X, (High(Sety.Sloy[i-1].Neuron)+1+1)); // +1 вход еденичный|103:SetLength(Sety.Sloy[i].Neuron[j].W, (High(Sety.Sloy[i-1].Neuron)+1+1)); // +1 вес для еденичного входа.|109:SetLength(Sety.Sloy[i].Neuron[j].dw, (High(Sety.Sloy[i-1].Neuron)+1+1)); // +1 изм. вес для еденичного входа.|74:For k:= 0 To High(Sety.Sloy[i].Neuron[j].W) Do // Перебераем веса нейрона.|5:begin|95:Sety.Sloy[i].Neuron[j].W[k]:= (Random(200)-100)/200; // веса нейронов заполняем СЧ.(-0,5..0,5).|97:Sety.Sloy[i].Neuron[j].dw[k]:= Sety.Sloy[i].Neuron[j].W[k]; // изменение веса вначале = СЧ. весу.|4:end;|99:Sety.Sloy[i].Neuron[j].X[High(Sety.Sloy[i].Neuron[j].X)]:= Xo; // подаем еденицу на еденичный вход.|4:end;|4:end;|4:end;|101:SetLength(OutV, High(Sety.Sloy[High(Sety.Sloy)].Neuron) + 1); // установка размера вых. вектора сети.|4:end;|0:|77:Function NeuronSigmoid(Const Xn, Wn: Array of Real): Real; // Модель нейрона.|3:Var|31:Sum: Real; // взвешенная сумма.|23:i: Integer; // счетчик.|5:begin|8:Sum:= 0;|78:For i:= 0 To High(Xn) Do Sum:= Sum + Xn[i]*Wn[i]; // подсчет взвешенной суммы.|0:|93://if Abs(Sum) < 40 Then // предел расчета. - Error: Incompatible types: 'Integer' and 'Real'|38:if Sum < 40 Then // предел расчета. @z|0:|47:Result:= 1/(1 + Exp(-Sum*ko)) // Ф-ла сигмоида.|4:Else|5:begin|52:if Sum >= 40 Then // результат при выходе за предел.|10:Result:= 1|4:Else|11:Result:= 0;|0:|4:end;|4:end;|0:|91:Procedure SetNeuroIn(Const InVektor: Array of Real); // Подача входных данных на нейросеть.|3:Var|26:j: Integer; // j - нейрон.|5:begin|78:For j:= 0 To High(Sety.Sloy[0].Neuron) Do // перебераем нейроны входного слоя.|73:Sety.Sloy[0].Neuron[j].X[0]:= InVektor[j]; // Присваеваем входной вектор.|4:end;|0:|71:Procedure GetNeuroOut(Var OutVektor: Array of Real); // Вых. нейросети.|3:Var|68:j, OutSloy: Integer; // j - нейрон. OutSloy - индекс выходного слоя.|5:begin|59:OutSloy:= High(Sety.Sloy); // узнаем индекс выходного слоя.|85:For j:= 0 To High(Sety.Sloy[OutSloy].Neuron) Do // перебераем нейроны выходного слоя.|81:OutVektor[j]:= Sety.Sloy[OutSloy].Neuron[j].OutN; // Присваеваем выходной вектор.|4:end;|0:|50:Procedure CalculateNeuro; // Вычисление всей сети.|3:Var|63:i, j, k, a: Integer; // i - слой. j - нейрон. k - веса нейрона.|5:begin|51:For i:= 0 To High(Sety.Sloy) Do // перебераем слои.|5:begin|71:For j:= 0 To High(Sety.Sloy[i].Neuron) Do // перебераем нейроны в слое.|0:|0:|39:if i = 0 Then // если слой входной то..|85:Sety.Sloy[i].Neuron[j].OutN:= Sety.Sloy[i].Neuron[j].X[0] // входной сигнал = выходу.|44:Else // если слой внутренний или последний..|115:Sety.Sloy[i].Neuron[j].OutN:= NeuronSigmoid(Sety.Sloy[i].Neuron[j].X, Sety.Sloy[i].Neuron[j].W); // считаем нейрон.|10: // a:= 1;|56:if i < High(Sety.Sloy) Then // если не последний слой то|5:begin|81:For j:= 0 To High(Sety.Sloy[i+1].Neuron) Do // перебераем нейроны следующего слоя|86:For k:= 0 To High(Sety.Sloy[i].Neuron) Do // перебераем входы нейрона следующего слоя.|101:Sety.Sloy[i+1].Neuron[j].X[k]:= Sety.Sloy[i].Neuron[k].OutN; // присваеваем вых. просчитаных нейронов|40:end; // входам нейронов следующего слоя.|0:|0:|4:end;|4:end;|0:|4:end.|
}

карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Ответов: 307
Рейтинг: 26
#420: 2023-04-04 06:47:47 ЛС | профиль | цитата
Aziz писал(а):
Нейросеть

Где можно её использовать?
карма: 2
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)