Показать сообщение отдельно
  #8  
Старый 10.02.2011, 22:34
Yamaha Yamaha вне форума
Прохожий
 
Регистрация: 10.02.2011
Сообщения: 14
Репутация: 10
По умолчанию

Цитата:
Сообщение от Pilot_Red
А мое вложение не катит? Там по моему есть ответ на твой вопрос! в виде работающего сорца. Только не забудь в таймере(моего исходника) вот это вставить(все остальное из таймера убери)
Код:
sec:=RazSec-SecondsBetween(time,t2);
ProgressBar1.Position:=(round(100*(sec-sec1)/RazSec));

что делает программа:
сначала вычесляет кол-во секунд между двумя time-ми (SecondsBetween)
потом (уже в таймере) вычесляется текущя секунда относительно найденого интервала(кол-ва секунд).
А потом с помощью обычной интерполяции находим положение прогрессбара
он как раз и показывает проценты(possition)

Я видоизменил код, посмотри, мой вариант, для того, чтобы отображался текущий процент уже пройденного времени, у меня правда полностью заполняется прогресс бар начальное время ставлю 21.00 конечное 23.00, а текущее время 22.30

Код:
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,RazNow,BarNow,Per:integer;
implementation

{$R *.dfm}

procedure TForm2.FormShow(Sender: TObject);
var
Time1, Time2: TDateTime;
begin
Time1:=StrtoTime(Label1.Caption);
Time2:=StrtoTime(Label2.Caption);
RazNow:=((StrToInt(FormatDateTime('h',Time)))*60+StrToInt(FormatDateTime('n',Time)))*60-((StrToInt(FormatDateTime('h',Time1)))*60+StrToInt(FormatDateTime('n',Time1)))*60;;
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;
BarNow:=RazNow div Per;
ProgressBar1.Position:=ProgressBar1.Position+RazNow;
if StrToTime(Label1.Caption+':00') <= Time then Timer1.Enabled:=True;

 Timer1.Interval:=Timer1.Interval*Per;
end;

procedure TForm2.Timer1Timer(Sender: TObject);
begin
//Timer1.Interval:=Timer1.Interval*Per;
progressbar1.Position :=  progressbar1.Position + 1;
if progressbar1.Position = 100 then timer1.Enabled := false;
end;

end.
Ответить с цитированием