Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.07.13;
Скачать: [xml.tar.bz2];

Вниз

Как привязаь компонент ProgressBar   Найти похожие ветки 

 
Viktor198 ©   (2008-06-16 18:59) [0]

При считывании файла программа должна показывать хода выполнения процесса. Вот код проги:
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, Grids, ComCtrls, DateUtils;

type
 TForm1 = class(TForm)
   Button1: TButton;
   StringGrid1: TStringGrid;
   OpenDialog1: TOpenDialog;
   ComboBox1: TComboBox;
   Label1: TLabel;
   DateTimePicker1: TDateTimePicker;
   DateTimePicker2: TDateTimePicker;
   Button3: TButton;
   Label2: TLabel;
   Label3: TLabel;
   procedure Button1Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure ComboBox1Enter(Sender: TObject);
   procedure Button3Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;
type code_http=record
data,time,process,command,traffic:string;
date:TDateTime;
end;

var
 Form1: TForm1;
 tabl:code_http;
 Words:TStringList;// Список процессов
 numb:integer;
 bool:boolean;
 summa:int64;
 year,Month,Day:Word;
 F:textfile;
implementation

{$R *.dfm}
{$R resfile.res}
Function GetWord(var S:string):string;
{ Вспомогательная функция для выделения очередного слова из строки }
const     // Множество символов слова:
Letters: set of Char = [chr(33)..chr(255)];
begin
Result:="";
// Удаляем в начале строки все символы, не относящиеся к слову
while  (S <> "")  and not (S[1]  in Letters) do Delete(S,1,1);
// Формируем очередное слово
while  (S <> "")  and (S[1] in Letters) do begin
Result:=Result + S[1];
Delete(S,1,1);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
label 2;
var i:integer;s1,s:string;
begin
// Готовим список Words:
Words:=TStringList.Create;
Words.Sorted:=True; // Сортируем строки
Words.Duplicates  := dupIgnore;
// С помощью стандартного диалогового окна получаем имя файла
if not(OpenDialog1.Execute) then begin
// Файл нельзя открыть:
ShowMessage("Невозможно открыть файл  " + OpenDialog1.FileName); Exit;
end
else begin
AssignFile(F,  OpenDialog1.FileName);
if fileexists(OpenDialog1.FileName) then begin
Reset(F);
repeat
2:readln(F,S);
s1:=GetWord(S);s1:=GetWord(S);s1:=GetWord(S);
if (copy(s1,3,1)="/")or(copy(s1,1,1)<>"[") then goto 2
else s1:=copy(s1,2,pos(":",s1)-2);
Words.Add(s1);
Words.Add("все процессы");
until EOF(F);
closefile(f);
end;end;
ComboBox1.Enabled:=true;
DateTimePicker1.Enabled:=true;
DateTimePicker2.Enabled:=true;
Button3.Enabled:=true;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin bool:=false;
StringGrid1.Cells[0,0]:="Дата";
StringGrid1.Cells[1,0]:="Время";
StringGrid1.Cells[2,0]:="Процесс";
StringGrid1.Cells[3,0]:="Событие";
StringGrid1.Cells[4,0]:="Трафик";
end;

procedure TForm1.ComboBox1Enter(Sender: TObject);
var i:integer;
begin
if bool=false then begin
for i:=0 to Words.Count-1 do ComboBox1.Items.Add(Words[i]);
bool:=true;end;
end;

procedure TForm1.Button3Click(Sender: TObject);
label 1;
var i,j:integer;S,stroka:string;
begin
StringGrid1.RowCount:=2;
StringGrid1.Cells[0,1]:="";
StringGrid1.Cells[1,1]:="";
StringGrid1.Cells[2,1]:="";
StringGrid1.Cells[3,1]:="";
StringGrid1.Cells[4,1]:="";
// Пытаемся открыть файл
AssignFile(F,  OpenDialog1.FileName);
if fileexists(OpenDialog1.FileName) then begin
Reset(F);
// Читаем файл по строкам
i:=1;summa:=0;
Screen.Cursor:=crHourGlass;
repeat
1:readln(F,S); // Читаем очередную строк,
// Выделяем из строки слова и заносим их в запись.
stroka:=GetWord(S);
Year:=strtoint(copy(stroka,1,pos("/",stroka)-1));
stroka:=copy(stroka,pos("/",stroka)+1,length(stroka)-pos("/",stroka));
Month:=strtoint(copy(stroka,1,pos("/",stroka)-1));
Day:=strtoint(copy(stroka,pos("/",stroka)+1,length(stroka)-pos("/",stroka)));
tabl.date:=EncodeDate(Year,Month,Day);
tabl.data:=FormatDateTime("dddddd",tabl.date);
{tabl.data:=DateToStr(tabl.date); }
tabl.time:=GetWord(S);
tabl.process:=GetWord(S);
if (copy(tabl.process,3,1)="/")or(copy(tabl.process,1,1)<>"[") then goto 1
else tabl.process:=copy(tabl.process,2,pos(":",tabl.process)-2);
Words.Add(tabl.process);
Words.Add("все процессы");
tabl.command:=GetWord(S);
tabl.traffic:=GetWord(S);
if not((copy(tabl.traffic,1,1)<>"f")) then goto 1;
if ((CompareDate(DateTimePicker1.Date,tabl.date)=0)or(CompareDate(DateTimePicker1.D ate,tabl.date)=-1))and
  ((CompareDate(DateTimePicker2.Date,tabl.date)=0)or(CompareDate(DateTimePicker2.D ate,tabl.date)=1))and
  ((ComboBox1.Items.Strings[ComboBox1.ItemIndex]=tabl.process)or(ComboBox1.Items.S trings[ComboBox1.ItemIndex]="все процессы"))
   then begin
StringGrid1.Cells[0,i]:=tabl.data;
StringGrid1.Cells[1,i]:=tabl.time;
StringGrid1.Cells[2,i]:=tabl.process;
StringGrid1.Cells[3,i]:=tabl.command;
StringGrid1.Cells[4,i]:=tabl.traffic;
StringGrid1.RowCount:=StringGrid1.RowCount+1;
summa:=summa+strtoint (tabl.traffic);
i:=i+1;
end;  
until EOF(F);
end;
numb:=i-1;
Screen.Cursor:=crDefault;
CloseFile(F);
Screen.Cursor:=crDefault;
if i>1 then StringGrid1.RowCount:=StringGrid1.RowCount-1;
Label1.Visible:=true;
summa:=(summa div 1024) div 1024;
Label1.Caption:="Сумма: "+inttostr(summa)+" Мбайт";
end;

end.


 
AlexanderMS ©   (2008-06-16 19:11) [1]

А конкретнее, в чём проблема? Установить ProgressBar1.Max и изменять ProgressBar1.Position. Остальное - мозг.


 
Viktor198 ©   (2008-06-16 19:18) [2]

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

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, ComCtrls, DateUtils;

type
TForm1 = class(TForm)
  Button1: TButton;
  StringGrid1: TStringGrid;
  OpenDialog1: TOpenDialog;
  ComboBox1: TComboBox;
  Label1: TLabel;
  DateTimePicker1: TDateTimePicker;
  DateTimePicker2: TDateTimePicker;
  Button3: TButton;
  Label2: TLabel;
  Label3: TLabel;
  procedure Button1Click(Sender: TObject);
  procedure FormCreate(Sender: TObject);
  procedure ComboBox1Enter(Sender: TObject);
  procedure Button3Click(Sender: TObject);
private
  { Private declarations }
public
  { Public declarations }
end;
type code_http=record
data,time,process,command,traffic:string;
date:TDateTime;
end;

var
Form1: TForm1;
tabl:code_http;
Words:TStringList;// Список процессов
numb:integer;
bool:boolean;
summa:int64;
year,Month,Day:Word;
F:textfile;
implementation

{$R *.dfm}
{$R resfile.res}
Function GetWord(var S:string):string;
{ Вспомогательная функция для выделения очередного слова из строки }
const     // Множество символов слова:
Letters: set of Char = [chr(33)..chr(255)];
begin
Result:="";
// Удаляем в начале строки все символы, не относящиеся к слову
while  (S <> "")  and not (S[1]  in Letters) do Delete(S,1,1);
// Формируем очередное слово
while  (S <> "")  and (S[1] in Letters) do begin
Result:=Result + S[1];
Delete(S,1,1);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
label 2;
var i:integer;s1,s:string;
begin
// Готовим список Words:
Words:=TStringList.Create;
Words.Sorted:=True; // Сортируем строки
Words.Duplicates  := dupIgnore;
// С помощью стандартного диалогового окна получаем имя файла
if not(OpenDialog1.Execute) then begin
// Файл нельзя открыть:
ShowMessage("Невозможно открыть файл  " + OpenDialog1.FileName); Exit;
end
else begin
AssignFile(F,  OpenDialog1.FileName);
if fileexists(OpenDialog1.FileName) then begin
Reset(F);
repeat
2:readln(F,S);
s1:=GetWord(S);s1:=GetWord(S);s1:=GetWord(S);
if (copy(s1,3,1)="/")or(copy(s1,1,1)<>"[") then goto 2
else s1:=copy(s1,2,pos(":",s1)-2);
Words.Add(s1);
Words.Add("все процессы");
until EOF(F);
closefile(f);
end;end;
ComboBox1.Enabled:=true;
DateTimePicker1.Enabled:=true;
DateTimePicker2.Enabled:=true;
Button3.Enabled:=true;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin bool:=false;
StringGrid1.Cells[0,0]:="Дата";
StringGrid1.Cells[1,0]:="Время";
StringGrid1.Cells[2,0]:="Процесс";
StringGrid1.Cells[3,0]:="Событие";
StringGrid1.Cells[4,0]:="Трафик";
end;

procedure TForm1.ComboBox1Enter(Sender: TObject);
var i:integer;
begin
if bool=false then begin
for i:=0 to Words.Count-1 do ComboBox1.Items.Add(Words[i]);
bool:=true;end;
end;

procedure TForm1.Button3Click(Sender: TObject);
label 1;
var i,j:integer;S,stroka:string;
begin
StringGrid1.RowCount:=2;
StringGrid1.Cells[0,1]:="";
StringGrid1.Cells[1,1]:="";
StringGrid1.Cells[2,1]:="";
StringGrid1.Cells[3,1]:="";
StringGrid1.Cells[4,1]:="";
// Пытаемся открыть файл
AssignFile(F,  OpenDialog1.FileName);
if fileexists(OpenDialog1.FileName) then begin
Reset(F);
// Читаем файл по строкам
i:=1;summa:=0;
Screen.Cursor:=crHourGlass;
repeat
1:readln(F,S); // Читаем очередную строк,
// Выделяем из строки слова и заносим их в запись.
stroka:=GetWord(S);
Year:=strtoint(copy(stroka,1,pos("/",stroka)-1));
stroka:=copy(stroka,pos("/",stroka)+1,length(stroka)-pos("/",stroka));
Month:=strtoint(copy(stroka,1,pos("/",stroka)-1));
Day:=strtoint(copy(stroka,pos("/",stroka)+1,length(stroka)-pos("/",stroka)));
tabl.date:=EncodeDate(Year,Month,Day);
tabl.data:=FormatDateTime("dddddd",tabl.date);
{tabl.data:=DateToStr(tabl.date); }
tabl.time:=GetWord(S);
tabl.process:=GetWord(S);
if (copy(tabl.process,3,1)="/")or(copy(tabl.process,1,1)<>"[") then goto 1
else tabl.process:=copy(tabl.process,2,pos(":",tabl.process)-2);
Words.Add(tabl.process);
Words.Add("все процессы");
tabl.command:=GetWord(S);
tabl.traffic:=GetWord(S);
if not((copy(tabl.traffic,1,1)<>"f")) then goto 1;
if ((CompareDate(DateTimePicker1.Date,tabl.date)=0)or(CompareDate(DateTimePicker1.D  ate,tabl.date)=-1))and
 ((CompareDate(DateTimePicker2.Date,tabl.date)=0)or(CompareDate(DateTimePicker2.D  ate,tabl.date)=1))and
 ((ComboBox1.Items.Strings[ComboBox1.ItemIndex]=tabl.process)or(ComboBox1.Items.S  trings[ComboBox1.ItemIndex]="все процессы"))
  then begin
