Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
AlexP11223
58 / 59 / 19
Регистрация: 20.04.2011
Сообщений: 353
#1

Как сделать ProgressBar при запуске программы

07.10.2011, 16:42. Просмотров 2750. Ответов 10
Метки нет (Все метки)

При первом запуске программы грузится информация из интернета и это занимает некоторое время (все происходит на мейн форме). Как сделать в это время прогресс бар? Только используя другую форму как главную?

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2011, 16:42
Ответы с готовыми решениями:

как сделать авторизацию при запуске программы(администратор,пользователь
суть проблемы такова есть программа в ней функция редактирования бд, эта...

Как сделать, чтобы при запуске программы кнопка автоматически нажималась?
есть программа (обсалютно любая на которой одна кнопка стоит и все) как сделать...

Как сделать, чтобы при запуске программы кнопка автоматически нажималась?
unit Unit1; interface uses Windows, Messages, SysUtils, Variants,...

Как сделать, чтобы при запуске программы сначала показывалась Form2
Всем привет! Думаю Вам не затруднит ответить на такой вопрос... Имеются 2...

Как сделать что бы сразу открывалась страница при запуске программы в WebBrowser
Как сделать что бы сразу открывалась страница при запуске программы в...

10
Arcor
4817 / 1822 / 380
Регистрация: 20.11.2009
Сообщений: 5,815
Записей в блоге: 1
07.10.2011, 16:57 #2
т.е. программа виснет при скачке файлов с интернета? тогда поток решит все проблемы

ну если обязательно то можно и в форму 2 напихать все это

я делал программу скачивает она довольно много из интернета, программой управлять нельзя было - зависшая была, я все вставил в поток, пока там информация скачивалась, я спокойно делал дальше что нужно в программе
1
AlexP11223
58 / 59 / 19
Регистрация: 20.04.2011
Сообщений: 353
07.10.2011, 17:03  [ТС] #3
а можно пример работы с потоком?)
На основе информации скачанной из интернета (всего 2 хтмл страницы и несколько мелких файлов, но может и сек 10-15 скачиваться) много чего создается в программе и без этого смысла в ее работе немного, хотя тоже вариант. Пока все тупо в FormCreate.

Если со второй формой, то как потом закрывать все это? В OnCloseQuery прописывать закрытие обоих?
0
Arcor
4817 / 1822 / 380
Регистрация: 20.11.2009
Сообщений: 5,815
Записей в блоге: 1
07.10.2011, 18:12 #4
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdHTTP, ComCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    ProgressBar1: TProgressBar;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;
  TDownloadThread = class(TThread)
  private
    Value: Integer; // Для прогрессбара показатель
    Count: Integer; // кол-во ссылок
  protected
    procedure Execute; override;
    procedure DownLoad;
  end;
var
  Form1: TForm1;
  Loader: TDownloadThread;
  A: Array of String; // контейнер ссылок для скачивания
implementation
 
{$R *.dfm}
 
procedure TDownloadThread.Execute;
begin
  Synchronize(DownLoad);
 
end;
 
procedure TDownloadThread.DownLoad;
var Down: TIdHTTP;
    i: Integer;
    Str: TStringList;
begin
  Str := TStringList.Create;
  Down := TIdHTTP.Create(nil);
  for i := 0 to Count-1 do
    begin
      Str.Text := Down.Get(A[i]);
      Value := i;
      Str.SaveToFile(IntToStr(i)+'.txt');
      Form1.ProgressBar1.Position := Loader.Value;
    end;
end;
 
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  Loader := TDownloadThread.Create(True);
  Loader.Count := 5;
  ProgressBar1.Max := Loader.Count-1;
  SetLength(A, Loader.Count);
  // заполняем массив ссылками на которые перйти нужно будет
  A[0] := 'http://www.google.ru/';
  A[1] := 'http://www.google.ru/';
  A[2] := 'http://www.google.ru/';
  A[3] := 'http://www.google.ru/';
  A[4] := 'http://www.google.ru/';
  Loader.FreeOnTerminate := True;
  Loader.Resume;
end;
 
end.
я вот на подобии что-то делал

Добавлено через 1 минуту
программа просто скачивает 5 раз сайт гугля и сохраняет в 5 разных файлах, показывает прогресс, каждого скачанного файла при чем программа ни на секунду не виснет
0
AlexP11223
58 / 59 / 19
Регистрация: 20.04.2011
Сообщений: 353
07.10.2011, 18:25  [ТС] #5
Что-то не делает ничего программа после нажатия кнопки. И даже дебаггер не хочет идти в процедуру нажатия этой кнопки (если run to cursor в ней, то после нажатия ничего не происходит).
0
Arcor
4817 / 1822 / 380
Регистрация: 20.11.2009
Сообщений: 5,815
Записей в блоге: 1
07.10.2011, 18:28 #6
а ты когда кинул кнопку на форму, сделал ей событие онклик?
0
AlexP11223
58 / 59 / 19
Регистрация: 20.04.2011
Сообщений: 353
07.10.2011, 18:32  [ТС] #7
Нет Теперь работает)
0
Arcor
4817 / 1822 / 380
Регистрация: 20.11.2009
Сообщений: 5,815
Записей в блоге: 1
07.10.2011, 18:34 #8
я не рабочее не выкладываю, вернее выкладываю если сам спрашиваю
0
AlexP11223
58 / 59 / 19
Регистрация: 20.04.2011
Сообщений: 353
07.10.2011, 18:45  [ТС] #9
Только что-то я не понял в чем смысл потока: все равно виснет программа пока он выполняется (поставил 555 загрузок)
0
Arcor
4817 / 1822 / 380
Регистрация: 20.11.2009
Сообщений: 5,815
Записей в блоге: 1
07.10.2011, 18:47 #10
что-то у тебя не так значит, у меня работает по этому же принципу программа, скачивает минут 5 информацию, и все работает как нужно, смотри что не так
0
AlexP11223
58 / 59 / 19
Регистрация: 20.04.2011
Сообщений: 353
07.10.2011, 20:16  [ТС] #11
Кинул кнопку, прогрессбар и ричедит, евент клика для кнопки, поменял a[i] на a[0] и на ya.ru, а то гугл забанил видимо и выдавать ошибку начал. Больше ничего не делал, только переименовал кнопку и прогрессбар. Запускал и из Дельфи, и из .ехе.

Добавлено через 1 час 9 минут
Я тут таки прочитал про потоки. Может так должно быть? У тебя же всё в Synchronize было:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure TDownloadThread.Execute;
var Down: TIdHTTP;  i: Integer;
    Str: TStringList;
begin
  Str := TStringList.Create;
  Down := TIdHTTP.Create(nil);
  for i := 0 to Count-1 do
    begin
     Str.Text := Down.Get(A[0]);
     Value := i;
     Str.SaveToFile(IntToStr(i)+'.txt');
     Synchronize(DownLoad);
    end;
 
end;
 
procedure TDownloadThread.DownLoad;
begin
     Form1.pb1.Position := Loader.Value;
end;
так все норм)
0
07.10.2011, 20:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2011, 20:16

Как сделать что бы дочерние формы в MDI application delphi сразу не открывались при запуске программы
Здравствуйте, как сделать что бы дочерние формы в MDI application delphi сразу...

Delphi XE7 Как сделать Форму головной, чтобы она при запуске программы высвечивалась сначало?
У меня есть 2 формы, но мне нужно, когда я запускаю программу, чо бы...

Можно ли сделать всплывающие окно при запуске программы
Хочу сделать Пользовательское соглашение (с кнопками согласен\не согласен)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru