Når du skal hente filen fra internettet, kan du evt. bruge denne "simple" metode, der hverken bruger Indy eller gemmer filen til harddisken:
uses Wininet;
// Nedstående funktion er baseret på koden på
http://delphi.about.com/library/weekly/aa013001a.htm :o)
function GetInetStream(const URL: String; Stream: TStream): boolean;
const BufferSize = 1024;
var
hSession, hURL: HInternet;
Buffer: array[1..BufferSize] of Byte;
BufferLen: DWORD;
sAppName: string;
begin
Result:=False;
if Stream = nil then
Exit;
sAppName := 'Mozilla/3.0 (compatible; MozIE Netscape-plugin for Mozilla (Firebird))'; //ExtractFileName(Application.ExeName);
hSession := InternetOpen(PChar(sAppName),
INTERNET_OPEN_TYPE_PRECONFIG,
nil, nil, 0);
try
hURL := InternetOpenURL(hSession,
PChar(URL),
nil,0,0,0);
try
repeat
InternetReadFile(hURL, @Buffer,
SizeOf(Buffer), BufferLen);
Stream.WriteBuffer(Buffer, BufferLen)
until BufferLen = 0;
Result:=True;
finally
InternetCloseHandle(hURL)
end
finally
InternetCloseHandle(hSession)
end
end;
function GetInetString(const URL: String; out S: String): Boolean;
var
Stream: TMemoryStream;
begin
Result := false;
Stream := TMemoryStream.Create;
try
Result := GetInetStream(URL, Stream);
if not Result then
Exit;
Stream.Position := 0;
SetLength(S, Stream.Size);
Result := Stream.Read(S[1], Stream.Size) = Stream.Size;
if not Result then
SetLength(S, 0);
finally
Stream.Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
S: String;
begin
if GetInetString('
http://newz.dk/rss', S) then
RichEdit1.Text := S;
end;