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/ |