fpCEF3

Вопросы использования сторонних (не входящих в состав FPC и Lazarus) утилит и библиотек.

Модератор: Модераторы

Re: fpCEF3

Сообщение mgear » 28.04.2017 16:26:15

Снег Север, ну для винды в целях более широкой совместимости мне всё же следует ориентироваться на 32 бита. Для себя-то, любимого, можно и 64, но для людей надо или только 32, или 32+64. Это программа - сборщик информации с интернет-ресурсов, сведением в базу и выборками. Ориентировался на голый хтмыл и начал на перле делать, но упёрся в то, что некоторые сайты хотят жаба скрипт, да ещё и взаимодействие с юзером. Хорошо, что недавно только начал делать и ещё не успел гигабайтищи кода наковырять.

Странно, что так мало ресурсов по Delphi/FPC+CEF3. Вероятно, это связано с малой вообще популярностью этих языков. Но я кое-что уже сам наковырял из исходников. Например, теперь умею ажнык двумя способами вынимать текст из браузера: через GetSourceProc и GetSource.

GetSource лучше тем, что в обработчик можно параметры передавать. Странновато, что процедура в GetSourceProc объявлена как единственный стринг без доп. параметров.

Ну и про передачу сообщений, вроде бы, разобрался. Там, по сути, идеологически не особо сложно: в API задействованы всего два PID-а, BROWSER и RENDERER. Проблема в организации безглючного взаимодействии процессов и отладке.

Код: Выделить всё
procedure StringVisitor(const str: ustring);
begin
  MainForm.lbUrl.Caption := MainForm.crm.Browser.MainFrame.Url;
  MainForm.Memo1.Lines.Text := str;
end;

procedure TMainForm.crmLoadEnd(Sender: TObject;
  const Browser: ICefBrowser; const Frame: ICefFrame; httpStatusCode: Integer);
var
  res:boolean;
begin
  if Assigned(Frame) and Frame.IsMain and (httpStatusCode = 200) then
    crm.Browser.MainFrame.GetSourceProc(@StringVisitor);
end;


Код: Выделить всё
  TCefStringVisitor = class(TCefStringVisitorOwn)
  private
    FBrowser: ICefBrowser;
  protected
    procedure Visit(const str: ustring); override;
    constructor Create(const browser: ICefBrowser);
  end;

procedure TCefStringVisitor.Visit(const str: ustring);
begin
  MainForm.lbUrl.Caption := MainForm.crm.Browser.MainFrame.Url;
  MainForm.Memo1.Lines.Text := str;
end;

constructor TCefStringVisitor.Create(const browser: ICefBrowser);
begin
  inherited Create;
  FBrowser := browser;
end;

procedure TMainForm.crmLoadEnd(Sender: TObject;
  const Browser: ICefBrowser; const Frame: ICefFrame; httpStatusCode: Integer);
var
  res:boolean;
begin
  if Assigned(Frame) and Frame.IsMain and (httpStatusCode = 200) then
    crm.Browser.MainFrame.GetSource(TCefStringVisitor.Create(Browser));
end;
Последний раз редактировалось mgear 28.04.2017 16:38:39, всего редактировалось 1 раз.
mgear
новенький
 
Сообщения: 19
Зарегистрирован: 25.01.2015 19:29:56

Re: fpCEF3

Сообщение Снег Север » 28.04.2017 16:35:52

В той версии хромиума под делфи которую использовал я (не самая последняя, но достаточно стабильная, а постоянные изменения интерфейса к хромиуму от версии к версии меня задолбали) текст вынимается callback процедурой. И у нас эти программы внутреннего пользования, так что они всегда запускаются на серверах где 32 бита не бывает уже лет пятнадцать...
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3038
Зарегистрирован: 27.11.2007 16:14:47

Re: fpCEF3

Сообщение mgear » 28.04.2017 16:57:07

Снег Север писал(а):текст вынимается callback процедурой

Наверняка в вашей версии хромиума есть и GetSource.

Для коллбэков в fpCEF3 сделаны обёртки с названиями TCef...XXXOwn. Это паскалевские реализации апишных интерфейсов ICef...XXXHandler, ICef...YYYVisitor и т.д.
Код: Выделить всё
grep -i "t.*own =" *.pas


То есть, по сути, обработка всяческой фигни сводится к поиску подходящего родительского класса и написанию примитивной обёртки вокруг него с переписанными одним-двумя методами.

Проблемка, конечно, в том, что нет даже не то что нормальных, а хоть сколько-то осмысленных доков.

P.S. Так долго объяснял, что аж сам понял :mrgreen: :mrgreen: :mrgreen:

Кароч вот как надо действовать. В API есть обработчики ICefXXX. Вокруг них навёрнуты реализации, возможно, заглушки.
Вот все они. Точнее, надеюсь, что все:
Код: Выделить всё
grep -n "class.*, ICef" *.pas


Классы TCef...Own - базовые обёртки интерфейсов, а-ля абстрактные классы, только рабочие методы из каких-то соображений не описаны как abstract. В некоторых случаях вокруг них уже написаны рабочие классы.

Мой класс TCefStringVisitor основан на TCefStringVisitorOwn, где рабочий метод Visit описан как "begin end". Также в cef3own описан "полноценный" класс TCefFastStringVisitor, только мне он не понравился. Даже не понимаю, нафига он вообще нужен такой красивый.
mgear
новенький
 
Сообщения: 19
Зарегистрирован: 25.01.2015 19:29:56

Re: fpCEF3

Сообщение tema » 23.11.2018 02:54:15

