Avatar billede spil2vind Nybegynder
28. august 2007 - 10:36 Der er 12 kommentarer og
1 løsning

Få svaret over i en richedit fra WebBrowser.navigate

Jeg bruger TWebBrowser til at kalde en www.testsite.dk/start.asp, resultatet vises fint i det tilhørende vindue, men jeg ville gerne have mulighed for at læse resultatet, eller kopiere indholdet over i en RichEdit

Jeg kalder siden på flg. måde WebBrowser1.Navigate(www.testsite.dk/start.asp)
Avatar billede kroning Nybegynder
28. august 2007 - 12:58 #1
Er det selve HTML koden du vil have fat i?
Hvis du ikke har brug for at se resultatet i TWebBrowser findes der en Indy komponent der er bedre til den slags?
Avatar billede spil2vind Nybegynder
28. august 2007 - 13:03 #2
Det er selve HTML koden jeg gerne vil have fat, ikke nødvendigt at se den, så måske Indy komponenten er bedre?
Avatar billede pidgeot Nybegynder
28. august 2007 - 13:11 #3
Hvis du ved du aldrig skal vise selve siden, ja - men det er ikke det samme som at du ikke kan få fat på den med din TWebBrowser.

Jeg bruger selv følgende kode i et program (kun relevante dele er medtaget):

procedure TForm1.WebBrowser1DocumentComplete2(ASender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
var
  doc:string;
begin
  ExtractOriginalHTML(TWebBrowser(ASender), doc);
end;

procedure TForm1.ExtractOriginalHTML(ASender: TWebBrowser; var doc: string);
var
  buf: TStringStream;
  PSI: IPersistStreamInit;
begin
  buf := TStringStream.Create('');
  try
    try
      PSI := IHTMLDocument2(ASender.Document) as IPersistStreamInit;
      if Succeeded(PSI.Save(TStreamAdapter.Create(Buf), LongBool(True))) then
      begin
        Buf.Position := 0;
        doc := buf.DataString;
      end
      else
      begin
        raise EStreamError.Create('Error: Document couldn''t be read. Program will quit.');
      end;
    except
      on e: EStreamError do begin
        MessageDlg(e.Message, mtError, [mbOK],0);
        Application.Terminate;
      end;
    end;
  finally
    Buf.Free;
  end;
end;

hvilket giver den oprindelige HTML, som den blev sendt til browseren.

Jeg kan ikke på stående fod huske hvad der skal ind under Uses for at den finder det nødvendige.
Avatar billede kroning Nybegynder
28. august 2007 - 13:21 #4
Smid en Indy TIdHTTP komponent på din form, for derefter at få din HTML kode over i en RichEdit skriver du:

RichEdit.Lines.Text:=IdHTTP.Get('http://www.testsite.dk/start.asp');

Husk at http:// skal med.
Avatar billede spil2vind Nybegynder
28. august 2007 - 13:24 #5
Det lyder som noget i den rigtige retning, kan du ikke checke hvad der skal bruges i uses, for at få det til at virke?
Avatar billede pidgeot Nybegynder
28. august 2007 - 13:30 #6
MSHTML og ActiveX, hvis jeg lige ser rigtigt - SHDocVw burde du have i kraft af TWebBrowseren. Men hvis du ved du ikke skal vise selve browseren, er det bedre at bruge Indy som i kroning's løsning.
Avatar billede spil2vind Nybegynder
28. august 2007 - 13:36 #7
Ja, men den komponent har jeg prøvet, den spørger ikke om userid og password, den få bare en fejl, hvis den ikke får et svar.
Avatar billede spil2vind Nybegynder
28. august 2007 - 13:37 #8
Altså indy komponenten
Avatar billede kroning Nybegynder
28. august 2007 - 13:40 #9
ok, du nævnte ikke noget om at siden krævede userid og password
Avatar billede spil2vind Nybegynder
28. august 2007 - 13:55 #10
ok pidqeot, jeg får godt koden fra start.asp filen, men ikke det resultat start.asp giver i browseren, hvad kan der gøres?
Avatar billede spil2vind Nybegynder
28. august 2007 - 15:04 #11
Kiggede lidt på google og fandt nedenstående svar, som giver den HTML kode der bliver vist i browseren.

procedure TForm1.NyExtractOriginalHTML(ASender: TWebBrowser);
var
    iall : IHTMLElement;
begin
  if Assigned(WebBrowser1.Document) then
  begin
    iall := (WebBrowser1.Document AS IHTMLDocument2).body;

    while iall.parentElement <> nil do
    begin
      iall := iall.parentElement;
    end;
    richedit1.Text := iall.outerHTML;
  end;
end;
Avatar billede pidgeot Nybegynder
28. august 2007 - 15:10 #12
Nej, det der giver HTML'en som browseren internt repræsenterer det - hvilket er noget anderledes end den egentlige HTML. Min giver koden som den rent faktisk er, dvs. det browseren henter fra serveren.

Hvad er det helt præcist du skal bruge det her til, siden du ikke kan bruge den egentlige HTML?
Avatar billede spil2vind Nybegynder
28. august 2007 - 15:21 #13
Jeg skal bruge programmet til at overvåge en IIS server, som lige pludselig fryser uden at der opstår nogen fejl, så hvis jeg får en fejl side, kan jeg udføre en iisreset. Forstår ikke helt din kommentar, da din kode giver indholdet af start.asp og min kode giver den html kode som browseren viser. Men tak for hjælpen, måske det kunne være gjort smartere??
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester