Ср.:
TextControllers
Код:
PROCEDURE Focus* (): Controller;
VAR v: Views.View; c: Containers.Controller;
BEGIN
v := Controllers.FocusView();
IF (v # NIL) & (v IS TextViews.View) THEN
c := v(TextViews.View).ThisController();
IF (c # NIL) & (c IS Controller) THEN RETURN c(Controller)
ELSE RETURN NIL
END
ELSE RETURN NIL
END
END Focus;
Всё ОК.
В формах же, видимо, застрял какой-то более древний вариант (там есть древности в формах):
FormControllers
Код:
PollFocusMsg = RECORD (Controllers.PollFocusMsg)
c: Controller
END;
PROCEDURE Focus* (): Controller;
VAR msg: PollFocusMsg;
BEGIN
msg.c := NIL;
Controllers.Forward(msg);
RETURN msg.c
END Focus;
Т.е. Focus() признаёт только стандартную реализацию контроллера форм.
Нужно бы в сборках переделать.
Пока придётся в своей реализации реагировать на PollFocusMsg по модулю тега типа и выставлять поле c через SYSTEM.