Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 30.12.2011, 02:38
Pcrepair
 
Сообщения: n/a
По умолчанию Браузер на TChromium. Особенности работы

Добрый день и с Новым годом
Есть код с применением компонета 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  
Старый 30.12.2011, 11:11
Rat Rat вне форума
Активный
 
Регистрация: 12.09.2008
Сообщения: 391
Репутация: 6078
По умолчанию

Посылай форме код нажатой кнопки Tab. Это сменит фокус.
Ответить с цитированием
  #3  
Старый 30.12.2011, 21:57
Pcrepair
 
Сообщения: n/a
По умолчанию

идея интересная, но... ТАБ только переводит фокус на следующий элемент, например другое окно. неоднозначно получается
может еще какие идеи есть
Ответить с цитированием
  #4  
Старый 31.12.2011, 07:34
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

тогда Esc .
Ответить с цитированием
  #5  
Старый 31.12.2011, 08:45
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
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  
Старый 31.12.2011, 11:55
Pcrepair
 
Сообщения: n/a
По умолчанию

NumLock, спасибо за подсказку и с Новым Годом
Вот этот код копирует выделенное в клипборд
Код:
crm.Browser.MainFrame.Copy;
Но Клипборд доступен только активному приложению
Нет ли варианта что бы копировать crm.Browser.MainFrame.SelectAll в переменную? что то в свойствах и методах Frame ничего кроме Copy не нашел
Ответить с цитированием
  #7  
Старый 03.01.2012, 13:11
Pcrepair
 
Сообщения: n/a
По умолчанию

вот что получается

Код:
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 (с тегами, ссылками и всем прочим) для последующего парсинга. Никто не в курсе?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:51.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025