OberonCore
https://forum.oberoncore.ru/

Координаты каретки
https://forum.oberoncore.ru/viewtopic.php?f=35&t=5198
Страница 1 из 1

Автор:  Иван Денисов [ Четверг, 21 Август, 2014 05:57 ]
Заголовок сообщения:  Координаты каретки

Как найти координаты картеки?

Я нашел пока только как взять координаты символа в районе коретки.

Код:
      WITH msg: Controllers.EditMsg DO
         c := TextControllers.Focus();
         v.GetThisLocation(f, c.CaretPos(), loc);
         v.x := loc.x;
         v.y := loc.y;

Но если она переносится на новую строку, то эти координаты не совпадают с положением каретки.

Автор:  Иван Денисов [ Четверг, 21 Август, 2014 06:14 ]
Заголовок сообщения:  Re: Координаты каретки

Вот что значит "утро вечера мудренее", сейчас за пять минут нашел, в чем проблема. Надо было спрашивать каретку отложенно, где она стоит.

Код:
   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)

Автор:  Иван Кузьмицкий [ Четверг, 21 Август, 2014 09:38 ]
Заголовок сообщения:  Re: Координаты каретки

А-а, наверное, сеттер перестраивается в следующей итерации.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/