Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: ActiveX/СОМ/CORBA > Использование IHTMLDocument2 без TWebBrowser


Автор: Matematik 27.4.2006, 14:20
Как загрузить html файл в IHTMLDocument2 не используя TWebBrowser. Надо парсить html текст, а использовать WB не хочется.
Спасибо. 

Автор: Matematik 27.4.2006, 14:42
Код

procedure TForm1.Button2Click(Sender: TObject);
var doc : IHTMLDocument2;
    v   : Variant;
    j   : Integer;
begin
  v    := VarArrayCreate([0, 0], varVariant);
  v[0] := '<html><b>1.</b><a href="javascript:ShowRis(143726593)">Рисунки</a></html>';
  doc  := CoHTMLDocument.Create as IHTMLDocument2;
  doc.writeln(PSafeArray(TVarData(v).VArray));
//  doc.clear;
  doc.write(PSafeArray(TVarData(v).VArray));
  for j:=1 to doc.all.length do
  begin
    showmessage(doc.body.innerHTML);
  end;
  doc.close;
end;



Извените за беспокойство 

Автор: MetalFan 30.11.2006, 14:11
в MSDN есть пример:
Код

IHTMLDocument2 *document; // Declared earlier in the code
HRESULT hresult = S_OK;
VARIANT *param;
SAFEARRAY *sfArray;
BSTR bstr = SysAllocString(OLESTR("Written by IHTMLDocument2::write()."));

// Creates a new one-dimensional array
sfArray = SafeArrayCreateVector(VT_VARIANT, 0, 1);

if (sfArray == NULL || document == NULL) {
 goto cleanup;
}

hresult = SafeArrayAccessData(sfArray,(LPVOID*) & param);
param->vt = VT_BSTR;
param->bstrVal = bstr;
hresult = SafeArrayUnaccessData(sfArray);
hresult = document->write(sfArray);

cleanup:
SysFreeString(bstr);
if (sfArray != NULL) {
 SafeArrayDestroy(sfArray);
}

на Delphi делаю так:
Код

function GetHTMLDoc2FromString( const AStr: string ): IHTMLDocument2;
 var
   lSfArr: PSafeArray;
   lVar: PVariant;
   lWS: WideString;
 begin
   Result := CoHTMLDocument.Create as IHTMLDocument2;
   lSfArr := SafeArrayCreateVector(VT_VARIANT, 0, 1);
   if lSfArr <> nil then
   begin
     SafeArrayAccessData( lSfArr, Pointer(lVar) );
     lWS := AStr;
     TVarData(lVar^).VType := VT_BSTR;
     TVarData(lVar^).VOleStr := @lWS[1];
     SafeArrayUnaccessData( lSfArr );
     Result.write(lSfArr);
     //SafeArrayDestroy(lSfArr);  [U]<<- на этой строчке иногда вываливает AV, без нее все ок.но как тогда память освобождать?[/U]
   end;
 end;

подскажите, где косяк?!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)