Как установить весь HTML в MSHTML? - PullRequest
0 голосов
/ 20 марта 2010

Как установить весь HTML в MSHTML?

Я пытаюсь использовать это назначение:

   (Document as IHTMLDocument3).documentElement.innerHTML := 'abc';  

но я получил ошибку:

"Целевой элемент недействителен для этого Операция "

Я также пытался использовать

(Document as IHTMLDocument2).write 

но эта форма только добавляет HTML в раздел body, и мне нужно заменить весь исходный код HTML.
Кто-нибудь знает, как я это делаю?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 20 марта 2010

Вот мой старый код, посмотрите, поможет ли он вам:

type
  THackMemoryStream = class(TMemoryStream);

procedure Clear(const Document: IHTMLDocument2);
begin
  Document.write(PSafeArray(VarArrayAsPSafeArray(VarArrayOf([WideString('')]))));
  Document.close;
end;

procedure LoadFromStream(const Document: IHTMLDocument2; Stream: TStream);
var
  Persist: IPersistStreamInit;
begin
  Clear(Document);
  Persist := (Document as IDispatch) as IPersistStreamInit;
  OleCheck(Persist.InitNew);
  OleCheck(Persist.Load(TStreamAdapter.Create(Stream)));
end;

procedure SetHtml(const Document: IHTMLDocument2; const Html: WideString);
var
  Stream: TMemoryStream;
begin
  Stream := TMemoryStream.Create;
  try
    THackMemoryStream(Stream).SetPointer(PWideChar(Html), (Length(Html) + 1) * SizeOf(WideChar));
    Stream.Seek(0, soFromBeginning);
    LoadFromStream(Document, Stream);
  finally
    Stream.Free;
  end;
end;
0 голосов
/ 22 марта 2010

В качестве альтернативы вы также можете использовать TEmbededWB , который является расширенной оболочкой для веб-браузера и имеет несколько простых в использовании методов, обеспечивающих эту функциональность.

...