Вот что значит "утро вечера мудренее", сейчас за пять минут нашел, в чем проблема. Надо было спрашивать каретку отложенно, где она стоит.
Код:
PROCEDURE (a: Action) Do;
VAR
c: TextControllers.Controller;
carPos: INTEGER;
loc: TextViews.Location;
BEGIN
c := TextControllers.Focus();
IF (c # NIL) & ~c.HasSelection() THEN
carPos := c.CaretPos(); (* Запоминаем положение каретки *)
IF carPos # - 1 THEN
a.v.GetThisLocation(a.f, c.CaretPos(), loc);
a.v.x := loc.x;
a.v.y := loc.y;
Views.Update(a.v, Views.rebuildFrames);
END
END
END Do;
PROCEDURE (v: View) HandleCtrlMsg2 (f: Views.Frame;
VAR msg: Controllers.Message; VAR focus: Views.View);
VAR
c: TextControllers.Controller;
carPos: INTEGER;
a: Action;
BEGIN
WITH msg: Controllers.EditMsg DO
NEW(a);
a.v := v;
a.f := f;
Services.DoLater(a, Services.now)