var
sk:Tstream;
begin
for i:=0 to htmllist.Count-1 do
begin
application.ProcessMessages;
htmllist.ItemIndex:=i;
sk:=Tstream.Create;
sk := Download2Stream(htmllist.Items.Strings);
if sk <> nil then
sk.position := 0;
dtext.Lines.LoadFromStream(sk);
sk.Free;
end;
end;
Загрузка стримом
Имеется листбокс,в нем адреса страниц в интернете.
При нажатии на кнопку нужно пройтись по списку и по очереди загрузить в memo указанную страницу.
Код:
Код:
function Download2Stream(const URL: WideString): TStream;
var
dwBytesRead: DWORD;
hService: HINTERNET;
hSession: HINTERNET;
lpBuffer: array[0..1024 + 1] of Char;
begin
Result := nil;
hSession := InternetOpenW('AIMP2', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
try
if Assigned(hSession) then
begin
hService := InternetOpenUrlW(hSession, PWideChar(URL), nil, 0, 0, 0);
if Assigned(hService) then
try
Result := TMemoryStream.Create;
while True do
begin
dwBytesRead := 1024;
InternetReadFile(hService, @lpBuffer, 1024, dwBytesRead);
if dwBytesRead = 0 then break;
Result.Write(lpBuffer, dwBytesRead);
end;
finally
InternetCloseHandle(hService);
end;
end;
finally
InternetCloseHandle(hSession);
end;
end;
var
dwBytesRead: DWORD;
hService: HINTERNET;
hSession: HINTERNET;
lpBuffer: array[0..1024 + 1] of Char;
begin
Result := nil;
hSession := InternetOpenW('AIMP2', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
try
if Assigned(hSession) then
begin
hService := InternetOpenUrlW(hSession, PWideChar(URL), nil, 0, 0, 0);
if Assigned(hService) then
try
Result := TMemoryStream.Create;
while True do
begin
dwBytesRead := 1024;
InternetReadFile(hService, @lpBuffer, 1024, dwBytesRead);
if dwBytesRead = 0 then break;
Result.Write(lpBuffer, dwBytesRead);
end;
finally
InternetCloseHandle(hService);
end;
end;
finally
InternetCloseHandle(hSession);
end;
end;
Проблема в том,что прога вылетает на sk.free;
Помогите решить проблему пожалуйста
С уважением.
Код:
function Download2Stream(const URL: WideString): TStream;
{----------------------------------------------------------}
Result := TMemoryStream.Create;
{----------------------------------------------------------}
end;
{----------------------------------------------------------}
Result := TMemoryStream.Create;
{----------------------------------------------------------}
end;
Если процедура компилится с предупреждениями, то стоит попробовать так...
Код:
function Download2Stream(const URL: WideString): TStream;
var
TempMemStream: TMemoryStream;
begin
{----------------------------------------------------------}
TempMemStream:= TMemoryStream.Create;
{----------------------------------------------------------}
TempMemStream.SaveToStream(Result);
{----------------------------------------------------------}
var
TempMemStream: TMemoryStream;
begin
{----------------------------------------------------------}
TempMemStream:= TMemoryStream.Create;
{----------------------------------------------------------}
TempMemStream.SaveToStream(Result);
{----------------------------------------------------------}
Прочерком обозначен остальной код.
Не получается:((((((((((((((
Прога уже не вылетает,цикл проходится по списку но в memo ничего не грузит
Помогите кто-нибудь решить проблему
С уважением...
Цитата: kastron
Проблема в том,что прога вылетает на sk.free;
Вы просили об этом, собсно...
Вылетало потому, что TStream не есть TMemoryStream.
Цитата: kastron
yager84,Попробовал как ты предложил
Не получается:((((((((((((((
Прога уже не вылетает,цикл проходится по списку но в memo ничего не грузит
Помогите кто-нибудь решить проблему
С уважением...
Не получается:((((((((((((((
Прога уже не вылетает,цикл проходится по списку но в memo ничего не грузит
Помогите кто-нибудь решить проблему
С уважением...
Извините, а нельзя использовать компонент, более подходящий для загрузки страницы, нежеди TMemo. Или может я не понял сути вопроса?