Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.12.2007, 22:59   #1
snakesoft
Пользователь
 
Регистрация: 26.12.2006
Сообщений: 13
По умолчанию Загрузка стримом

Здравствуйте.У меня такая проблемка.
Имеется листбокс,в нем адреса страниц в интернете.
При нажатии на кнопку нужно пройтись по списку и по очереди загрузить в memo указанную страницу.

Код:
//при нажатии на кнопку
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[i]);
if sk <> nil then
  sk.position := 0;
  dtext.Lines.LoadFromStream(sk);
  sk.Free;
end;
end;
Код:
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('', 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;
Помогите решить проблему пожалуйста
С уважением.
snakesoft вне форума Ответить с цитированием
Старый 10.12.2007, 09:18   #2
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

смысл усложнять код?
компонент IdHttpClient
метод GET
в цикле делайте GET каждому адресу в возвращаемом результате будет код страницы
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 10.12.2007, 16:43   #3
snakesoft
Пользователь
 
Регистрация: 26.12.2006
Сообщений: 13
По умолчанию

Попробовал IDhttpClient

Код:
idhttp1.Get('http://yandex.ru',mem);
memo1.Lines.LoadFromStream(mem);
Вылетает с ошибкой

Acess violation at adress 00415C5C in module 'Project1.exe' Read of adress 00000000.
snakesoft вне форума Ответить с цитированием
Старый 10.12.2007, 16:47   #4
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Ну чтож вам так лень залезать в help...
первый вариант:

Код:
s:string;
...
s:=idhttp1.Get('http://yandex.ru');
memo1.lines.add(s);
второй вариант:

Код:
....
memo1.text:=idhttp1.Get('http://yandex.ru');
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 10.12.2007, 19:02   #5
snakesoft
Пользователь
 
Регистрация: 26.12.2006
Сообщений: 13
По умолчанию

Благодарю,Квэнди!
snakesoft вне форума Ответить с цитированием
Старый 10.12.2007, 20:34   #6
snakesoft
Пользователь
 
Регистрация: 26.12.2006
Сообщений: 13
По умолчанию

Только вот прикол еще в чем...
Пытаюсь выполнить загрузку по списку

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
i:=-1;
while i<listbox1.Count do
begin
i:=i+1;
listbox1.ItemIndex:=i;
memo1.text:=idhttp1.Get(listbox1.items.Strings[i]);
end;
end;
Текст страницы не грузится в memo.

Код:
memo1.text:=idhttp1.Get('http://yandex.ru');  ////если использовать так то все грузится

Последний раз редактировалось snakesoft; 10.12.2007 в 20:39.
snakesoft вне форума Ответить с цитированием
Старый 10.12.2007, 21:24   #7
snakesoft
Пользователь
 
Регистрация: 26.12.2006
Сообщений: 13
По умолчанию

ААА....Соррии я забыл
application.ProcessMessages; написать в цикле.
Теперь все норм.
Извиняйте
snakesoft вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка Witaliy PHP 3 12.07.2008 18:06
Загрузка ЦП HelloZAPOR Win Api 7 05.11.2007 15:43
Загрузка UnD)eaD)Snake Общие вопросы Delphi 10 19.08.2007 11:24
Загрузка ОЗУ HelloZAPOR Общие вопросы Delphi 2 20.07.2007 18:40
Загрузка DLL Hollander Общие вопросы Delphi 3 21.05.2007 20:19