Форум: "Начинающим";
Текущий архив: 2007.01.28;
Скачать: [xml.tar.bz2];
Вниззаполнение ПрогрессБара за заданный промежуток времени Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.046 c