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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2011, 06:41   #1
royun
Пользователь
 
Регистрация: 20.05.2011
Сообщений: 67
По умолчанию Чтение файла и ProgressBar

Добрый день.

Файл нормально читается, ProgressBar тоже увеличивается нормально. Но когда ProgressBar полностью заполняется все равно идет считывание файла.
Сама программа:

Код:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls;
type
  TForm1 = class(TForm)
    OpenDialog1: TOpenDialog;
    Button1: TButton;
    ProgressBar1: TProgressBar;
    StatusBar1: TStatusBar;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
f: File;
i: integer;
Head: array [1..1] of Char;
begin
     if openDialog1.Execute then
     StatusBar1.SimpleText:= ' Идет обработка файла';
     AssignFile(f, Opendialog1.FileName);
     Reset(f, 1);
     ProgressBar1.position:= 0;
     ProgressBar1.max:= round(FileSize(f)*0.019);
     i:=1;
     while not eof(f) do
          begin
               BlockRead(f, Head, 1);
               inc(i);
               ProgressBar1.position:= i;
          end;
    CloseFile(f);
    StatusBar1.SimpleText:= ' Обработка файла закончена';
end;
end.

Последний раз редактировалось royun; 03.10.2011 в 06:43.
royun вне форума Ответить с цитированием
Старый 03.10.2011, 07:05   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Немудрено.
У Вас "емкость" прогресбара выставлена в 0,019-долю от размера файла, и когда позиция чтения файла доходит до этого значение в цикле, прогресбар доходит до своего максимума, расти дальше ему нельзя, а чтение ещё долго будет идти, так как условие выхода из цикла(конец файла) не срабатывает при полном заполнение прогресбара, а только при окончании чтения файла.
Ещё не знаю начет типа File , давно паскалевскими методами работы с файлами не пользовался, но мне кажется, лучше подойдёт File of char или ещё что-то.
Ещё ошибка - если нажать в опендиалоге отмену, то программа всё равно попытается открыть файл ! потому что Вы не проверяете этого - надо бы написать :
Код:
if openDialog1.Execute then
     StatusBar1.SimpleText:= ' Идет обработка файла';
  else exit; //выйдем из процедуры, если нажата отмена
Ну и конечно же, советую застраховаться от ошибки выбора файла так
Код:
if not fileexistst(openDialog1.Execute) then
  exit;

Последний раз редактировалось phomm; 03.10.2011 в 07:10.
phomm вне форума Ответить с цитированием
Старый 03.10.2011, 08:07   #3
royun
Пользователь
 
Регистрация: 20.05.2011
Сообщений: 67
По умолчанию

Тема закрыта
royun вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение из файла spamersd Помощь студентам 1 26.03.2011 19:03
Чтение файла с cd DedBoroda Общие вопросы Delphi 3 24.10.2010 19:25
Чтение из файла! balamut Общие вопросы C/C++ 8 17.05.2010 02:39
чтение из файла dedokk1234 Общие вопросы C/C++ 0 15.06.2009 19:10
Чтение из файла... Bill Gates Общие вопросы Delphi 3 22.03.2008 22:13