![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Здравствуйте, помогите найти ошибку, я хочю создать программу, в которой индикатор прогресса заполся по мере того, как проходит время между первой и второй временной отметкой указанных в лейблах? Заполняются только два процента от силы. Помогите найти ошибку:
Код:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, ExtCtrls;
type
TForm2 = class(TForm)
Label1: TLabel;
Label2: TLabel;
ProgressBar1: TProgressBar;
Button1: TButton;
Timer1: TTimer;
procedure FormShow(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
Raz,Per:integer;
implementatiоn
{$R *.dfm}
procedure TForm2.FormShow(Sender: TObject);
var
Time1, Time2: TDateTime;
begin
Time1:=StrtoTime(Label1.Caption);
Time2:=StrtoTime(Label2.Caption);
Raz:=((StrToInt(FormatDateTime('h',Time2)))*60+StrToInt(FormatDateTime('n',Time2)))*60-
((StrToInt(FormatDateTime('h',Time1)))*60+StrToInt(FormatDateTime('n',Time1)))*60;
if Raz Mod 2 <> 0 then Raz:=Raz-1;
Per:=Raz div 100;
if StrToTime(Label1.Caption+':00') <= Time then Timer1.Enabled:=True;
end;
procedure TForm2.Timer1Timer(Sender: TObject);
begin
Timer1.Interval:=Timer1.Interval*Per;
progressbar1.Positiоn := progressbar1.Positiоn + 1;
if progressbar1.Positiоn = 100 then timer1.Enabled := false;
end;
end.Последний раз редактировалось Admin, 10.02.2011 в 20:27. |
|
#2
|
||||
|
||||
|
Попробуй перенести строчку кода из события Timer1Timer
Код:
Timer1.Interval:=Timer1.Interval*Per; |
|
#3
|
||||
|
||||
|
Если я тебя правильно понял то мой пример тебе поможет. (Доработано до секунд). Вводи значения и наблюдай!
Последний раз редактировалось Pilot_Red, 14.06.2012 в 22:25. |
|
#4
|
||||
|
||||
|
Чтобы работало "на всем диапазоне временой оси" в пределах суток
в таймере все убери все и вставь этот кусок кода Код:
sec:=RazSec-SecondsBetween(time,t2); ProgressBar1.Position:=(round(100*(sec-sec1)/RazSec)); |
|
#5
|
|||
|
|||
|
Цитата:
|
|
#6
|
||||
|
||||
|
А мое вложение не катит? Там по моему есть ответ на твой вопрос! в виде работающего сорца. Только не забудь в таймере(моего исходника) вот это вставить(все остальное из таймера убери)
Код:
sec:=RazSec-SecondsBetween(time,t2); ProgressBar1.Position:=(round(100*(sec-sec1)/RazSec)); что делает программа: сначала вычесляет кол-во секунд между двумя time-ми (SecondsBetween) потом (уже в таймере) вычесляется текущя секунда относительно найденого интервала(кол-ва секунд). А потом с помощью обычной интерполяции находим положение прогрессбара он как раз и показывает проценты(possition) |
|
#7
|
|||
|
|||
|
Цитата:
|