2013-11-13 1 views
2

Я хочу узнать, содержит ли пользовательский компонент TChromiumFMX текст, который пользователь выбрал, и, если это так, получить этот текст, без необходимости скопировать его в буфер обмена (ctrl-c).Как узнать, выбран ли текст в браузере, а затем получить его?


Чтобы улучшить ответ TLama в: Если вы не используете ShowMessage, анонимная процедура не всегда завершается до Button1Click происходит выход, следовательно, часто не приносит никаких результатов (или слишком поздно). Поэтому Done: = истина в последней строке процедуры могут быть проверены на, чтобы увидеть, если значение было загружено:

procedure TForm1.Button1Click(Sender: TObject); 
var Done: boolean; 
begin 
    Done := false; 
    Chromium1.Browser.GetFocusedFrame.VisitDomProc(
    procedure(const document: ICefDomDocument) 
    begin 
     SelectedText := document.SelectionAsText; 
     Done := true 
    end 
); 
    while not Done do Application.ProcessMessages 
end; 

ответ

5

Вы должны посетить DOM, и в качестве подарка вы получите ссылка на текущий интерфейс документа ICefDomDocument. Интерфейс ICefDomDocument предлагает метод SelectionAsText, который возвращает текущий выбор в виде текста (если есть). В коде вы можете написать что-то вроде:

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    Chromium1.Browser.GetFocusedFrame.VisitDomProc(
    procedure(const document: ICefDomDocument) 
    begin 
     ShowMessage(document.SelectionAsText); 
    end 
); 
end; 
+0

Вау, это было быстро! Работает как шарм. Благодаря! – Domus

+0

Добро пожаловать! – TLama

+0

Я обновил свой вопрос, чтобы скрыть ответ, с небольшим улучшением. Не стесняйтесь вырезать его из вопроса и вставьте его в ответ. – Domus

Смежные вопросы