StringGrid1.Cells[0,i]:=tabl.data;
StringGrid1.Cells[1,i]:=tabl.time;
StringGrid1.Cells[2,i]:=tabl.process;
StringGrid1.Cells[3,i]:=tabl.command;
StringGrid1.Cells[4,i]:=tabl.traffic;
StringGrid1.RowCount:=StringGrid1.RowCount+1;
summa:=summa+strtoint (tabl.traffic);
i:=i+1;
end;  
until EOF(F);
end;
numb:=i-1;
Screen.Cursor:=crDefault;
CloseFile(F);
Screen.Cursor:=crDefault;
if i>1 then StringGrid1.RowCount:=StringGrid1.RowCount-1;
Label1.Visible:=true;
summa:=(summa div 1024) div 1024;
Label1.Caption:="Сумма: "+inttostr(summa)+" Мбайт";
end;

end.


 
AlexanderMS ©   (2008-06-16 19:48) [3]

А как долго происходит чтение из файла и обработка данных? Сколько строк в файле?
Просто, имеет ли смысл ставить ProgressBar?


 
AlexanderMS ©   (2008-06-16 20:05) [4]

> Screen.Cursor:=crDefault;
> CloseFile(F);
> Screen.Cursor:=crDefault;


- Зачем 2 раза?

Этот подход чтения из файла не совсем удобен. Лучше бы через TStringList.

procedure TForm1.Button3Click(Sender: TObject);
label 1;
var i,j:integer;S,stroka:string;
begin
StringGrid1.RowCount:=2;
StringGrid1.Cells[0,1]:="";
StringGrid1.Cells[1,1]:="";
StringGrid1.Cells[2,1]:="";
StringGrid1.Cells[3,1]:="";
StringGrid1.Cells[4,1]:="";
// Пытаемся открыть файл

if fileexists(OpenDialog1.FileName) then begin
summa:=0;
Screen.Cursor:=crHourGlass;

with TStringList.Create do
begin
LoadFromFile(OpenDialog1.FileName);
ProgressBar1.Max := Count;
ProgressBar1.Position := 0;


for i := 1 to Count do
begin

1:
ProgressBar1.Position := ProgressBar1.Position + 1;
// Выделяем из строки слова и заносим их в запись.
stroka:=GetWord(S);
Year:=strtoint(copy(stroka,1,pos("/",stroka)-1));
stroka:=copy(stroka,pos("/",stroka)+1,length(stroka)-pos("/",stroka));
Month:=strtoint(copy(stroka,1,pos("/",stroka)-1));
Day:=strtoint(copy(stroka,pos("/",stroka)+1,length(stroka)-pos("/",stroka)));
tabl.date:=EncodeDate(Year,Month,Day);
tabl.data:=FormatDateTime("dddddd",tabl.date);
{tabl.data:=DateToStr(tabl.date); }
tabl.time:=GetWord(S);
tabl.process:=GetWord(S);
if (copy(tabl.process,3,1)="/")or(copy(tabl.process,1,1)<>"[") then goto 1
else tabl.process:=copy(tabl.process,2,pos(":",tabl.process)-2);
Words.Add(tabl.process);
Words.Add("все процессы");
tabl.command:=GetWord(S);
tabl.traffic:=GetWord(S);
if not((copy(tabl.traffic,1,1)<>"f")) then goto 1;
if ((CompareDate(DateTimePicker1.Date,tabl.date)=0)or(CompareDate(DateTimePicker1.D   ate,tabl.date)=-1))and
((CompareDate(DateTimePicker2.Date,tabl.date)=0)or(CompareDate(DateTimePicker2.D   ate,tabl.date)=1))and
((ComboBox1.Items.Strings[ComboBox1.ItemIndex]=tabl.process)or(ComboBox1.Items.S   trings[ComboBox1.ItemIndex]="все процессы"))
 then begin
StringGrid1.Cells[0,i]:=tabl.data;
StringGrid1.Cells[1,i]:=tabl.time;
StringGrid1.Cells[2,i]:=tabl.process;
StringGrid1.Cells[3,i]:=tabl.command;
StringGrid1.Cells[4,i]:=tabl.traffic;
StringGrid1.RowCount:=StringGrid1.RowCount+1;
summa:=summa+strtoint (tabl.traffic);

end;  
end;

numb:=Count-1;
Screen.Cursor:=crDefault;
// CloseFile(F);
Screen.Cursor:=crDefault;
if i>1 then StringGrid1.RowCount:=StringGrid1.RowCount-1;
Label1.Visible:=true;
summa:=(summa div 1024) div 1024;
Label1.Caption:="Сумма: "+inttostr(summa)+" Мбайт";

