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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.12.2011, 10:25   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
Вопрос Выставить позицию ProgressBar на 0

Код:
unit Unit1;

interface

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

const
  MY_MESS = WM_USER + 100;

type
  TForm1 = class(TForm)
    IdHTTP1: TIdHTTP;
    ProgressBar1: TProgressBar;
    Button1: TButton;
    procedure MyProgress(var msg: TMessage); message MY_MESS;
    procedure IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;
      const AWorkCount: Integer);
    procedure IdHTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
      const AWorkCountMax: Integer);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.MyProgress(var msg: TMessage);
begin
  case msg.WParam of
  0: begin
    ProgressBar1.Max := msg.LParam;
    ProgressBar1.Position := 0;
  end;

  1: ProgressBar1.Position := msg.LParam;
  end;
end;

procedure TForm1.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
begin
  PostMessage(Form1.Handle, MY_MESS, 1, AWorkCount);
end;

procedure TForm1.IdHTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCountMax: Integer);
begin
  PostMessage(Form1.Handle, MY_MESS, 0, AWorkCountMax);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  URL: string;
begin
  URL := '';

  try
    URL := IdHTTP1.Get('http://77.108.194.247/0.htm');
  except
    IdHTTP1.Disconnect;
    ProgressBar1.Position := 0; // Не работает
    MessageBox(0, 'Произошла ошибка при получении данных', 'Ошибка', MB_ICONError);
    Exit;
  end;
end;

end.
ProgressBar не хочет устанавливаться в позицию 0. Что не так делаю?
Shouldercannon вне форума Ответить с цитированием
Старый 03.12.2011, 10:35   #2
TorrentTor
Форумчанин
 
Аватар для TorrentTor
 
Регистрация: 02.11.2011
Сообщений: 105
По умолчанию

А сообщение об ошибке выдает?
TorrentTor вне форума Ответить с цитированием
Старый 03.12.2011, 10:51   #3
impulsgraw
Верховный Судья
Пользователь
 
Аватар для impulsgraw
 
Регистрация: 23.11.2010
Сообщений: 82
Подмигивание

Может быть, проблема в том, что у тебя прогрессбар просто заблокирован?
попробуй в том месте, где ты меняешь позицию на 0, поставить ссылку на функцию, в которой будет описана инструкция присваивания прогрессбару значения 0.
Ну вобщем вот так:
Код:
unit Unit1;

interface

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

const
  MY_MESS = WM_USER + 100;

type
  TForm1 = class(TForm)
    IdHTTP1: TIdHTTP;
    ProgressBar1: TProgressBar;
    Button1: TButton;
    procedure MyProgress(var msg: TMessage); message MY_MESS;
    procedure IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;
      const AWorkCount: Integer);
    procedure IdHTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
      const AWorkCountMax: Integer);
    procedure Button1Click(Sender: TObject);
    procedure changeProgressBarPosition(pos:integer; Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

...

procedure TForm1.Button1Click(Sender: TObject);
var
  URL: string;
begin
  URL := '';

  try
    URL := IdHTTP1.Get('http://77.108.194.247/0.htm');
  except
    IdHTTP1.Disconnect;
    changeProgressBarPosition(0);
    MessageBox(0, 'Произошла ошибка при получении данных', 'Ошибка', MB_ICONError);
    Exit;
  end;
end;

procedure TForm1.changeProgressBarPosition(pos:integer; Sender: TObject);
begin
ProgressBar1.Position := pos;
end;

Последний раз редактировалось impulsgraw; 03.12.2011 в 10:53.
impulsgraw вне форума Ответить с цитированием
Старый 03.12.2011, 12:03   #4
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Цитата:
Сообщение от TorrentTor Посмотреть сообщение
А сообщение об ошибке выдает?
Ошибку выдаёт. В этом и фишка, если ошибка, то
Код:
Progressbar1.Position := 0;
На счёт блокировки я не знаю, но сам лично не блокирую.

Код:
procedure changeProgressBarPosition(pos:integer; Sender: TObject);
...
changeProgressBarPosition(0); // - [Error] Unit1.pas(73): Not enough actual parameters
...
procedure TForm1.changeProgressBarPosition(pos:integer; Sender: TObject);
begin
ProgressBar1.Position := pos;
end;
Пробовал просто
Код:
procedure changeProgressBarPosition(pos:integer);
Не помогло.
Shouldercannon вне форума Ответить с цитированием
Старый 03.12.2011, 12:14   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Ну раз уж обьявлены сообщения, почему бы их не использовать?
Код:
PostMessage(Form1.Handle, MY_MESS, 1, 0);
PostMessage(Form1.Handle, MY_MESS, 0, 0);
Человек_Борща вне форума Ответить с цитированием
Старый 03.12.2011, 18:07   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от Shouldercannon Посмотреть сообщение
Что не так делаю?
Полностью воспроизвел ваш код у себя - все работает нормально.
Попробуйте пересоздать эту формочку вместе со всем кодом заново - часто помогает при возникновении таких вот непонятных эффектов. Копировать коды процедур при этом можно спокойно.
mihali4 вне форума Ответить с цитированием
Старый 04.12.2011, 13:06   #7
impulsgraw
Верховный Судья
Пользователь
 
Аватар для impulsgraw
 
Регистрация: 23.11.2010
Сообщений: 82
По умолчанию

Ой, извеняюсь, не верно написал.
Верно будет вот так:

Код:
unit Unit1;

interface

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

const
  MY_MESS = WM_USER + 100;

type
  TForm1 = class(TForm)
    IdHTTP1: TIdHTTP;
    ProgressBar1: TProgressBar;
    Button1: TButton;
    procedure MyProgress(var msg: TMessage); message MY_MESS;
    procedure IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;
      const AWorkCount: Integer);
    procedure IdHTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
      const AWorkCountMax: Integer);
    procedure Button1Click(Sender: TObject);
    procedure changeProgressBarPosition(pos:integer; Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

...

procedure TForm1.Button1Click(Sender: TObject);
var
  URL: string;
begin
  URL := '';

  try
    URL := IdHTTP1.Get('http://77.108.194.247/0.htm');
  except
    IdHTTP1.Disconnect;
    changeProgressBarPosition(0, Sender); //вот тут можно подставить значения: Sender, Form1, Self
    MessageBox(0, 'Произошла ошибка при получении данных', 'Ошибка', MB_ICONError);
    Exit;
  end;
end;

procedure TForm1.changeProgressBarPosition(pos:integer; Sender: TObject);
begin
ProgressBar1.Position := pos;
end;
impulsgraw вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как выставить права доступа? feesta Помощь студентам 1 20.04.2011 22:30
немогу выставить монитор Виталик1 Компьютерное железо 0 05.06.2010 22:18
Как руский выставить? на MYSQL evgenrpo PHP 1 15.12.2009 11:41
Выставить таймер. IVANSour Общие вопросы Delphi 5 01.02.2009 21:25
выставить в DataType Михаил Юрьевич БД в Delphi 2 28.12.2008 17:40