Как динамически вставить в одну вьюшку в другую в заданном месте? Например, имеется тип:
Код:
stamp = POINTER TO RECORD (Views.View)
sought, fixed: BOOLEAN;
END;
его отрисовка и поведение и инициация:
Код:
PROCEDURE GetThickness (f: Views.Frame): INTEGER;
BEGIN
RETURN 10 * f.dot
END GetThickness;
PROCEDURE GetSideSize (f: Views.Frame): INTEGER;
BEGIN
RETURN 100 * f.dot
END GetSideSize;
PROCEDURE (obj: stamp) Restore (f: Views.Frame; l, t, r, b: INTEGER);
VAR
sideSize, thickness, space: INTEGER;
BEGIN
sideSize := GetSideSize (f);
thickness := GetThickness (f);
space := thickness * 2;
f.DrawRect (0, 0, sideSize, sideSize, thickness, Ports.grey25)
END Restore;
PROCEDURE (obj: stamp) HandleCtrlMsg (f: Views.Frame; VAR msg: Controllers.Message; VAR focus: Views.View);
VAR
sideSize, thickness, space: INTEGER;
BEGIN
WITH msg: Controllers.TrackMsg DO
IF ~obj.fixed THEN
sideSize := GetSideSize (f);
thickness := GetThickness (f);
space := thickness * 2;
IF obj.sought THEN
f.DrawLine (space, space, sideSize - space, sideSize - space, thickness, Ports.red);
f.DrawLine (sideSize - space, space, space, sideSize - space, thickness, Ports.red);
f.DrawLine (sideSize - space, space, space, sideSize - space, thickness, Ports.red);
ELSE
f.DrawLine (space, 40 * f.dot, 50 * f.dot, sideSize - space, thickness, Ports.green);
f.DrawLine (50 * f.dot, sideSize - space, sideSize - space, space, thickness, Ports.green);
END
END
ELSE
END
END HandleCtrlMsg;
PROCEDURE (obj: stamp) Init (flag: BOOLEAN), NEW;
BEGIN
obj.fixed := FALSE;
obj.sought := flag
END InitT;
Создаю два объекта и инициализирую их по-разному:
Код:
NEW (obj1);
obj1.Init (TRUE);
NEW (obj2);
obj2.Init (FALSE);
Как вставить эти две въюшки динамически одну под другой в третью, предположим в белый квадрат и как динамически их удалить оттуда?