Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
19-09-2019 03:58
uses ActiveX;
//Выгрузка потокового содержимого объекта в стоку.
function ObjStreamToStr(const aDisp : IDispatch) : String;
const
SelfName = 'ObjStreamToStr()';
var
IPsi : IPersistStreamInit;
Sa : TStreamAdapter;
Ss : TStringStream;
begin
Result := '';
//Проверяем, есть ли ссылка на интерфейс объекта.
if aDisp = nil
then Exit;
//Проверяем, поддерживает ли объект потоковый интерфейс.
//Если потоковый интерфейс поддерживается, то подключаемся к нему.
if aDisp.QueryInterface(IPersistStreamInit, IPsi) <> S_OK //S_OK = 0
then raise Exception.Create(SelfName + '. Объект не поддерживает потоковый интерфейс!');
//Создаём строковый поток.
Ss := TStringStream.Create('');
{Создаём потоковый адаптер и подключаем его к строковому потоку.
Потоковый адаптер реализует интерфейс IStream.
Второй параметр инициализирует свойство Sa.StreamOwnership:
soReference - показывает, что экземпляр Sa не является ответственным за
уничтожение экземпляра Ss. Т. е., при уничтожении, объект Sa
не должен уничтожать связанный с ним поток Ss.
soOwned - показывает, что экземпляр Sa является ответственным за
уничтожение экземпляра Ss. Т. е., при уничтожении, объект Sa
должен уничтожить поток Ss.}
Sa := TStreamAdapter.Create(Ss, soReference);
//Записываем содержимое объекта в строковый поток.
IPsi.Save(Sa, True);
Result := Ss.DataString;
//Уничтожаем экземпляры Sa и Ss.
FreeAndNil(Sa);
FreeAndNil(Ss);
end;
//Загрузка страницы из url (edAdresUrl.Text := 'http://www.delphikingdom.com')
procedure TfvMain.btnUrlOpenClick(Sender: TObject);
var Flags, TargetFrameName, PostData, Headers: OleVariant;
begin
WebBrowser1.Navigate( edAdresUrl.Text, Flags, TargetFrameName, PostData, Headers);
end;
//Выгрузка html текста из WebBrowser в Memo
procedure TfvMain.btnGetTextClick(Sender: TObject);
begin
Mamo1.Text := ObjStreamToStr(WebBrowser1.Document);
end;
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.