При разработке приложений, использующих компонент TWebBrowser для отображения веб-страниц, иногда возникает потребность в автоматической установке значения в текстовое поле и позиционировании курсора в его конец. Особенно это актуально для старых версий интернет-обозревателей, таких как IE8, где не все современные интерфейсы доступны.
Проблема
В вашем приложении используется процедура SetInputValue, которая устанавливает значение в текстовое поле, но не может установить курсор в конец этого поля. Это связано с тем, что интерфейс IHTMLInputTextElement2, который позволяет сделать это, доступен только начиная с IE9.
Решение
Для решения проблемы можно использовать интерфейс IHTMLTxtRange, который позволяет создавать диапазоны текста и управлять ими. Вот пример кода на Object Pascal (Delphi), который демонстрирует, как это сделать:
procedure SetInputValueAndCaret(Document: IHTMLDocument2; const ElementId, NewValue: String);
var
Doc: IHTMLDocument3;
El: IHTMLElement;
Tr: IHTMLTxtRange;
begin
Doc := Document as IHTMLDocument3;
if Assigned(Doc) then
begin
El := Doc.getElementById(ElementId);
if Assigned(El) and El.tagName = 'INPUT' then
begin
(El as IHTMLInputElement).Value := NewValue;
Tr := (El as IHTMLInputElement).createTextRange;
Tr.collapse(true);
Tr.moveEnd('character', Length(NewValue));
Tr.moveStart('character', Length(NewValue));
Tr.select();
end;
end;
end;
Этот код сначала устанавливает новое значение для текстового поля, а затем создает объект IHTMLTxtRange для этого поля. После этого курсор устанавливается в конец текста, с помощью метода moveEnd, который перемещает конец диапазона на длину нового значения. Метод moveStart здесь не используется, так как он перемещает начало диапазона, и в данном случае его использование не требуется. Функция select затем выделяет созданный диапазон, что визуально эквивалентно установке курсора в указанное место.
Применение
Используйте данную процедуру в вашем приложении, чтобы установить значение и позиционировать курсор в конец текстового поля на веб-странице, отображаемой через TWebBrowser, для интернет-обозревателя IE8.
Этот пример кода можно встроить в ваше приложение, написанное на Delphi, для решения описанной задачи.
При разработке веб-приложений на Delphi с использованием TWebBrowser для IE8 необходимо применять интерфейс IHTMLTxtRange для установки курсора в конец текстового поля после его автоматического заполнения значением.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.