Código: Seleccionar todo

unit Download;

Uses
WinInet;

{
  Read online Source example by The Swash
  Date: 30/06/2010
  Thanks to Thor
  References : API Guide, MSDN, Swissdelphicenter
}

function GetOnlineSource(URL: String):String;
var
hSesion:    HINTERNET;
hSesionURL: HINTERNET;
lpBuffer :  array [0..1024] of char;
hRet:       DWORD;
begin
hSesion:= InternetOpen('IP',INTERNET_OPEN_TYPE_DIRECT,nil,nil,0);
If hSesion <> nil then
begin
     hSesionURL:= InternetOpenURL(hSesion,PChar(URL),nil,0,INTERNET_FLAG_RELOAD,0);
     If hSesionURL <> Nil Then
     begin
      Repeat
      InternetReadFile(hSesionURL,@lpBuffer,1024,hRet);
      Result :=  Result + lpBuffer;
      Until (hRet = 0);
     end;
InternetCloseHandle(hSesionURL);
end;
InternetCloseHandle(hsesion)
end;
Uso:

Código: Seleccionar todo

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
 ShowMessage(GetOnlineSource('http://delphi.about.com/library/rtl/blrtlSetLength.htm'));
end;
Por si no saben, pueden utilizarlo para descargar archivos u obtener el codigo fuente de una pagina web.
Agradecimientos a Thor por aguantarme un buen rato con preguntas , a Skyweb por enseñarme a manejar estas Apis. Salu2!
En tu ventana
Y en tu ventana, gritas al cielo pero lo dices callada..
he probado tu code cambiando sólamente el uso por uno un poco más automatizado...

Código: Seleccionar todo

procedure TForm1.Button1Click(Sender: TObject);
begin
   Memo1.Lines.Clear;
   Memo1.Lines.Add(GetOnlineSource(Edit1.Text));
end;
y el texto que saca son únicamente caracteres chinos.. :S tienes idea de porqué puede ser?

PD: probé con lo del ShowMessage pero se queda pillao...
Muy bueno, muchas gracias!, me alegra que ya se estén independizando de Bizual Vasik
Saludos
Imagen

"Me saltó el avira cuando estaba mirando la foto de slandg... ¿como puedo modearlo? " - Skillmax
Provado amigo R-007, no veo ninguna falla y con ShowMessage va de 10!
Imagen
En tu ventana
Y en tu ventana, gritas al cielo pero lo dices callada..
bueno quizás sea porque usaba delphi 2010.. (la de embarcadero RAD studio)
de todas formas no me he quedado de brazos cruzados y ya he conseguido solucionarlo, aquí os dejo mi modificación:

Código: Seleccionar todo

Uses WinInet;
function ByteToStr(const byteArray:array of byte): string;
    var i : integer;
    begin
       for i := 1 to SizeOf(byteArray) do
           result := result + Chr(byteArray[i]);
    end;
function GetOnlineSource (const url: string): string;
var
  hInet: HINTERNET;
  hFile: HINTERNET;
  buffer: array[1..1024] of byte;
  bytesRead: DWORD;
begin
  hInet := InternetOpen(PChar(application.title), INTERNET_OPEN_TYPE_PRECONFIG,nil,nil,0);
  hFile := InternetOpenURL(hInet,PChar(url),nil,0,0,0);
  if Assigned(hFile) then
  begin
    repeat
      InternetReadFile(hFile,@buffer,SizeOf(buffer),bytesRead);
      result := result+ByteToStr(buffer);
    until bytesRead = 0;
    InternetCloseHandle(hFile);
  end;
  InternetCloseHandle(hInet);
end;
Realizando esa simple conversión de array de bytes a string con la función ByteToStr ya me deja de dar problemas.
Un saludo!
Responder

Volver a “Fuentes”