1. На днях понадобилось получать HTML из WebKit (LCL WebKit Demo можно скачать в конце веб-страницы по интернет адресу: http://users.telenet.be/Jan.Van.hijfte/qtforfpc/fpcqt4.html, его и будем изменять).
2. Хоть и написано, что Qt 4.5 и Qt 4.7 бинарно совместимы, но всё же что бы WebKit начал нормально работать (показывать часть изображений) нужно использовать Qt 4.5.3 (релиз октября 2009): http://get.qt.nokia.com/qt/source/qt-win-opensource-4.5.3-mingw.exe.
3. Включим некоторые настройки WebKit:
- Код: Выделить всё
- QWebSettings_setAttribute(QWebSettings, QWebSettingsAutoLoadImages, True);
 QWebSettings_setAttribute(QWebSettings, QWebSettingsPluginsEnabled, True);
4. Согласно документации нам нужно получить у текущего WebView его страницу и извлечь у данной страницы её фрейм из которой потом можно получить содержимое загруженной в WebView страницы. На C++ это выглядело бы приблизительно вот так:
- Код: Выделить всё
- QWebFrame* MyFrame = webView->page()->mainFrame();
5. Первым делом объявим переменную типа QWebFrame, в FreePascal (Lazarus) она имеет дополнительное окончание - H.
На C++ это выглядело бы приблизительно вот так (часть кода из п.4):
- Код: Выделить всё
- QWebFrame* MyFrame
6. Получим у текущего WebView его страницу. В изменяемом нами примере необходимо перенести QWebView: QLCLWebViewH из секции private в секцию public класса TWebPanel. Так как в FreePascal (Lazarus) мы обращаемся к библиотеке Qt через стороннюю *.dll то получение свойств класса производится не напрямую, а через специальные процедуры.
На C++ это выглядело бы приблизительно вот так (часть кода из п.4):
- Код: Выделить всё
- webView->page()
На FreePascal (Lazarus):
- Код: Выделить всё
- QWebView_page(ActiveTab.QWebView);
7. Получим фрейм страницы.
На C++ это выглядело бы приблизительно вот так (часть кода из п.4):
- Код: Выделить всё
- MyFrame = webView->page()->mainFrame();
На FreePascal (Lazarus):
- Код: Выделить всё
- MyFrame := QWebPage_mainFrame(QWebView_page(ActiveTab.QWebView));
8. Теперь получим HTML.
- Код: Выделить всё
- var
 FUrl: WideString;
 ...
 QWebFrame_toHtml(MyFrame, @FUrl);
 Memo.Lines.Add(UTF8Encode(FUrl));
 ...
9. Теперь руками можно реализовать диалог сохранения файла и при сохранении скачать и сохранить все дополнительные файлы к HTML в виде изображений, css и т.п.
Надеюсь это кому нибудь пригодиться.



