![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Добрый день и с Новым годом
Есть код с применением компонета TChromium. Браузер загружает страницу, после загрузки делает КОНТР+А и КОНТР+С Код:
procedure TForm1.Button1Click(Sender: TObject); var URL : string; begin URL := Edit1.Text; Chromium1.Browser.MainFrame.LoadUrl(URL); //загрузка страницы end; procedure TForm1.Chromium1LoadEnd(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; httpStatusCode: Integer; out Result: Boolean); //по окончании загрузки страницы begin // вот тут не хватает кода для установки фокуса frame.SelectAll; //выделить все frame.Copy; //копировать выделенное в буфер end; На сайтах без окон ввода данных (forums.kuban.ru) все работает нормально На сайтах типа YA.RU фокус автоматически устанвливается на окне ввода, соответсвенно ничего не выделяется и не копируется. В TWebBrowser эта задача решается следующим кодом Код:
if WebBrowser1.Document <> nil then (Webbrowser1.Document as IHTMLDocument2).ParentWindow.Focus; //вот тут фокус на все окно, проверено.работает 1. Где есть справочники с описанием методов TChromium? 2. кто знает способ (код) для установки фокуса на загруженную страницу Всем ответившим по существу вопросов спасибо |
#2
|
|||
|
|||
![]() Посылай форме код нажатой кнопки Tab. Это сменит фокус.
|
#3
|
|||
|
|||
![]() идея интересная, но... ТАБ только переводит фокус на следующий элемент, например другое окно. неоднозначно получается
может еще какие идеи есть |
#4
|
|||
|
|||
![]() тогда Esc .
|
#5
|
||||
|
||||
![]() Код:
type TMainForm = class(TForm) crm: TChromium; SpeedButton6: TSpeedButton; procedure TMainForm.SpeedButton6Click(Sender: TObject); begin crm.Browser.SendMouseClickEvent(0, 0, MBT_LEFT, False, 1); crm.Browser.MainFrame.SelectAll; crm.Browser.MainFrame.Copy; end; Пишу программы за еду. __________________ |
#6
|
|||
|
|||
![]() NumLock, спасибо за подсказку и с Новым Годом
Вот этот код копирует выделенное в клипборд Код:
crm.Browser.MainFrame.Copy; Нет ли варианта что бы копировать crm.Browser.MainFrame.SelectAll в переменную? что то в свойствах и методах Frame ничего кроме Copy не нашел |
#7
|
|||
|
|||
![]() вот что получается
Код:
procedure TForm1.Button1Click(Sender: TObject); var URL : string; begin Memo1.Clear; // очистка МЕМО перед циклом Clipboard.Clear; // очистка перед циклом - на всякий случай и для наглядности (смотрим в FreeClipViewer) URL := Edit1.Text; Chromium1.Browser.MainFrame.LoadUrl(URL); end; procedure TForm1.Chromium1LoadEnd(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; httpStatusCode: Integer; out Result: Boolean); begin if (httpStatusCode <> 200) then Exit; Chromium1.Browser.MainFrame.ExecuteJavaScript('document.querySelector(":focus").blur();', '', 0); //убираем фокус с окон ввода, на некоторых сайтах это актуально Chromium1.Browser.MainFrame.SelectAll; //выделяем все Application.ProcessMessages; Chromium1.Browser.MainFrame.Copy; //именно так а не Frame.Copy - иначе на некоторых сайтах в буфер вначале копиркется одно, потом другое и только потом вся страница, это прямо видно в FreeClipViewer Application.ProcessMessages; Memo1.PasteFromClipboard; //почемуто на некоторых сайтах ничего в МЕМО не копируется, тогда как в буфере все есть (FreeClipViewer все видит) Вот тут возникает еще вопрос: как из буфера скопировать содержимое формата CF_HTML (то, что это именно этот формат подтверждает PortableNVU (выжуальный редактор) обратно в переменную? какой бы тип перемонной не выставлял, все время идет несовпадение типов переменных? сразу скажу что Chromium1.Browser.MainFrame.Copy копирует данные только в клипборд. отсюда и необходимость вернуть их в программу причем в формате CF_HTML (с тегами, ссылками и всем прочим) для последующего парсинга. Никто не в курсе? |