Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Загрузка страниц и прогресс 
:(
    Опции темы
raduis
Дата 29.6.2008, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 23.2.2008

Репутация: нет
Всего: нет



Здравствуйте. Есть работающий код загрузки интернет страниц для последующего анализа.
Но не получается сделать работающий ProgressBar.

Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdHTTP, ComCtrls;

type
  TForm1 = class(TForm)
    http: TIdHTTP;
    Button1: TButton;
    ProgressBar1: TProgressBar;
    procedure Button1Click(Sender: TObject);
    procedure httpWork(Sender: TObject; AWorkMode: TWorkMode;
      const AWorkCount: Integer);
    procedure httpWorkBegin(Sender: TObject; AWorkMode: TWorkMode;
      const AWorkCountMax: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  s:string;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
http:=TIdHTTP.Create(nil);
  try
    s := http.Get('http://forum.vingrad.ru/');
    showmessage(s);
  except
    ShowMessage('Ошибка');
  end;
  http.Free;
end;

procedure TForm1.httpWork(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
begin
      if AWorkMode = wmRead then ProgressBar1.Position := AWorkCount;
end;

procedure TForm1.httpWorkBegin(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCountMax: Integer);
begin
      if AWorkMode = wmRead then ProgressBar1.Max := AWorkCountMax;
end;
end.


При загрузки страницы progress никак ни реагирует. Где ошибка?

PM MAIL   Вверх
MetalFan
Дата 29.6.2008, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



и что же не работает? 
наверное не перерисовывается?
так вызови Update у прогрессбара.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Qu1nt
Дата 29.6.2008, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 13.1.2007

Репутация: 2
Всего: 50



radius,
Вот так будет правильней:
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
  try
    s := http.Get('http://forum.vingrad.ru/');
    ShowMessage(s);
  except
    ShowMessage('Ошибка');
  end;
end;

Ы?)

Это сообщение отредактировал(а) Qu1nt - 29.6.2008, 15:42
PM MAIL   Вверх
MetalFan
Дата 29.6.2008, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



Qu1nt, чем правильнее?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Qu1nt
Дата 29.6.2008, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 13.1.2007

Репутация: 2
Всего: 50



Тем, что этот код рабочий = )
PM MAIL   Вверх
Matematik
Дата 29.6.2008, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 24
Всего: 50



Если создаешь объект сам, то и события должен указывать ты.
Код

  http:=TIdHTTP.Create(nil);
  // вот
  http.OnWork := httpWork;
  http.OnWorkBegin := httpWorkBegin;
  try
    s := http.Get('http://forum.vingrad.ru/');
    showmessage(s);
  except
    // показать ошибку
    on E:Exception do
      Application.ShowException(E); // или так ShowMessage(e.ClassName+' '+E.Message)
  end;
  http.Free;
end;

PM MAIL WWW ICQ   Вверх
Snowy
Дата 30.6.2008, 14:07 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



1. После установки новой позиции в прогрессбаре, сделай ProcessMessages.
2. Уменьши размер приёмного буфера. Т.к. событие OnWork срабатывает при считывании буфера. И, если его размер будет больше размера файла, то событие вообще не будет вызвано. Лучшую точность даст размер буфера = 1, но снижает скорость загрузки. Оптимально - загрузить Heder, узнать размер, установить размер буфера в зависимости от размера файла по вкусу. (например размер div 20).
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.1266 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.