Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.28;
Скачать: CL | DM;

Вниз

заполнение ПрогрессБара за заданный промежуток времени   Найти похожие ветки 

 
CaLL|ok   (2007-01-11 23:18) [0]

Здравствуйте. Подскажите как можно сделать постепенное заполнение  ПрогрессБара за заданный промежуток времени(5 сек).Т.е таблеточки в Прогрессбаре должны постепенно появлятся и под конец полностью заполнить его. Спасибо.


 
try ©   (2007-01-11 23:42) [1]

Делай цикл на 5 секунд. В нём и заполняй...


 
CaLL|ok   (2007-01-11 23:51) [2]

Я пробовал так

procedure TForm1.Button1Click(Sender: TObject);
var
 i: integer;
begin
 randomize;
 for i:=0 to 10000 do
 begin
   ProgressBar1.Position:=Random(100);
   Application.ProcessMessages;  
 end;
end;


Но ведь это неправильно.В прогрессбаре появляется всякая белибирда


 
RASkov   (2007-01-12 00:02) [3]

Попробуй так...
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
ProgressBar1.Max:=40;
for i:=1 to 40 do
begin
  ProgressBar1.Position:=ProgressBar1.Position+1;
  Sleep(100);
  Application.ProcessMessages;
end;
end;


 
Johnmen ©   (2007-01-12 00:03) [4]


> В прогрессбаре появляется всякая белибирда


Не всякая, а случайная. Ты её и заказывал ProgressBar1.Position:=Random(100);


 
Johnmen ©   (2007-01-12 00:23) [5]

Со временем интересней.

begin;
ProgressBar1.Max:=50;
ProgressBar1.Position:=0;
StartDT:=Now;
TempDT:=Now;
while Now<=StartDT+5/24/60/60 do begin;
 if Now>TempDT+(5/24/60/60)/ProgressBar1.Max then begin;
   ProgressBar1.Position:=ProgressBar1.Position+1;
   TempDT:=Now;
   end;
 Application.ProcessMessages;
 end;


 
RASkov   (2007-01-12 01:46) [6]

> Со временем интересней.

Точно, Вот еще извращенный вариант.....

var Tm, Tmp: TTimeStamp; TmMes: TTime;
const N = 5000;
begin
   TmMes:=Time;  
   Tm:=DateTimeToTimeStamp(Time);
   Tmp:=Tm;
   ProgressBar1.Min:=Tmp.Time;
   ProgressBar1.Position:=Tmp.Time;
   ProgressBar1.Max:=Tmp.Time+N;
   while Tmp.Time<Tm.Time+N do begin
     ProgressBar1.Position:=Tmp.Time;
     Application.ProcessMessages;
     Tmp:=DateTimeToTimeStamp(Time);
   end;
   ShowMessage(TimeToStr(Time-TmMes));
end;


 
Германн ©   (2007-01-12 01:56) [7]


> Johnmen ©


> RASkov

Извращенцы :)
Телепатор мне подсказывает, что автор хочет пойти по пути IE и показывать хоть и случайное, но всё-таки последовательное заполнение прогрессбара :)


 
RASkov   (2007-01-12 02:04) [8]

> [7] Германн ©   (12.01.07 01:56)


> пойти по пути IE

Ну да... и по заполнении полностью, и время не вышло, начать приблизительно с середины :)

> последовательное заполнение прогрессбара


> [2] CaLL|ok   (11.01.07 23:51)
> ProgressBar1.Position:=Random(100);

Ну здесь можно типа ченить так тогда уж
ProgressBar1.Position:=ProgressBar1.Position+Random(10);

Да... спать пора.


 
Германн ©   (2007-01-12 02:10) [9]


>
> > пойти по пути IE
>
> Ну да... и по заполнении полностью, и время не вышло, начать
> приблизительно с середины :)

Переведу на русский - изобразить "как-бы процесс работы", либо при полном отсутствии таковой, либо при полной "непонятке", что, где,когда и как деется :)


 
RASkov   (2007-01-12 02:15) [10]

> Переведу на русский - изобразить "как-бы процесс работы",
> либо при полном отсутствии таковой, либо при полной "непонятке",
> что, где,когда и как деется :)

Здесь нужен компонент, что бы был похож на циферблат часов и стрелка бы по кругу бегала, вместо ПрогрессБара :))


 
Джо ©   (2007-01-12 06:40) [11]

Если я правильно понял, то мы подойдем по-серьезному к этому вопросу:


type
 TIntervals = array of Integer;

procedure AddInterval (var Intervals: TIntervals; Max: Integer);
 function Summ: Integer;
 var
   I: Integer;
 begin
   Result := 0;
   for I := Low(Intervals) to High(Intervals) do
     Result := Result + Intervals[I]
 end;

 function SummPred: Integer;
 var
   I: Integer;
 begin
   Result := 0;
   for I := Low(Intervals) to High(Intervals)-1 do
     Result := Result + Intervals[I]
 end;

var
 Sm: Integer;
begin
 Sm := Summ;
 if Sm = Max then
   Exit;

 if Sm > Max then
 begin
   Intervals[High(Intervals)] := (Max - SummPred);
   Exit;
 end;

 SetLength(Intervals,Length(Intervals)+1);
 Intervals[High(Intervals)] :=  Random (Max div 5);

 AddInterval(Intervals, Max);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 I: Integer;
 Intervals: TIntervals;
begin
 Randomize;
 ProgressBar1.Max := 5000;
 ProgressBar1.Position := 0;
 AddInterval(Intervals,5000);
 for I := Low(Intervals) to High(Intervals) do
 begin
   Memo1.Lines.Add(IntToStr(Intervals[I]));
   ProgressBar1.Position := ProgressBar1.Position + Intervals[I];
   Sleep (Intervals[I]);
 end;
end;


 
Джо ©   (2007-01-12 06:44) [12]

Или же заменим цикл на такой, так более гладко :)

 for I := Low(Intervals) to High(Intervals) do
 begin
   ProgressBar1.StepBy(5000 div Length(Intervals));
   Sleep (Intervals[I]);
 end;


 
CaLL|ok   (2007-01-12 09:19) [13]

Огромное всем спасибо.



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

Текущий архив: 2007.01.28;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.06 c
2-1168456268
FLOGISTONE
2007-01-10 22:11
2007.01.28
функции времени


2-1168593143
vigo_
2007-01-12 12:12
2007.01.28
Вызов переменной из другого Unit a


2-1168193651
blackgrin
2007-01-07 21:14
2007.01.28
латинская буква Е с acute


2-1168548362
greengeneral
2007-01-11 23:46
2007.01.28
Как мне поменять кодировку


15-1168249479
Parus
2007-01-08 12:44
2007.01.28
ASP VBSCRIPT