Кому-нибудь удалось запустить экземплы из fpCEF3 под Linux?
Собирается проект нормально, но запустить так и не удалось :-(

Добавлено спустя 11 минут 12 секунд:
Код: Выделить всё
$ ./simple

(simple:3879): Gtk-WARNING **: Загружаемый модуль тем не найден в module_path: «adwaita»,
[FORMS.PP] ExceptionOccurred
  Sender=EOSError
  Exception=An operating system call failed.
  Stack trace:
  $00000000004D997E
  $00000000004D9891
  $000000000077F2FA
  $0000000000536458 line 7842 of include/wincontrol.inc
  $000000000053586E line 7531 of include/wincontrol.inc
  $0000000000445F04 line 23 of include/scrollingwincontrol.inc
  $000000000044F33D line 2685 of include/customform.inc
  $0000000000450988 line 3154 of include/customform.inc
  $0000000000534C80 line 7396 of include/wincontrol.inc
  $0000000000536458 line 7842 of include/wincontrol.inc
  $000000000045ACCB line 2230 of include/application.inc
  $000000000041C45C line 21 of simple.lpr
TApplication.HandleException An operating system call failed.
  Stack trace:
  $00000000004D997E
  $00000000004D9891
  $000000000077F2FA
  $0000000000536458 line 7842 of include/wincontrol.inc
  $000000000053586E line 7531 of include/wincontrol.inc
  $0000000000445F04 line 23 of include/scrollingwincontrol.inc
  $000000000044F33D line 2685 of include/customform.inc
  $0000000000450988 line 3154 of include/customform.inc
  $0000000000534C80 line 7396 of include/wincontrol.inc
  $0000000000536458 line 7842 of include/wincontrol.inc
  $000000000045ACCB line 2230 of include/application.inc
  $000000000041C45C line 21 of simple.lpr
tema
постоялец
 
Сообщения: 375
Зарегистрирован: 24.03.2011 20:19:27

Re: fpCEF3

Сообщение Снег Север » 23.11.2018 09:47:12

tema, директория locales рядом с бинарником скопирована? Под виндой без нее не запускается.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3038
Зарегистрирован: 27.11.2007 16:14:47

Re: fpCEF3

Сообщение tema » 24.11.2018 22:34:32

У меня линукс. Проблему локализовал:
https://github.com/dliw/fpCEF3/issues/72
Другой вопрос появился. Если просто бросить этот хромиум на форму, то вроде всё ок. Если я хочу сделать приложение посложнее, вроде панельки всяки на форму добавить, пропадает возможность писать что-то в поля ввода на странице. Например в яндексе в строку поиска ничего не вводится :-(
tema
постоялец
 
Сообщения: 375
Зарегистрирован: 24.03.2011 20:19:27

Re: fpCEF3

Сообщение pupsik » 25.11.2018 01:30:04

Проблему локализовал:
:) последние тесты показывали что и динамическая подгрузка необходимых длл вполне таки работает в лине.

По поводу "сложности". Это и в демках наблюдается?
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: fpCEF3

Сообщение tema » 25.11.2018 03:40:54

pupsik писал(а):По поводу "сложности". Это и в демках наблюдается?

Да. Везде.
Проблема появляется в случае, когда, после запуска, сразу пытаешься ввести запрос в яндекс. Если до этого сделать активным любой другой элемент формы (поле ввода ил и кнопку), то после этого в браузер фокус передаётся корректно и всё вводится. Дело именно в фокусе. После создания браузера нельзя начинать сразу в него что-то вводить.
tema
постоялец
 
Сообщения: 375
Зарегистрирован: 24.03.2011 20:19:27

Re: fpCEF3

Сообщение Лекс Айрин » 25.11.2018 10:58:36

tema, так сделай это сам. Прямо при создании окна. А до этого заморозь компонент-браузер.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: fpCEF3

Сообщение tema » 25.11.2018 12:49:39

Лекс Айрин писал(а):tema, так сделай это сам. Прямо при создании окна. А до этого заморозь компонент-браузер.

Я так и попробовал сделать. В консоль сыпется куча ошибок. Очень странно работает эта фигня

Добавлено спустя 1 минуту 34 секунды:
Altlinux 64
KDE 5
Lazarus 1.8.4
FPC 3.0.4
gtk2 (в qt4 ситуация похожая, там есть другие глюки)

Добавлено спустя 3 минуты 34 секунды:
Ну и при закрытии приложения с наличием компонента "Chromium" обязательно в 100% случаев "Ошибка сегментирования"
tema
постоялец
 
Сообщения: 375
Зарегистрирован: 24.03.2011 20:19:27

Re: fpCEF3

Сообщение Лекс Айрин » 25.11.2018 13:09:03

А в транке не пробовал?

Не пробовал при финише освобождать Chromium?
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: fpCEF3

Сообщение tema » 25.11.2018 13:16:02

Лекс Айрин писал(а):А в транке не пробовал?

Не пробовал при финише освобождать Chromium?

В транке компонент не компилируется. Это и в гитхабе описано.
При компиляции сообщения одна и та же ошибка cef3ref.pas(1784,1) Error: Local variables size exceeds supported limit
tema
постоялец
 
Сообщения: 375
Зарегистрирован: 24.03.2011 20:19:27

Re: fpCEF3

Сообщение Лекс Айрин » 25.11.2018 13:32:08

странно...
Error: Local variables size exceeds supported limit:
local variables size exceeds supported limit this indicates that you are declaring more than 32k of local variables, which is not supported by this processor.
размер локальных переменных превышает поддерживаемый лимит. это означает, что объявляется более 32 КБ локальных переменных, которые не поддерживаются данным процессором.

интересно, что там такого...вот только пользоваться что-то каким компонентом неохота(((
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: fpCEF3

Сообщение Vadim » 25.11.2018 14:00:13

А FPC 64-битный?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: fpCEF3

Сообщение tema » 25.11.2018 15:16:00

Vadim писал(а):А FPC 64-битный?

Конечно!
tema
постоялец
 
Сообщения: 375
Зарегистрирован: 24.03.2011 20:19:27

Пред.След.

Вернуться в Сторонние средства

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

Рейтинг@Mail.ru