Вверх ↑
Этот топик читают: Гость
Ответов: 590
Рейтинг: 19
#46: 2009-01-11 19:13:39 ЛС | профиль | цитата
Андрей. писал(а):
надоели твои дуплеты - стирай лишнее, не нервируй форумчан..

Ну я тут не причем... мышь такая... а при отправке я почему то вижу одно сообщение...
карма: 0

0
Ответов: 542
Рейтинг: 12
#47: 2009-01-11 20:03:43 ЛС | профиль | цитата
внутри компонента TCP_serverEx есть компонент TCP_connection а я егог не выжу в списке компонент раздела Internet, почему?
карма: 0

0
Ответов: 485
Рейтинг: 86
#48: 2009-01-11 20:14:12 ЛС | профиль | цитата
EcsTasY писал(а):
Ну я тут не причем... мышь такая... а при отправке я почему то вижу одно сообщение...
Так отредактировать потом свой двойной пост можно же? Даже картинку кнопки "Правка" тебе посылал.
карма: 0

0
Ответов: 542
Рейтинг: 12
#49: 2009-01-11 20:47:53 ЛС | профиль | цитата
И так добрался я до точки когда сервер должен отсылать файл клиенту и опять нужна помощь ваша, но при этом хочу сам разобратся
поэтому прошу вас
расписать как работает вот этот пример
code_11339.txt
Он что запоминает IP адреса подключенных клиентов. хочу знать что происходить в этой схеме.
------------ Дoбавленo:

помогите плиз разобратся как обится что бы компонент

#pas
Add(TCP_ServerEx,3547397,105,182)
{
ServerPort=534
}
BEGIN_SDK
Add(EditMultiEx,14296838,21,21)
{
WorkCount=#6:##open|8:##select|6:doSend|7:doClose|
EventCount=#11:onSendToAll|9:onConnect|12:onDisconnect|
VarCount=#7:##count|2:IP|
DataCount=#4:Data|
Width=174
Height=151
Point(##select)
Point(##count)
link(doSend,2556202:doSend,[(49,41)(49,76)])
link(doClose,2556202:doClose,[(45,48)(45,69)])
link(IP,2556202:IP,[(34,134)(83,134)])
}
Add(TCP_Connection,2556202,70,63)
{
link(onRead,14296838:onSendToAll,[(117,69)(117,27)])
link(onConnect,14296838:onConnect,[(148,76)(148,34)])
link(onDisconnect,14296838:onDisconnect,[(148,83)(148,41)])
link(Data,14296838:Data,[(76,42)(27,42)])
}
END_SDK

отсылал данные тому клиенту которому нужно а то у меня получается что, сервер всех подключает а данные отсылает последнему подключившемуся
может кто пример даст.

карма: 0

0
файлы: 1code_11339.txt [1013B] [161]
Ответов: 3851
Рейтинг: 159
#50: 2009-01-11 20:59:25 ЛС | профиль | цитата
afandi, когда постишь схему, выбирай пожалуйста "код без подцветки" - проще копировать..

afandi писал(а):
нутри компонента TCP_serverEx есть компонент TCP_connection а я егог не выжу в списке компонент раздела Internet, почему?
так задумано

afandi писал(а):
как работает вот этот пример
войди в TCP_serverEx (там где лежит TCP_connection), кликни по границе контейнера (рамочка с точками) и в свойствах нажми вкладку "точки" - читая их описания можно многое понять о работе элемента (и схемы)..
------------ Дoбавленo:

afandi писал(а):
отсылал данные тому клиенту которому нужно
ну так ты сначала выбери того, которому "нужно"..
карма: 0
начавший
0
Ответов: 542
Рейтинг: 12
#51: 2009-01-11 21:15:30 ЛС | профиль | цитата
Но это я уже сделал, не помогло.
суть проблемы такова:
1) клиент авторизуется
2) после авторизации сервер отдает ему текстовый файл
3) разрыв соединения с данным клиентом

и в таком режиме сервер должен обслужить десяток клиентов.

можеть выложить схемы?
Клиент:

