Вверх ↑
Этот топик читают: Гость
Администрация
Ответов: 15278
Рейтинг: 1514
#61: 2009-01-21 15:51:19 ЛС | профиль | цитата
одиночный для совместимости с MultiElement
карма: 26
0
Ответов: 2125
Рейтинг: 159
#62: 2009-01-21 16:23:37 ЛС | профиль | цитата
Dilma писал(а):
приняв из потока указатель(выданный через onAdd) ретранслирует его в ClassObject через менеджера

Я думал, что у ClassObject будет специальная точка ##set, которая и установит указатель (в случае, если он имеет подходящий тип).
А менеджер, не в смысле runtime, а только для среды, чтобы она знала, какие точки показать у ClassObject.
карма: 1

0
Разработчик
Ответов: 25655
Рейтинг: 2085
#63: 2009-01-21 16:51:32 ЛС | профиль | цитата
Dilma, можешь смотреть PolyMorph, я его выложил
карма: 19

0
Администрация
Ответов: 15278
Рейтинг: 1514
#64: 2009-01-21 16:55:17 ЛС | профиль | цитата
tsdima писал(а):
Я думал, что у ClassObject будет специальная точка ##set

хотелось бы избавится от наличия таких точек
карма: 26
0
Ответов: 2125
Рейтинг: 159
#65: 2009-01-21 17:04:15 ЛС | профиль | цитата
Dilma писал(а):
хотелось бы избавится от наличия таких точек

Но ведь в MultielementEx они никого не пугают? И потом, избавиться - значит будет невидимая связь. Мне как-то не очень нравится...
карма: 1

0
Администрация
Ответов: 15278
Рейтинг: 1514
#66: 2009-01-21 18:51:20 ЛС | профиль | цитата
tsdima, ну хорошо. В таком случае как ты собираешься извещать ClassObject о невалидном более указателе на объект? Еще одну точку ##clear делать или вводить указатель специального типа (nil, NULL...) для подачи на ##set
------------ Дoбавленo:

пример из пакета отображает только первую добавляемую фигуру.
зачем создается объект базового класса?
карма: 26
0
Разработчик
Ответов: 25655
Рейтинг: 2085
#67: 2009-01-21 19:05:31 ЛС | профиль | цитата
Dilma писал(а):
пример из пакета отображает только первую добавляемую фигуру

Я, вроде, поставил WorkScheme=All. Или я не ту схему сохранил.
Dilma писал(а):
зачем создается объект базового класса?

Но имя-то его существует и он есть всегда, почему он не должен быть в списке, как объект по-умолчанию. К нему можно обратиться по индексу 0, или по имени base, но я не создаю имя base, оно уже присутствует. Почему его нельзя использовать как одну из схем
------------ Дoбавленo:

Понимаещь, тут проблема возникла не совсем понятная, имя-то есть. Проталкиваешь первую схему, а она сохраняется под индексом 0 и имеет имя base, и все имена смещаются по отношению к объектам. По индексу выйти можно, а вот по имени, уже фиг
карма: 19

0
Администрация
Ответов: 15278
Рейтинг: 1514
#68: 2009-01-21 19:07:20 ЛС | профиль | цитата
nesco писал(а):
Я, вроде, поставил WorkScheme=All. Или я не ту схему сохранил.

FWorkScheme всегда 0.

nesco писал(а):
Но имя-то его существует и он есть всегда

это не так.

nesco писал(а):
Почему его нельзя использовать как одну из схем

я ничего не говорил про использование - я спросил, зачем и для чего создается и добавляется элемент базового класса? в схеме Polymorph.sha зачем мне нужен объект базового класса?
------------ Дoбавленo:

nesco писал(а):
Понимаещь, тут проблема возникла не совсем понятная, имя-то есть. Проталкиваешь первую схему, а она сохраняется под индексом 0 и имеет имя base, и все имена смещаются по отношению к объектам. По индексу выйти можно, а вот по имени, уже фиг

ну так проблему решать надо, а не затыкать ее
------------ Дoбавленo:

дублирование св-ва _prop_WorkScheme полем FWorkScheme тоже мне не понятно.
карма: 26
0
Разработчик
Ответов: 25655
Рейтинг: 2085
#69: 2009-01-21 19:14:53 ЛС | профиль | цитата
Только что дома обновился и проверил, пример работает нормально и отображает все фигуры
------------ Дoбавленo:

Dilma писал(а):
FWorkScheme всегда 0

Ну не может быть такого, у меня-то работает.
Dilma писал(а):
дублирование св-ва _prop_WorkScheme полем FWorkScheme тоже мне не понятно

Да это осталось после того, как я исправил инициализацию свойст в CodeGen для полиморфа, это просто надо убрать.
Dilma писал(а):
это не так

Я специально проверял список -- первым пунктом там base, интересно и когда его там нет
Dilma писал(а):
ну так проблему решать надо, а не затыкать ее

Но это не окончателная версия, а прототип. В спокойной обстановке можно будет додумать дальше
карма: 19

0
Ответов: 2125
Рейтинг: 159
#70: 2009-01-21 19:38:19 ЛС | профиль | цитата
Dilma писал(а):
как ты собираешься извещать ClassObject о невалидном более указателе на объект?

А зачем извещать? Вот как, например, реагирует ##hselect, если ему подать неправильный handle? Просто ничего не делает. Так и тут.
Нужно только предусмотреть механизм проверки правильности указателя. Т.е. получая указатель, ClassObject может сохранить также ссылку на родительский список, и потом проверять в этом списке наличие данного объекта. Непонятно только, что делать, если родительский список располагался где-то в динамическом контейнере, и его уничтожили. Хотя, сложно это всё. Проще действительно предусмотреть механизм извещения об удалении объекта.
------------ Дoбавленo:

А можно ещё хранить глобальный список, как в новом TCP.pas
карма: 1

0
Администрация
Ответов: 15278
Рейтинг: 1514
#71: 2009-01-21 21:02:01 ЛС | профиль | цитата
nesco, зачем в кодогенераторе это?

#pas
if i = 0 then pcr.IBody.Add(' OnCreate := Create_hi' + cn + ';');

nesco писал(а):
Я специально проверял список -- первым пунктом там base, интересно и когда его там нет

речь не о списке классов - речь о списке объектов FChilds

tsdima писал(а):
А зачем извещать?

мы все же допускаем ситуацию, при которой к схеме могут обратиться при не заданном объекте. Я не считаю, что у метода ##set такая большая функциональная нагрузка, что его необходимо визуализировать и тем более тянуть до него трассы при пазных уровнях вложенности ClassObject и onAdd
карма: 26
0
Ответов: 2125
Рейтинг: 159
#72: 2009-01-22 16:19:42 ЛС | профиль | цитата
Немного подкорректировал пример:
code_11534.txt
карма: 1

0
файлы: 1code_11534.txt [8.1KB] [289]
Разработчик
Ответов: 25655
Рейтинг: 2085
#73: 2009-01-22 16:32:06 ЛС | профиль | цитата
tsdima, обновился бы ты, его заменили уже.

Вот твой пример для новой версии



Add(MainForm,6720691,140,154)
{
link(onCreate,15525783:doEvent1,[])
}
Add(PaintBox,11954044,259,259)
{
Left=30
Top=25
Width=320
Height=230
Color=12632256
Point(onMouseMove)
Point(MouseX)
Point(MouseY)
Point(onMouseUp)
Point(onMouseDown)
link(onBeforeDraw,8604724:doData,[])
link(onMouseMove,16770553:doEvent1,[(299,272)(299,335)])
link(onMouseUp,9190473:doWork1,[])
link(onMouseDown,9190473:doWork2,[])
}
Add(PolymorphMulti,15277182,483,175)
{
Childrens=#3:box|6:circle|
Selected="box"
WorkScheme=1
link(onTrue,4133194:doValue,[(527,181)(527,328)])
link(MoveFlag,13660411:Var2,[])
}
BEGIN_SDK
Add(EditPolyMulti,14470326,21,21)
{
WorkCount=#59:##Add=Создает дочерний контейнер по указанному имени класса|6:doDraw|7:doCheck|
EventCount=#6:onTrue|
DataCount=#8:MoveFlag|
}
END_SDK
BEGIN_SDK
Add(EditPolyMulti,9034777,21,21)
{
WorkCount=#59:##Add=Создает дочерний контейнер по указанному имени класса|6:doDraw|7:doCheck|
EventCount=#6:onTrue|
DataCount=#8:MoveFlag|
Width=349
Height=361
link(##Add,3649181:doRandom,[(42,27)(42,111)])
link(doDraw,3464998:doDraw,[(36,34)(36,251)])
link(doCheck,11828891:doValue,[(31,41)(31,321)])
}
Add(Img_Rectangle,3464998,119,245)
{
Point2AsOffset=0
Point(Point1)
Point(Point2)
link(Point1,3622762:Var2,[])
link(Point2,13382430:Var1,[(146,226)])
}
Add(PointXY,14495459,119,175)
{
link(X,138132:Value,[(125,155)(314,155)])
link(Y,2282438:Value,[(132,163)(209,163)])
}
Add(PointXY,6924954,168,175)
{
X=40
Y=30
}
Add(Random,15978066,252,105)
{
Max=200
link(onRandom,16150513:doWork2,[])
}
Add(Random,3649181,147,105)
{
Max=200
link(onRandom,10992322:doWork2,[])
}
Add(PointInRect,2858558,168,315)
{
Point2AsOffset=0
link(onTrue,5421514:doEvent1,[])
link(RPoint1,3622762:Var3,[(181,233)])
link(RPoint2,13382430:Var3,[(188,226)])
}
Add(MathParse,755789,119,315)
{
MathStr="%2*65536 + %1"
ResultType=0
link(onResult,2858558:doCheck,[])
}
Add(GetDataEx,3622762,126,224)
{
link(Data,14495459:Point,[(139,221)(125,221)])
}
Add(GetDataEx,13382430,161,217)
{
link(Data,6924954:Point,[])
}
Add(DoData,3314029,266,322)
{
Data=String(box)
link(onEventData,9034777:onTrue,[(362,328)(362,27)])
}
Add(Memory,138132,308,105)
{
}
Add(Memory,2282438,203,105)
{
link(onData,15978066:doRandom,[])
}
Add(Hub,5421514,224,315)
{
link(onEvent1,10921358:doCompare,[(245,321)(245,303)(51,303)(51,69)])
link(onEvent2,3314029:doData,[])
}
Add(MT_MultiData,8516839,105,63)
{
Point(Data)
link(onData1,1594125:doOperation,[])
link(onData2,14957595:doOperation,[])
link(Data,11828891:Value,[(111,56)(89,56)(89,355)(83,355)])
}
Add(MT_Memory,11828891,77,315)
{
link(onData,755789:doCalc,[])
}
Add(HubEx,16150513,294,98)
{
link(onEvent,138132:doValue,[])
}
Add(HubEx,10992322,189,98)
{
link(onEvent,2282438:doValue,[])
}
Add(If_else,10921358,63,63)
{
Op2=Integer(1)
link(onTrue,8516839:doSeparateMT,[])
link(Op1,9034777:MoveFlag,[(69,24)(27,24)])
}
Add(Math,1594125,147,63)
{
OpType=1
Op2=15
ResultType=0
link(onResult,10992322:doWork1,[(193,69)])
}
Add(Math,14957595,252,70)
{
OpType=1
Op2=20
ResultType=0
link(onResult,16150513:doWork1,[(298,76)])
}
END_SDK
BEGIN_SDK
Add(EditPolyMulti,14853045,21,21)
{
WorkCount=#59:##Add=Создает дочерний контейнер по указанному имени класса|6:doDraw|7:doCheck|
EventCount=#6:onTrue|
DataCount=#8:MoveFlag|
Width=419
Height=305
link(##Add,3649181:doRandom,[(65,27)(65,90)])
link(doDraw,9553048:doDraw,[(53,34)(53,209)])
link(doCheck,11828891:doValue,[(39,41)(39,265)])
}
Add(Img_Ellipse,9553048,126,203)
{
Point2AsOffset=0
Point4AsOffset=0
Point(Point1)
Point(Point2)
link(Point1,14495459:Point,[])
link(Point2,6924954:Point,[(153,195)(195,195)])
}
Add(MT_Get,4007400,105,259)
{
link(onData,16295382:doCalc,[])
link(onGet,5427215:doCalc,[])
}
Add(MathParse,5427215,154,266)
{
MathStr="%2 - (%1 + 15)"
link(X1,3225202:Var2,[(160,249)(181,249)])
}
Add(MathParse,16295382,203,259)
{
MathStr="%2 - (%1 + 15)"
link(onResult,11493549:doCalc,[])
link(X1,1550900:Var2,[(209,199)(251,199)])
}
Add(MathParse,11493549,259,259)
{
MathStr="%1*%1 + %2*%2"
link(onResult,10616349:doCompare,[])
link(X2,5427215:Result,[(272,247)(244,247)(244,308)(160,308)])
}
Add(If_else,10616349,308,259)
{
Type=1
Op2=Integer(225)
link(onTrue,5786076:doEvent1,[])
}
Add(DoData,8631386,385,266)
{
Data=String(circle)
link(onEventData,14853045:onTrue,[(429,272)(429,27)])
}
Add(PointXY,14495459,140,154)
{
link(X,1550900:Var1,[(146,135)])
link(Y,3225202:Var1,[(153,142)])
}
Add(PointXY,6924954,189,154)
{
X=30
Y=30
}
Add(Random,15978066,273,84)
{
Max=200
link(onRandom,16150513:doWork2,[])
}
Add(Random,3649181,168,84)
{
Max=200
link(onRandom,10992322:doWork2,[])
}
Add(Memory,138132,329,84)
{
}
Add(Memory,2282438,224,84)
{
link(onData,15978066:doRandom,[])
}
Add(MT_MultiData,8516839,126,42)
{
Point(Data)
link(onData1,1594125:doOperation,[])
link(onData2,14957595:doOperation,[])
link(Data,11828891:Value,[(132,35)(97,35)(97,299)(62,299)])
}
Add(HubEx,16150513,315,77)
{
link(onEvent,138132:doValue,[])
}
Add(HubEx,10992322,210,77)
{
link(onEvent,2282438:doValue,[])
}
Add(If_else,10921358,84,42)
{
Op2=Integer(1)
link(onTrue,8516839:doSeparateMT,[])
link(Op1,14853045:MoveFlag,[(90,24)(27,24)])
}
Add(Math,1594125,168,42)
{
OpType=1
Op2=15
ResultType=0
link(onResult,10992322:doWork1,[(214,48)])
}
Add(Math,14957595,273,49)
{
OpType=1
Op2=15
ResultType=0
link(onResult,16150513:doWork1,[(319,55)])
}
Add(MT_Memory,11828891,56,259)
{
link(onData,4007400:doGet,[])
}
Add(GetDataEx,1550900,238,126)
{
Angle=1
link(Data,138132:Value,[(335,135)])
}
Add(GetDataEx,3225202,168,133)
{
Angle=1
link(Data,2282438:Value,[(230,142)])
}
Add(Hub,5786076,357,259)
{
link(onEvent1,10921358:doCompare,[(377,265)(377,246)(72,246)(72,48)])
link(onEvent2,8631386:doData,[])
}
END_SDK
Add(Hub,15525783,196,168)
{
OutCount=3
link(onEvent1,3649181:doRandomize,[(217,174)(217,146)])
link(onEvent2,1187935:doEnum,[])
link(onEvent3,10639111:doWork1,[(242,188)])
}
Add(StrList,11127059,280,112)
{
Strings=#3:box|6:circle|3:box|
}
Add(ArrayEnum,1187935,294,175)
{
link(onItem,15277182:##Add,[])
link(Array,11127059:Array,[])
}
Add(DoData,8604724,364,259)
{
link(onEventData,15277182:doDraw,[(440,265)(440,188)])
link(Data,11954044:Bitmap,[(370,244)(250,244)(250,304)(265,304)])
}
Add(MT_Add,5248943,420,336)
{
link(onAdd,15277182:doCheck,[(465,342)(465,195)])
link(Data,11954044:MouseX,[(426,321)(272,321)])
}
Add(DoData,7775177,371,336)
{
link(onEventData,5248943:doAdd,[])
link(Data,11954044:MouseY,[(377,313)(279,313)])
}
Add(Memory,4133194,539,322)
{
}
Add(Hub,16770553,322,329)
{
OutCount=4
link(onEvent1,4133194:doClear,[])
link(onEvent2,7775177:doData,[])
link(onEvent3,947192:doData,[(355,349)(355,377)])
link(onEvent4,1476659:doCompare,[(348,356)(348,375)(153,375)(153,272)])
}
Add(DoData,947192,539,371)
{
link(onEventData,6720691:doCaption,[(579,377)(579,412)(127,412)(127,160)])
link(Data,4133194:Value,[])
}
Add(ChanelToIndex,9190473,308,273)
{
link(onIndex,4231362:doValue,[(353,279)(353,125)])
}
Add(Memory,4231362,483,119)
{
}
Add(Hub,12791026,210,266)
{
link(onEvent1,11954044:doClear,[])
link(onEvent2,10639111:doWork2,[(231,279)(231,265)])
}
Add(HubEx,10639111,238,252)
{
link(onEvent,11954044:doRefresh,[])
}
Add(If_else,1476659,168,266)
{
Op2=Integer(1)
link(onTrue,12791026:doEvent1,[])
link(Op1,13660411:Var1,[(174,222)(402,222)(402,163)])
}
Add(GetDataEx,13660411,476,154)
{
link(Data,4231362:Value,[])
}
Add(Random,3649181,224,133)
{
Max=200
}

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

Может дополнения какие предложишь. Кстати, там схему по имени выбирать можно
карма: 19

0
Администрация
Ответов: 15278
Рейтинг: 1514
#74: 2009-01-23 00:43:57 ЛС | профиль | цитата
между прочим такая реализация не подходит для проектирования на его основе PageControl - в нем каждая строка с названием вкладки должна пораждать стандартный контейнер со своим набором точек.
карма: 26
0
Разработчик
Ответов: 25655
Рейтинг: 2085
#75: 2009-01-23 11:18:54 ЛС | профиль | цитата
Dilma, слушай, а сделать поддержку полиморфа в среде нельзя Хотел создать ChildPanelPoly, а не фига не получилось пишит нет такого элемента. Делал все полностью по аналогии ChildPanelEx, естественно, с другим классом. Порылся и нашел, что MultiElementEx прописан в самом HiAsme.
карма: 19

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