Получился пример, который работает, когда форма открыта как внутренний (Aux) диалог.
Запускается уведомитель, получает контроллер контейнеров, проходит по видам контейнера в поисках нужного поля и его выделяет.
Код:
MODULE TestFocusChange;
IMPORT Containers, Controls, Views, Dialog;
VAR
str1*, str2*: ARRAY 16 OF CHAR;
PROCEDURE Notifier* (op, from, to: INTEGER);
VAR c: Containers.Controller; v: Views.View; done: BOOLEAN;
BEGIN
IF op = Dialog.changed THEN
c := Containers.Focus();
IF c # NIL THEN
c.GetFirstView(Containers.any, v);
done := FALSE;
WHILE (v # NIL) & ~ done DO
WITH v: Controls.Control DO
IF v.prop.link = "TestFocusChange.str2" THEN
c.SelectAll(FALSE); (* убрать выделения *)
c.SetFocus(v); (* сделать вид фокусным *)
done := TRUE
END
ELSE END;
c.GetNextView(Containers.any, v)
END
END
END
END Notifier;
END TestFocusChange.
"StdCmds.OpenAuxDialog('Test/Rsrc/FocusChange.odc','test')"