#pas
Add(MainForm,2953706,21,105)
{
Width=587
Height=473
Point(onClose)
link(onCreate,3892390:doOpen,[(173,125)(173,251)])
link(onClose,3892390:doClose,[(173,132)(235,239)(256,239)])
}
Add(Menu,15478480,49,252)
{
Menu=#14:Получить прайс|15:Отправить прайс|
Point(onSelectNum)
link(onSelectNum,13034002:doEvent,[])
}
Add(IndexToChanel,13034002,98,259)
{
Count=4
link(onEvent1,16000270:doEvent1,[])
}
Add(Edit,6976912,350,189)
{
Left=355
Top=10
Text="534"
DataType=1
}
Add(Edit,7962037,252,70)
{
Left=30
Top=10
Text="4;id4"
}
Add(Label,4920964,112,7)
{
Left=10
Top=15
Width=15
Height=17
Caption="ID"
}
Add(Label,10621713,196,7)
{
Left=321
Top=13
Width=23
Height=17
Caption="Port"
}
Add(TCP_Client,3892390,294,245)
{
Port=534
IP="127.0.0.1"
link(onRead,5724270:doAdd,[(387,251)(387,237)])
link(onConnect,12904837:doMessage,[(345,258)(345,272)])
link(onDisconnect,6205397:doMessage,[(345,265)(345,321)])
link(IP,788135:Text,[(300,230)(258,230)])
link(Data,8659398:Value,[])
link(Port,6976912:Text,[(314,233)(356,233)])
}
Add(Label,2044784,70,7)
{
Left=201
Top=13
Width=35
Height=17
Caption="Server"
}
Add(Edit,788135,252,189)
{
Left=241
Top=13
Width=70
Text="127.0.0.1"
}
Add(Hub,16000270,147,259)
{
OutCount=3
link(onEvent1,7860795:doCharset,[(215,265)(215,139)])
link(onEvent2,3892390:doSend,[(237,272)(237,265)])
link(onEvent3,9885348:doEvent1,[(209,279)(209,342)])
}
Add(Memo,4203426,287,336)
{
Left=10
Top=60
Width=150
Height=245
link(Str,3892390:Active,[(293,306)(300,306)])
}
Add(Label,7071050,28,7)
{
Left=10
Top=40
Width=74
Height=17
Caption="log from debug"
}
Add(Charset,7860795,252,133)
{
Type=5
link(onCharset,8659398:doValue,[])
link(Text,7962037:Text,[])
}
Add(Memory,8659398,301,133)
{
}
Add(Hub,9885348,238,336)
{
InCount=2
OutCount=1
link(onEvent1,4203426:doAdd,[])
}
Add(ListBox,5724270,448,231)
{
Left=195
Top=90
Width=360
Height=230
}
Add(Message,12904837,364,266)
{
Message="Connect"
}
Add(Message,6205397,364,315)
{
Message="Disconnect"
}


Сервер:

#pas
Add(ListBox,7441850,189,273)
{
Left=10
Top=120
Width=545
Height=245
}
Add(MainForm,44932,7,175)
{
Width=677
Height=495
Point(onClose)
link(onCreate,4622343:doEvent1,[(55,195)(55,97)])
link(onClose,3547397:doClose,[(72,202)(72,209)])
}
Add(Charset,7860795,224,196)
{
Type=4
link(onCharset,10615378:doEvent1,[])
link(Text,16440180:GetData,[])
}
Add(Hub,10028629,168,189)
{
link(onEvent1,16440180:doData,[(192,195)(192,146)])
link(onEvent2,7860795:doCharset,[])
}
Add(EventFromData,16440180,224,140)
{
}
Add(Label,16130668,56,14)
{
Left=190
Top=20
Width=78
Height=17
Caption="Список всех id"
}
Add(Hub,4622343,70,91)
{
link(onEvent1,15102806:doEvent1,[])
link(onEvent2,3547397:##open,[(104,104)(104,188)])
}
Add(ChildPanelEx,15102806,392,91)
{
@Hint=#20:GetPriceList from ID|
}
BEGIN_SDK
Add(EditMultiEx,6732175,21,21)
{
WorkCount=#17:doEvent1=onCreate|18:doEvent11=IDclient|
VarCount=#15:GetData=IniFile|
Width=468
Height=256
link(doEvent1,14377671:doEvent1,[(56,27)(56,83)])
link(doEvent11,7130373:doEvent1,[(56,34)(56,181)])
link(GetData,10060848:GetData,[(27,267)(300,267)])
}
Add(Panel,3613333,406,231)
{
Left=30
Top=25
Width=95
HintManager="GetPriceFileName"
Caption="GetPriceFileName"
}
Add(Ini,9133590,224,224)
{
Section="pricelist"
Key="1"
Type=1
link(onResult,10060848:doData,[])
link(FileName,5946817:Result,[(230,177)(272,177)])
link(Key,3767585:GetData,[(244,166)(209,166)])
}
Add(Hub,14377671,91,77)
{
link(onEvent1,7266795:doPart,[])
link(onEvent2,5946817:doStrCat,[(131,90)(131,104)])
}
Add(Application,9184634,140,28)
{
}
Add(Memory,11572293,266,28)
{
}
Add(FilePart,7266795,140,77)
{
link(onPath,11572293:doValue,[(184,83)(184,34)])
link(FileName,9184634:AppFileName,[])
}
Add(StrCat,5946817,266,98)
{
Str2="pricelist.ini"
link(Str1,11572293:Value,[])
}
Add(EventFromData,3767585,203,119)
{
}
Add(Hub,7130373,91,175)
{
link(onEvent1,3767585:doData,[(194,181)(194,125)])
link(onEvent2,9133590:doRead,[(181,188)(181,230)])
}
Add(EventFromData,10060848,294,224)
{
}
END_SDK
Add(ChildPanelEx,10615378,287,196)
{
link(onPart,10085721:doEvent1,[(327,209)(327,146)])
}
BEGIN_SDK
Add(EditMultiEx,7925778,28,21)
{
WorkCount=#21:doEvent1=Autorization|
EventCount=#22:onFalse=NoAvtorization|9:onPart=ID|16:onSplit=Password|
Width=349
link(doEvent1,2143801:doEvent1,[(42,27)(42,118)])
}
Add(Panel,10187662,42,182)
{
Left=140
Top=45
Caption="Autorization"
}
Add(ArrayEnum,9214765,119,161)
{
link(onItem,7844330:doEvent1,[])
link(Array,3050409:Array,[(125,124)(132,124)])
}
Add(StrMask,5311414,217,161)
{
Point(doMask)
link(onFalse,7925778:onFalse,[(281,73)(313,73)(313,27)])
link(onTrue,1340932:doSplit,[])
link(Str,14970901:GetData,[])
}
Add(Hub,2143801,56,112)
{
link(onEvent1,14970901:doData,[])
link(onEvent2,9214765:doEnum,[(94,125)(94,167)])
}
Add(Hub,7844330,161,161)
{
link(onEvent1,5311414:doCompare,[])
link(onEvent2,5311414:doMask,[])
}
Add(EventFromData,14970901,217,112)
{
}
Add(StrPart,1340932,287,168)
{
Char=";"
link(onSplit,7925778:onSplit,[(348,174)(348,41)])
link(onPart,7925778:onPart,[(348,181)(348,34)])
}
Add(StrList,3050409,112,42)
{
Strings=#8:1;afandi|5:2;id2|5:3;id3|5:4;id4|
}
END_SDK
Add(FileStream,3310963,392,140)
{
link(FileName,15102806:GetData,[])
}
Add(Hub,10085721,336,140)
{
OutCount=4
link(onEvent1,15102806:doEvent11,[(380,146)(380,104)])
link(onEvent2,3310963:doOpen,[(380,153)(380,146)])
link(onEvent3,8776093:doConvert,[(380,160)(380,209)])
}
Add(Convertor,8776093,392,203)
{
Mode=11
link(onResult,1315403:doValue,[])
link(Data,3310963:Stream,[])
}
Add(Message,7251272,140,287)
{
Message="Disconnect"
Caption="client"
}
Add(DoData,14941250,105,350)
{
link(onEventData,3547397:doSend,[(149,363)(149,279)(93,279)(93,202)])
link(Data,1315403:Value,[(111,292)(447,292)])
}
Add(Memory,1315403,441,203)
{
link(onData,14941250:doData,[(485,209)(485,283)(93,283)(93,356)])
}
Add(TCP_ServerEx,3547397,105,182)
{
ServerPort=534
link(onSendToAll,10028629:doEvent1,[(159,188)(159,195)])
link(onConnect,7441850:doAdd,[(170,195)(170,279)])
link(onDisconnect,7251272:doMessage,[(163,202)(163,226)(128,226)(128,293)])
}
BEGIN_SDK
Add(EditMultiEx,14296838,21,21)
{
WorkCount=#6:##open|8:##select|6:doSend|7:doClose|
EventCount=#11:onSendToAll|9:onConnect|12:onDisconnect|
VarCount=#7:##count|2:IP|
DataCount=#4:Data|
Width=174
Height=151
Point(##select)
Point(##count)
link(doSend,2556202:doSend,[(49,41)(49,76)])
link(doClose,2556202:doClose,[(45,48)(45,69)])
link(IP,2556202:IP,[(34,134)(83,134)])
}
Add(TCP_Connection,2556202,70,63)
{
link(onRead,14296838:onSendToAll,[(117,69)(117,27)])
link(onConnect,14296838:onConnect,[(148,76)(148,34)])
link(onDisconnect,14296838:onDisconnect,[(148,83)(148,41)])
link(Data,14296838:Data,[(76,42)(27,42)])
}
END_SDK


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

Вроде мысль пришла хорошая как решить преблему, я опишу если что не так поправьте меня пожалуйста:
когда от клиента получают данные вместе с даннимы в потоке нужно запомнить и IP адрес клиента
и возвращаемые данные отправить уже по известному IP клиента.

Можно ли это реализовать и каким образом и на какую точку передать iP клеинта?

карма: 0

0
Ответов: 3851
Рейтинг: 159
#52: 2009-01-11 21:23:05 ЛС | профиль | цитата
не заморачивайся с IP - это не твоя задача. При каждом подключении клиента, создаётся новая схема контейнера TCP_serverEx (это и есть технология динамических контейнеров) со своим хэндлом. Соединение можно использовать пока оно активно, данные отправляются тому клиенту, хэндл (или номер) схемы которого был выбран (select) перед отправкой..
карма: 0
начавший
0
Ответов: 542
Рейтинг: 12
#53: 2009-01-11 21:57:09 ЛС | профиль | цитата
Андрей. писал(а):
это и есть технология динамических контейнеров)
В начале я остановился на этом варианте но все таки до конца не понял суть его работы.
межеть быть еще у кого найдутся примеры схем в наглядной форме?

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

Переместил ту часть схемы которая отвечает в контейнер TCP_serverEx добавил новую точку что бы передать в контейнре параметры приложения (путь к исполняему файлу)
и начались проблемы. в контейнер не передается данные по точке которую я сделал


#pas
Add(MainForm,44932,7,175)
{
Width=677
Height=495
Point(onClose)
link(onCreate,4622343:doEvent1,[(55,195)(55,125)])
link(onClose,3547397:doClose,[(121,202)(121,153)])
}
Add(ListBox,7441850,364,112)
{
Left=10
Top=120
Width=160
Height=245
}
Add(Label,16130668,56,14)
{
Left=190
Top=20
Width=78
Height=17
Caption="Список всех id"
}
Add(Hub,4622343,91,119)
{
link(onEvent1,3547397:doEvent11,[])
link(onEvent2,3547397:##open,[])
}
Add(TCP_ServerEx,3547397,203,119)
{
ServerPort=534
link(onSendToAll,7441850:doAdd,[(299,125)(299,118)])
link(onDisconnect,14147918:doAdd,[(317,139)(317,209)])
}
BEGIN_SDK
Add(EditMultiEx,14296838,21,21)
{
WorkCount=#18:doEvent11=OnCreate|6:##open|8:##select|6:doSend|7:doClose|
EventCount=#11:onSendToAll|9:onConnect|12:onDisconnect|
VarCount=#7:##count|2:IP|
Width=482
Height=263
Point(##select)
Point(##count)
link(doEvent11,9899310:doEvent1,[(193,27)(193,90)])
link(IP,2556202:IP,[(34,134)(83,134)])
link(doClose,2556202:doClose,[(45,55)(45,69)])
}
Add(TCP_Connection,2556202,70,63)
{
link(onRead,10028629:doEvent1,[(121,69)(121,97)])
link(onConnect,14296838:onConnect,[(442,76)(442,34)])
link(onDisconnect,14296838:onDisconnect,[(442,83)(442,41)])
}
Add(Charset,7860795,217,154)
{
Type=4
link(onCharset,16058745:doEvent1,[])
link(Text,16440180:GetData,[])
}
Add(Hub,10028629,126,91)
{
OutCount=3
link(onEvent1,14296838:onSendToAll,[(341,97)(341,27)])
link(onEvent2,16440180:doData,[(184,104)(184,111)])
link(onEvent3,7860795:doCharset,[(184,111)(184,160)])
}
Add(EventFromData,16440180,217,105)
{
}
Add(ChildPanelEx,9899310,364,84)
{
@Hint=#20:GetPriceList from ID|
}
BEGIN_SDK
Add(EditMultiEx,6732175,35,21)
{
WorkCount=#17:doEvent1=onCreate|18:doEvent11=IDclient|
VarCount=#15:GetData=IniFile|
Width=468
Height=256
link(doEvent1,14377671:doEvent1,[(70,27)(70,83)])
link(doEvent11,7130373:doEvent1,[(63,34)(63,181)])
link(GetData,10060848:GetData,[(41,267)(314,267)])
}
Add(Panel,3613333,420,231)
{
Left=30
Top=25
Width=95
HintManager="GetPriceFileName"
Caption="GetPriceFileName"
}
Add(Ini,9133590,238,224)
{
Section="pricelist"
Key="1"
Type=1
link(onResult,10060848:doData,[])
link(FileName,5946817:Result,[(244,177)(286,177)])
link(Key,3767585:GetData,[(258,166)(223,166)])
}
Add(Hub,14377671,105,77)
{
link(onEvent1,7266795:doPart,[])
link(onEvent2,5946817:doStrCat,[(145,90)(145,104)])
}
Add(Application,9184634,154,28)
{
}
Add(Memory,11572293,280,28)
{
}
Add(FilePart,7266795,154,77)
{
link(onPath,11572293:doValue,[(198,83)(198,34)])
link(FileName,9184634:AppFileName,[])
}
Add(StrCat,5946817,280,98)
{
Str2="pricelist.ini"
link(Str1,11572293:Value,[])
}
Add(EventFromData,3767585,217,119)
{
}
Add(Hub,7130373,70,175)
{
link(onEvent1,3767585:doData,[(208,181)(208,125)])
link(onEvent2,9133590:doRead,[(195,188)(195,230)])
}
Add(EventFromData,10060848,308,224)
{
}
END_SDK
Add(ChildPanelEx,16058745,259,154)
{
link(onPart,10085721:doEvent1,[(299,167)(299,146)])
}
BEGIN_SDK
Add(EditMultiEx,7925778,28,21)
{
WorkCount=#21:doEvent1=Autorization|
EventCount=#22:onFalse=NoAvtorization|9:onPart=ID|16:onSplit=Password|
Width=349
link(doEvent1,2143801:doEvent1,[(42,27)(42,118)])
}
Add(Panel,10187662,42,182)
{
Left=140
Top=45
Caption="Autorization"
}
Add(ArrayEnum,9214765,119,161)
{
link(onItem,7844330:doEvent1,[])
link(Array,3050409:Array,[(125,124)(132,124)])
}
Add(StrMask,5311414,217,161)
{
Point(doMask)
link(onFalse,7925778:onFalse,[(281,73)(313,73)(313,27)])
link(onTrue,1340932:doSplit,[])
link(Str,14970901:GetData,[])
}
Add(Hub,2143801,56,112)
{
link(onEvent1,14970901:doData,[])
link(onEvent2,9214765:doEnum,[(94,125)(94,167)])
}
Add(Hub,7844330,161,161)
{
link(onEvent1,5311414:doCompare,[])
link(onEvent2,5311414:doMask,[])
}
Add(EventFromData,14970901,217,112)
{
}
Add(StrPart,1340932,287,168)
{
Char=";"
link(onSplit,7925778:onSplit,[(348,174)(348,41)])
link(onPart,7925778:onPart,[(348,181)(348,34)])
}
Add(StrList,3050409,112,42)
{
Strings=#8:1;afandi|5:2;id2|5:3;id3|5:4;id4|
}
END_SDK
Add(FileStream,3310963,364,140)
{
link(FileName,9899310:GetData,[])
}
Add(Hub,10085721,308,140)
{
OutCount=4
link(onEvent1,9899310:doEvent11,[(352,146)(352,97)])
link(onEvent2,3310963:doOpen,[(352,153)(352,146)])
link(onEvent3,8776093:doConvert,[(352,160)(352,195)])
}
Add(Convertor,8776093,364,189)
{
Mode=11
link(onResult,1315403:doValue,[])
link(Data,3310963:Stream,[])
}
Add(DoData,14941250,70,217)
{
link(onEventData,2556202:doSend,[(114,223)(114,149)(58,149)(58,76)])
link(Data,1315403:Value,[(76,205)(251,205)(251,233)(426,233)])
}
Add(Memory,1315403,420,189)
{
link(onData,14941250:doData,[(463,195)(463,259)(58,259)(58,223)])
}
END_SDK
Add(ListBox,503834,259,259)
{
Left=185
Top=120
Width=160
Height=245
}
Add(ListBox,14147918,399,203)
{
Left=360
Top=120
Width=160
Height=245
}
Add(DoData,3003125,210,259)
{
link(onEventData,503834:doAdd,[])
link(Data,3547397:IP,[])
}


Разобрался с этим, сам не знаю как .

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



карма: 0

0
Ответов: 3851
Рейтинг: 159
#54: 2009-01-11 22:35:40 ЛС | профиль | цитата
afandi, для того, чтобы в контейнер, в данном случае динамический, что-то передать, надо сначала выбрать - в какой экземпляр схемы контейнера, это "что-то" передавать. Понятно что, если не создано ни одного экземпляра, то и передавать некуда..
Попробуй, для начала, поменять очерёдность в событих хаба, работающего от точки onCreate-MainForm..

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


afandi писал(а):
Подкинетье пожалуйста примеров работы с ZLIB
он у тебя есть..
карма: 0
начавший
0
Ответов: 542
Рейтинг: 12
#55: 2009-01-12 10:30:11 ЛС | профиль | цитата
Андрей. писал(а):
Понятно что, если не создано ни одного экземпляра, то и передавать некуда..

С этим я разобрался теперь передаю данные на момент создания контейнера и все заработало.

в вот внутри контейнера ZLIB теперь у меня не работает. в общем не могу понять правильно ло я поток на ZLIB передаю а снего на клиента

Посмотрите пожалуйста
code_11340.txt


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

Как узнать о завершении передачи данных клеинту в компненте TCP_serverEx ?
мне нужно закрыть соединения после завершения передачи или принятия данных.
карма: 0

0
файлы: 1code_11340.txt [5.5KB] [141]
Ответов: 3851
Рейтинг: 159
#56: 2009-01-12 11:29:23 ЛС | профиль | цитата
afandi, открой для себя Debug (и особенно его свойство Synchronize)..



карма: 0
начавший
1
файлы: 1fastdebuginsert.png [1.6KB] [270]
Голосовали:afandi
Ответов: 542
Рейтинг: 12
#57: 2009-01-12 11:49:10 ЛС | профиль | цитата
А более подробно где можно почитать об этом
карма: 0

0
Ответов: 3851
Рейтинг: 159
#58: 2009-01-12 11:53:14 ЛС | профиль | цитата
вкладка помощники, второй элемент, нажми на нём F1..
карма: 0
начавший
1
Голосовали:afandi
Ответов: 542
Рейтинг: 12
#59: 2009-01-12 15:55:55 ЛС | профиль | цитата
Кто мне советовал для шифровки испльзовать Конвертор winToBase64 компонента Charset?
ее нельзя использовать для таких целей целый день потерял пока схему прозванивал в поисках ошибка.
code_11346.txt

Подскажите пожалуйста какой либо другой метод шифровки пусть даже самый простой
карма: 0

0
файлы: 1code_11346.txt [7.3KB] [145]
Разработчик
Ответов: 26151
Рейтинг: 2127
#60: 2009-01-12 16:15:04 ЛС | профиль | цитата
afandi писал(а):
Конвертор winToBase64 компонента Charset?
ее нельзя использовать для таких целей целый день потерял пока схему прозванивал в поисках ошибк

И почему же Все почтовики работают с таким методом кодирования
------------ Дoбавленo:

afandi, и вообще, не ставь подсветку pas, лучше ничего не ставь. И потрудись выкладывать схемы с ошибками из макимум десяти элементов, а не портянки
карма: 22

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