Перем _РедакторHTML; // Кэш Функция РедакторHTML() Экспорт Если Истина И _РедакторHTML = Неопределено И ТипЗнч(ЭлементФормы) = Тип("ПолеHTMLДокумента") Тогда _РедакторHTML = ЭлементФормы.Документ.defaultView; Если _РедакторHTML <> Неопределено И Не ЗначениеЗаполнено(_РедакторHTML.version1C) Тогда _РедакторHTML = Неопределено; КонецЕсли; КонецЕсли; Возврат _РедакторHTML; КонецФункции Процедура УстановитьГраницыВыделения(НачальнаяСтрокаИлиПозиция, НачальнаяКолонкаИлиКонечнаяПозиция, КонечнаяСтрока = Неопределено, КонечнаяКолонка = Неопределено) Экспорт Если ТипЗнч(ЭлементФормы) = Тип("ПолеHTMLДокумента") Тогда РедакторHTML = РедакторHTML(); Если РедакторHTML = Неопределено Тогда Возврат; КонецЕсли; Если КонечнаяСтрока = Неопределено Тогда РедакторHTML.setSelectionByLength(НачальнаяСтрокаИлиПозиция, НачальнаяКолонкаИлиКонечнаяПозиция); Иначе РедакторHTML.setSelection(НачальнаяСтрокаИлиПозиция, НачальнаяКолонкаИлиКонечнаяПозиция, КонечнаяСтрока, КонечнаяКолонка); КонецЕсли; Иначе Если КонечнаяСтрока = Неопределено Тогда ЭлементФормы.УстановитьГраницыВыделения(НачальнаяСтрокаИлиПозиция, НачальнаяКолонкаИлиКонечнаяПозиция); Иначе ЭлементФормы.УстановитьГраницыВыделения(НачальнаяСтрокаИлиПозиция, НачальнаяКолонкаИлиКонечнаяПозиция, КонечнаяСтрока, КонечнаяКолонка); КонецЕсли; КонецЕсли; КонецПроцедуры Процедура ПолучитьГраницыВыделения(НачальнаяСтрока, НачальнаяКолонка, КонечнаяСтрока, КонечнаяКолонка) Экспорт Если ТипЗнч(ЭлементФормы) = Тип("ПолеHTMLДокумента") Тогда РедакторHTML = РедакторHTML(); Если РедакторHTML = Неопределено Тогда Возврат; КонецЕсли; ВыделениеТекста = РедакторHTML.getSelection(); НачальнаяСтрока = ВыделениеТекста.startLineNumber; НачальнаяКолонка = ВыделениеТекста.startColumn; КонечнаяСтрока = ВыделениеТекста.endLineNumber; КонечнаяКолонка = ВыделениеТекста.endColumn; Иначе ЭлементФормы.ПолучитьГраницыВыделения(НачальнаяСтрока, НачальнаяКолонка, КонечнаяСтрока, КонечнаяКолонка); КонецЕсли; КонецПроцедуры Функция ПолучитьТекст() Экспорт Если ТипЗнч(ЭлементФормы) = Тип("ПолеHTMLДокумента") Тогда РедакторHTML = РедакторHTML(); Если РедакторHTML = Неопределено Тогда Возврат Неопределено; КонецЕсли; Текст = РедакторHTML.getText(); ИначеЕсли ТипЗнч(ЭлементФормы) = Тип("ПолеВвода") Тогда Текст = ЭлементФормы.Значение; Иначе Текст = ЭлементФормы.ПолучитьТекст(); КонецЕсли; Возврат Текст; КонецФункции Функция УстановитьТекст(Текст, Активировать = Ложь) Экспорт Если ТипЗнч(ЭлементФормы) = Тип("ПолеHTMLДокумента") Тогда РедакторHTML = РедакторHTML(); Если РедакторHTML = Неопределено Тогда Возврат Ложь; КонецЕсли; РедакторHTML.updateText(Текст); Если Активировать Тогда РедакторHTML.editor.focus(); КонецЕсли; ИначеЕсли ТипЗнч(ЭлементФормы) = Тип("ПолеВвода") Тогда ЭлементФормы.Значение = Текст; Иначе ЭлементФормы.УстановитьТекст(Текст); КонецЕсли; Возврат Истина; КонецФункции Функция ПолучитьСтроку(НомерСтроки) Экспорт Если ТипЗнч(ЭлементФормы) = Тип("ПолеHTMLДокумента") Тогда РедакторHTML = РедакторHTML(); Если РедакторHTML = Неопределено Тогда Возврат Неопределено; КонецЕсли; Текст = РедакторHTML.getLineContent(НомерСтроки); Иначе Текст = ЭлементФормы.ПолучитьСтроку(НомерСтроки); КонецЕсли; Возврат Текст; КонецФункции Функция КоличествоСтрок() Экспорт Если ТипЗнч(ЭлементФормы) = Тип("ПолеHTMLДокумента") Тогда РедакторHTML = РедакторHTML(); Если РедакторHTML = Неопределено Тогда Возврат Неопределено; КонецЕсли; Текст = РедакторHTML.getLineCount(); Иначе Текст = ЭлементФормы.КоличествоСтрок(); КонецЕсли; Возврат Текст; КонецФункции Функция ВыделенныйТекст(НовыйТекст = Неопределено) Экспорт Перем НачальнаяСтрока, НачальнаяКолонка, КонечнаяСтрока, КонечнаяКолонка; Если ТипЗнч(ЭлементФормы) = Тип("ПолеHTMLДокумента") Тогда РедакторHTML = РедакторHTML(); Если РедакторHTML = Неопределено Тогда Возврат Неопределено; КонецЕсли; Если НовыйТекст = Неопределено Тогда Результат = РедакторHTML.selectedText(); Иначе РедакторHTML.selectedText(НовыйТекст); // https://github.com/salexdv/bsl_console/issues/64#issue-873784658 ПолучитьГраницыВыделения(НачальнаяСтрока, НачальнаяКолонка, КонечнаяСтрока, КонечнаяКолонка); УстановитьГраницыВыделения(КонечнаяСтрока, КонечнаяКолонка, КонечнаяСтрока, КонечнаяКолонка); КонецЕсли; Иначе Если НовыйТекст = Неопределено Тогда Результат = ЭлементФормы.ВыделенныйТекст; Иначе ЭлементФормы.ВыделенныйТекст = НовыйТекст; КонецЕсли; КонецЕсли; Возврат Результат; КонецФункции Функция ТолькоПросмотр(НовыйРежим = Неопределено) Экспорт Если ТипЗнч(ЭлементФормы) = Тип("ПолеHTMLДокумента") Тогда РедакторHTML = РедакторHTML(); Если РедакторHTML = Неопределено Тогда Возврат Неопределено; КонецЕсли; Если НовыйРежим = Неопределено Тогда Результат = РедакторHTML.ReadOnly; Иначе РедакторHTML.setReadOnly(НовыйРежим); КонецЕсли; Иначе Если НовыйРежим = Неопределено Тогда Результат = ЭлементФормы.ТолькоПросмотр; Иначе ЭлементФормы.ТолькоПросмотр = НовыйРежим; КонецЕсли; КонецЕсли; Возврат Результат; КонецФункции Процедура ЗаменитьСтроку(НомерСтроки, Текст) Экспорт Если ТипЗнч(ЭлементФормы) = Тип("ПолеHTMLДокумента") Тогда РедакторHTML = РедакторHTML(); Если РедакторHTML = Неопределено Тогда Возврат; КонецЕсли; РедакторHTML.setLineContent(НомерСтроки, Текст); Иначе ЭлементФормы.ЗаменитьСтроку(НомерСтроки, Текст); КонецЕсли; КонецПроцедуры Процедура ВставитьСтроку(НомерСтроки, Текст) Экспорт Если ТипЗнч(ЭлементФормы) = Тип("ПолеHTMLДокумента") Тогда РедакторHTML = РедакторHTML(); Если РедакторHTML = Неопределено Тогда Возврат; КонецЕсли; РедакторHTML.insertLine(НомерСтроки, Текст); // Не реализован Иначе ЭлементФормы.ВставитьСтроку(НомерСтроки, Текст); КонецЕсли; КонецПроцедуры Процедура ДобавитьСтроку(Текст) Экспорт Если ТипЗнч(ЭлементФормы) = Тип("ПолеHTMLДокумента") Тогда РедакторHTML = РедакторHTML(); Если РедакторHTML = Неопределено Тогда Возврат; КонецЕсли; ДлинаТекста = СтрДлина(ПолучитьТекст()); РедакторHTML.setText(Символы.ПС + Текст, ДлинаТекста); Иначе ЭлементФормы.ДобавитьСтроку(Текст); КонецЕсли; КонецПроцедуры Процедура Очистить() Экспорт Если ТипЗнч(ЭлементФормы) = Тип("ПолеHTMLДокумента") Тогда РедакторHTML = РедакторHTML(); Если РедакторHTML = Неопределено Тогда Возврат; КонецЕсли; РедакторHTML.eraseText(); Иначе ЭлементФормы.Очистить(); КонецЕсли; КонецПроцедуры Процедура ПоказатьОшибку(НомерСтроки, НомерКолонки = 1) Экспорт Если ТипЗнч(ЭлементФормы) = Тип("ПолеHTMLДокумента") Тогда РедакторHTML = РедакторHTML(); Если РедакторHTML = Неопределено Тогда Возврат; КонецЕсли; РедакторHTML.markError(НомерСтроки, НомерКолонки); Иначе ЭлементФормы.УстановитьГраницыВыделения(НомерСтроки, 1, НомерСтроки, 150); КонецЕсли; КонецПроцедуры