Добавлено: 05 дек 2006, 08:31
Alexander
думаю тогда Max_fin прав... только встроенными интерфейсами.
см. код выше.
думаю тогда Max_fin прав... только встроенными интерфейсами.
см. код выше.
Обсуждение различных вопросов, связанных с сопровождением, администрированием и программированием
https://ns1.tyumbit.ru/
Код: Выделить всё
Interface NameInterface
Window NameWindow
browse br1
browse br2
end;
tabbedSheet tb
Screen scName 'Вкладка 1'
embeded embName 'Вкладка 2' interface
end;
HandleEvent
cmInit : {
<инициализация>
BindEmbeddedInterface ( embName, 'NameInterface', 'NameWindow');
}
end;
end.
А можно пример кода отправки сообщений родителю или как передавать ссылку на родительский интерфейс. Пожалуйста.galover писал(а):ex3em
Например, посылом сообщений. Потому как embedded вообще не знает о родителе ничего. Ну или как вариант, передавать ссылку на родительский фейс в embedded, но это увеличит связность системы
Код: Выделить всё
#component "Test"
//------------------ Child (embedded) ------------------------
objInterface IChild;
public event procedure OnSomeActionEvent; // Объявляем событие
end;
vipInterface Child implements IChild;
interface Child;
handleEvent
// Где-то инициируем событие
cmSomeCommand: OnSomeActionEvent();
end;
end.
//------------------ Parent ------------------------
interface Parent
var _child : Test::Child new;
// Описание embedded области
embedded embName interface _child;
end;
// Описываем обработчик события
private procedure OnSomeActionEventHandler;
{
Message('Пришло событие из встроенного интерфейса!');
}
handleEvent
cmInit:
{
// Подписываемся на событие embedded интерфейса
BindEvent(OnSomeActionEventHandler, _child.OnSomeActionEvent);
}
end;
end.
Код: Выделить всё
#component "Test"
//------------------ Parent ------------------------
objInterface IParent;
public procedure CallParent;
end;
vipInterface Parent implements IParent;
//------------------ Child (embedded) ------------------------
vipInterface Child;
public:
constructor Init;
constructor InitWithParent(IParent parent);
end;
interface Child
var _parent : Test::IParent;
constructor Init;
{
result := true;
}
constructor InitWithParent(IParent parent);
{
_parent := parent;
result := (_parent <> nullRef);
}
handleEvent:
// Где-то вызываем родительскую процедуру
cmSomeCommand: _parent.CallParent();
end;
end.
interface Parent
var _child : Test::Child noauto;
// Описание embedded области
embedded embName interface _child;
end;
public procedure IParent.CallParent;
{
Message('Вызвали родительский интерфейс!');
}
handleEvent
cmInit:
{
/* Вот тут х.з. нужно ли делать приведение типа, в нормальных языках наследование работает без приведения, в общем нужно проверять */
_child := new(Test::Child, InitWithParent(Test::IParent(self)));
}
end;
end.