У элемента управления StringEdit есть метод getSelection, который возвращает индексы начального и конечного символа выделенного текста. Сначала сделал так:
X++:
int p, n;
[p,n] = memo.getSelection();
info(substr(memo.text(),p+1, n-p));
Если свойство MultiLine = No, то все работает правильно, если MultiLine = Yes, то возвращаются некорректные данные. Опытным путем удалось выяснить, что проблема в том, что getSelection учитывает символы перевода строки, а substr их не учитывает.
Пришлось извратиться следующим образом:
X++:
int p, n, c1,c2;
[p,n] = memo.getSelection();
c1 = charcount(substr(memo.text(),1,p),'\n');
c2 = charcount(substr(memo.text(),p,n-p),'\n');
info(substr(memo.text(),p+1-c1, n-p-c2));
где charcount возвращает число указанных символов в строке
X++:
int charcount(str s, str c)
{
return strlen(strkeep(s,c));
}
Кто-нибудь знает более простой способ получить выделенный фрагмент из StringEdit?
Подозреваю что, либо такой способ есть, так как от индексов, которые возвращает getSelection, в чистом виде пользы мало, либо это баг.