end;

end.


Вот, если не ошибся нигде.


 
AlexanderMS ©   (2008-06-16 20:08) [5]

Нет, так будет правильнее.

procedure TForm1.Button3Click(Sender: TObject);
label 1;
var i,j:integer;S,stroka:string;
N : Integer;
begin
StringGrid1.RowCount:=2;
StringGrid1.Cells[0,1]:="";
StringGrid1.Cells[1,1]:="";
StringGrid1.Cells[2,1]:="";
StringGrid1.Cells[3,1]:="";
StringGrid1.Cells[4,1]:="";
// Пытаемся открыть файл

if fileexists(OpenDialog1.FileName) then begin
summa:=0;
Screen.Cursor:=crHourGlass;

with TStringList.Create do
begin
LoadFromFile(OpenDialog1.FileName);
ProgressBar1.Max := Count;
ProgressBar1.Position := 0;
i := 1;
for N := 1 to Count do
begin
1:
ProgressBar1.Position := N;
// Выделяем из строки слова и заносим их в запись.
stroka:=GetWord(S);
Year:=strtoint(copy(stroka,1,pos("/",stroka)-1));
stroka:=copy(stroka,pos("/",stroka)+1,length(stroka)-pos("/",stroka));
Month:=strtoint(copy(stroka,1,pos("/",stroka)-1));
Day:=strtoint(copy(stroka,pos("/",stroka)+1,length(stroka)-pos("/",stroka)));
tabl.date:=EncodeDate(Year,Month,Day);
tabl.data:=FormatDateTime("dddddd",tabl.date);
{tabl.data:=DateToStr(tabl.date); }
tabl.time:=GetWord(S);
tabl.process:=GetWord(S);
if (copy(tabl.process,3,1)="/")or(copy(tabl.process,1,1)<>"[") then goto 1
else tabl.process:=copy(tabl.process,2,pos(":",tabl.process)-2);
Words.Add(tabl.process);
Words.Add("все процессы");
tabl.command:=GetWord(S);
tabl.traffic:=GetWord(S);
if not((copy(tabl.traffic,1,1)<>"f")) then goto 1;
if ((CompareDate(DateTimePicker1.Date,tabl.date)=0)or(CompareDate(DateTimePicker1.D    ate,tabl.date)=-1))and
((CompareDate(DateTimePicker2.Date,tabl.date)=0)or(CompareDate(DateTimePicker2.D    ate,tabl.date)=1))and
((ComboBox1.Items.Strings[ComboBox1.ItemIndex]=tabl.process)or(ComboBox1.Items.S    trings[ComboBox1.ItemIndex]="все процессы"))
then begin
StringGrid1.Cells[0,i]:=tabl.data;
StringGrid1.Cells[1,i]:=tabl.time;
StringGrid1.Cells[2,i]:=tabl.process;
StringGrid1.Cells[3,i]:=tabl.command;
StringGrid1.Cells[4,i]:=tabl.traffic;
StringGrid1.RowCount:=StringGrid1.RowCount+1;
summa:=summa+strtoint (tabl.traffic);
i := i + 1;

end;  
end;

numb:=i-1;
Screen.Cursor:=crDefault;

Screen.Cursor:=crDefault;
if i>1 then StringGrid1.RowCount:=StringGrid1.RowCount-1;
Label1.Visible:=true;
summa:=(summa div 1024) div 1024;
Label1.Caption:="Сумма: "+inttostr(summa)+" Мбайт";

end;

end.


Во втором случае аналогично.


 
app ©   (2008-06-16 20:11) [6]

> AlexanderMS  (16.06.2008 19:48:03)  [3]

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



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.07.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.008 c
2-1213601443
кот
2008-06-16 11:30
2008.07.13
Библиотека с использованием DataModule


15-1211975218
SergP
2008-05-28 15:46
2008.07.13
test


15-1212140391
bsna
2008-05-30 13:39
2008.07.13
кодировка dos и win


2-1213167659
deras
2008-06-11 11:00
2008.07.13
Как обнулить счетчик генератора в FireBird?


2-1213304675
MaryM
2008-06-13 01:04
2008.07.13
Drag &amp; Drop TreeView





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский