Вопрос пользователя связан с необходимостью получения измененного текста из TextArea, использующего TinyMCE, в приложении на Delphi. TinyMCE - это популярный WYSIWYG редактор, который позволяет пользователям легко форматировать и редактировать текст в веб-браузере. Однако, при использовании TinyMCE в сочетании с TWebBrowser в Delphi, могут возникнуть сложности с доступом к измененному тексту.
Описание проблемы
В приложении на Delphi загружен документ с TextArea, который используется вместе с TinyMCE. Пользователь может изменять текст в этом поле, но стандартные способы получения значения TextArea через TWebBrowser не дают актуального текста после редактирования.
Пример кода для получения текста из TextArea
Element := (wb1.Document as IHTMLDocument3).getElementById('texto');
Edit1.Text := Element.Value;
Этот код работает корректно, когда TinyMCE не активирован, но при его использовании, код не может получить измененный текст.
Подтвержденный ответ
Для получения измененного текста из TextArea с активированным TinyMCE, необходимо использовать функционал самого редактора. TinyMCE предоставляет API, который позволяет программно управлять содержимым редактора.
Решение проблемы
Чтобы получить текст из TextArea после его изменения пользователем, можно использовать следующий код на Object Pascal:
var
TinyMCE: IInterface;
Editor: IInterface;
begin
TinyMCE := GetInterfaceIDispatch((wb1.Document as IHTMLDocument2).parentWindow, 'tinyMCE');
if Assigned(TinyMCE) then
begin
Editor := TinyMCE.Get('editor');
if Assigned(Editor) then
begin
Edit1.Text := Editor.Get('content');
end;
end;
end;
Этот код получает ссылку на TinyMCE и затем на редактор, после чего извлекает актуальное содержимое редактора.
Альтернативный ответ
Если TinyMCE использует устаревшие версии сохранения текста в атрибуте designMode элемента body, можно также попробовать следующий подход:
Edit1.Text := (wb1.Document as IHTMLDocument2).body.innerText;
Однако, следует учитывать, что TinyMCE может не сохранять текст в этом атрибуте при активном редактировании, поэтому предпочтительным является использование API TinyMCE.
Комментарии пользователя
Вопросы пользователя указывают на то, что стандартный подход к получению текста не работает после внедрения TinyMCE. Тестирование показывает, что если снять TinyMCE из уравнения, то можно получить актуальные данные. Приведенные выше решения решают эту задачу, позволяя работать с актуальным текстом и одновременно использовать функционал TinyMCE.
Заключение
Работа с TinyMCE в TWebBrowser на Delphi требует от разработчика понимания того, как редактор работает с HTML-элементами. Использование API TinyMCE позволяет получать доступ к актуальным данным, даже если интерфейс редактирования сильно отличается от стандартного представления TextArea.
Пользователь столкнулся с проблемой получения измененного текста из `TextArea` с включенным редактором TinyMCE в приложении на Delphi, использующем `TWebBrowser`, и ищет способ решить эту проблему, используя API TinyMCE.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS