Jak zinterpretować kod html?

0

Nie chcę pisać swojego interpretatora. Najlepiej było by użyć TWebBrowser'a, i tej dziwnej klasy OleObject. Google milczą na ten temat, jak wyświetlić swój kod.

Próbowałem wylistować wszystkie metody klasy OleObject ale moje delphi zgłupiało, i po wpisaniu w edytor czegoś takiego

WebBrowswer1.OleObject.Doc

wciskam Ctrl+Space żeby zobaczyć podpowiedzi. Nic się nie dzieje. Dopisuję

WebBrowser1.OleObject.Document

nadal nic się nie dzieje. A wiem że takie klasy i metody są z artykułu TWebBrowser i przyjaciele.

Co gorsza, po uruchomieniu Syntax Check, nie widzę nic. A NAWET program się kompiluje! Potem widzę błąd, pokazany w załączniku. Zbaraniałem teraz, gdyż nigdy nie miałem do czynienia z czymś takim. Pomoże ktoś?

0

Znaczy chodzi o wyświetlenie kodu nie z pliku na dysku lokalnym tylko masz kod w pamięci programu?

//do uses ActiveX
var
  PersistStreamInit: IPersistStreamInit;
  StringStream: TStringStream;
  HTML: string;
begin
  HTML:= '<!DOCTYPE html><html><body>' +
  '<p style="color: #FF0000; font-wieight: bold; font-size: 18px; text-align: center;" >' +
  'Test HTML</p></body></html>';

  WebBrowser1.Navigate('about:blank'); //Document musi istniec wiec trzeba zaladowac chocby pusta strone
  repeat
    Application.ProcessMessages;
    Sleep(100);
  until WebBrowser1.ReadyState = READYSTATE_COMPLETE; //czekaj na zaladowanie
  if (WebBrowser1.Document.QueryInterface(IPersistStreamInit, PersistStreamInit) = S_OK) then
  begin
    if (PersistStreamInit.InitNew <> S_OK) then exit;
    StringStream:= TStringStream.Create(HTML);;
    try
    PersistStreamInit.Load(TStreamAdapter.Create(StringStream));
    finally
    StringStream.Free;
    end;
  end;
end;
0

To było jakoś tak:

uses mshtml;
...
procedure TForm1.EWBDocumentComplete(ASender: TObject; const pDisp: IDispatch; var URL: OleVariant);
var
  DocHtml: IHTMLDocument2;
  AllLinks: IHTMLElementCollection;
  Link: IHTMLElement;
  i: integer;
begin
  try
    DocHtml:= EWB.Document as IHTMLDocument2;
    if Assigned(DocHtml) then
    begin
      AllLinks:= DocHtml.Links;
      for i:= 0 to (AllLinks.length - 1) do
      begin
        // tu się pierdzielisz z linkami, możesz też obsługiwać pola formularzy (IHTMLInputElement, IHTMLFormElement) itp. poczytaj o JavaScript i DOMie
        Link:= (AllLinks.item(i, 0) as IHTMLElement);
        if Link.innerHTML = 'Logowanie' then
        begin
          Link.innerHTML:= 'Odwal się złamasie';
          Link.outerHTML:= StringReplace(Link.outerHTML, 'user/login', 'info/nara', [rfIgnoreCase]); //podmiana linka
        end;
      end;
    end;
  except
    on E:Exception do
    begin
// obsługa błędów
  end;
end;

Jak korzystasz z silnika IE to polecam EmbeddedWB (balsa.com) na bazie WebBrowsera. Na moje oko lepiej się jednak sprawuje Delphi Chromium Embedded z silnikiem WebKit.

1 użytkowników online, w tym zalogowanych: 0, gości: 1