Returning HTML Code (Delphi WebBrowser)

Como ontem precisei deste código para solucionar um problema para “um amigo” e não encontrei nada, perdi algumas horinhas bolando um, então resolvi soltar o código ai ;)
tá ai brother hehe..

Proposta:
Receber em modo texto para qualquer componente ou variável string o código HTML de uma página independente da configuração proxy especificada pelo internet explorer.

Solução:
Para que o site sempre fosse localizado eu desenvolvi duas maneiras para que o proxy fosse sempre detectado. Na primeira maneira, (e pelo jeito não a mais recomendada), eu desenvolvi um código (que funciona apenas no Delphi 5), para pegar o proxy no registro:
procedure (De um OnbuttonClick por exemplo);
var //variáveis
registro : TRegistry;
proxynoregistro : string;
proxy,p : string;
porta : integer;
i,pos : integer;
begin registro := TRegistry.Create;
registro.RootKey := HKEY_CURRENT_USER;
if registro.OpenKey(‘\Software\Microsoft\Windows\CurrentVersion\Internet Settings’, True) then
proxynoregistro:=Registro.ReadString(‘ProxyServer’);
registro.free;
proxy:=”; porta:=0; p:=”;
pos:=0; while proxynoregistro[pos] ‘:’ do inc(pos);
memo1.lines.add(”); memo1.lines.add(”); memo1.lines.add(”);
memo1.lines.strings[0]:=’['+INTTOSTR(pos)+'] Proxy identificado…’;
memo1.lines.Strings[1]:=”;
memo1.lines.Strings[2]:=”;
for i:=0 to pos-1 do
memo1.lines.strings[1]:=memo1.lines.strings[1]+proxynoregistro[i];
for i:=pos+1 to length(proxynoregistro) do
memo1.lines.strings[2]:=memo1.lines.strings[2]+proxynoregistro[i];
try proxy:=memo1.lines.strings[1];
p:=memo1.lines.strings[2];
porta:=STRTOINT(p);
if memo1.lines.Strings[1] = ” then proxy:=”;
if memo1.lines.Strings[2] = ” then porta:=0;
except end;
Componente.Proxy:=proxy;
Componente.ProxyPort:=porta;
Componente.Get(…

já validado para funcionar caso o proxy não esteja especificado. Porem, é uma das gambiarras mais locas que já fiz também.. e convenhamos, desnecessária.
Eu utilizei do TNMHttp1 disponível apenas para o Delphi 5.
Por outro lado,
Tive que abandonar e iniciar toda a função de uma mesma maneira com componentes compatíveis com o Delphi 5 e 7,
foi ai que encontrei o TWebBrowser1
Disponível nos Delphi’s 5 ou 7 > Internet > WebBrowser

Ok… Para que a function funcione, precisaremos declarar algumas coisas na uses como OleCtrls, SHDocVw, e ActiveX;

Depois insira o componente WebBrowser1, um Edit1, e um Memo1.

E em implementation insira a function:

function getHTMLcode(memo: TStrings): Boolean;
var
psi: IPersistStreamInit;
iss: TStringStream;
is: IStream;
s: string;
begin
psi := WebBrowser1.Document as IPersistStreamInit;
s := ”;
iss := TStringStream.Create(s);
try is := TStreamAdapter.Create(iss, soReference) as IStream;
result := Succeeded(ps.Save(is, True));
if result then memo.Add(iss.Datastring);
finally iss.Free;
end;
end;

//E o evento que perceberá quando a página foi carregada e seu código poderá ser retirado, é este!…
procedure TForm1.WebBrowser1DownloadComplete(Sender: TObject);
begin
memo1.clear;
getHTMLcode(Memo1.Lines);
end;

//Depois a função de carregar a página pode ser facilmente chamada…
procedure (Exemplo de um OnButtonClick);
var
flag:olevariant;
begin
webbrowser1.navigate(edit1.text,flag,flag,flag,flag);
//função principal para chamar a página da web desejada
//especificada (no exemplo) pelo componente edit1.text.
end;

end.
Enjoy =]

Deixe uma resposta