Скрипты для Demagog

Говорящий текстовый редактор с открытым кодом, предназначенный для чтения вслух и записи в аудиофайл текстовых файлов с использованием пакетов речевых функций SAPI4\SAPI5.

Модератор: flegont

Ответить
Аватара пользователя
tonio_k
V.I.P.

Скрипты для Demagog

#501

Сообщение tonio_k »

flegont, :thank_you: работает как надо!

Аватара пользователя
tonio_k
V.I.P.

Скрипты для Demagog

#502

Сообщение tonio_k »

Вопрос по функции WSel
Вставим ниже текст в окно Демагога и нажимаем F2

Код: Выделить всё

ind=WActive()
k=WSel(ind)
ShowMessage(k)
Если выделить текст ind то покажет k = 3
Вопрос, а как можно определить начальную позицию выделенного текста?
Если бы WSel показывал начальную позицию, то координаты текста я бы мог получить:

Код: Выделить всё

ind=WActive()
k=WSel(ind)
fnd=WSelText(ind)
ShowMessage(k..', '..#fnd)

Аватара пользователя
flegont
V.I.P.

Скрипты для Demagog

#503

Сообщение flegont »

Мда... думаю, надо будет усовершенствовать функцию WSel(i), когда задан только параметр - номер окна. Чтобы, если в тексте есть выделенный фрагмент, то возвращалась бы начальная позиция выделенного (а не конечная, как сейчас), и возвращалась бы длина выделенного. Как-то так:

Код: Выделить всё

k, len = WSel(ind)
Тогда конечная позиция выделенного была бы:

Код: Выделить всё

z = k+len
Подумаю, как сделать.

Аватара пользователя
tonio_k
V.I.P.

Скрипты для Demagog

#504

Сообщение tonio_k »

Я тут ещё немного подумал, у нас же на руках есть длина текста #fnd и координата конца текста.
Можно от координаты конца выделеного текста вычесть его длину и прибавить 1 это и будет начальная координата выделенного текста

Код: Выделить всё

ind=WActive()
k=WSel(ind)
fnd=WSelText(ind)
start=k-#fnd+1
ShowMessage(start..', '..#fnd)
Надо только для удобства это в функцию превратить
k, len = WSel(ind), что бы k действительно был начальной позицией выделеного текста.

Аватара пользователя
flegont
V.I.P.

Скрипты для Demagog

#505

Сообщение flegont »

Вер. 385, небольшое изменение в дистрибутиве.
Функция встроенного интерпретатора:
WSel(i , pos, len) - выделяет фрагмент текста во вкладке i с позиции pos длиной len (по умолчанию 0); и возвращает pos и len;
WSel(i, pos) устанавливает текстовый курсор в позицию pos, возвращая pos и 0;
WSel(i) просто возвращает текущую позицию курсора и длину выделенного (или 0),
(это и есть тот случай, когда возвращаемые значения реально могут понадобиться :smile1: )

Пример:

Код: Выделить всё

-- пусть текст во вкладке 1 имеет выделенный фрагмент
k, len = WSel(1)
s = WText(1)
c = string.sub(s,k+1,k+len)
ShowMessage(k..' '..len..' |'..c..'|') -- посмотрим на результат
Замечание: при поиске в тексте выделенного фрагмента к найденной координате его начала прибавляем 1, т.к. позиции текстового курсора на экране нумеруются с 0.

Ответить

Вернуться в «Demagog»