Советы по Delphi

         

Некоторые вопросы про таймер


Interval определен как word, поэтому значение 65,535 является максимальным для данного свойства. Не знаю насчет других компонентов, но для использования таймера с интервалом больше минуты, рекомендую следующий код:

    var numOfMinutes: integer; ... numOfMinutes := 30; timer1.interval := 60000; timer1.enabled := true; ... procedure Timer1Timer; begin dec (numOfMinutes);

if numOfMinutes = 0 then begin { делайте все, что вы хотели сделать } end; end;

    unit Alarm;

{
Авторские права (c) 1996 Eric Nielsen. Все права защищены.

Разрешено использовать, копировать, изменять и распространять
для НЕКОММЕРЧЕСКИХ или КОММЕРЧЕСКИХ целей, но без гарантии.
}

interface

uses

SysUtils, WinTypes, WinProcs, StdCtrls, Controls, Classes, ExtCtrls, Forms;
type
TForm1 = class(TForm) Timer1: TTimer; Button1: TButton; Label1: TLabel; Label2: TLabel; Edit1: TEdit; procedure Timer1Timer(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } procedure FormAlarm(Sender: TObject); end;
var
Form1: TForm1;
implementation

{$R *.DFM}
type
TAlarm=class(TComponent) private FAlarmTime : TDateTime; FOnAlarm: TNotifyEvent; FTimer : TTimer; FEnabled : Boolean; procedure SetOnAlarm(Value: TNotifyEvent); procedure SetEnabled(Value: Boolean); procedure SetAlarm(Value: TDateTime); procedure AlarmTimer(Sender: TObject); protected procedure Alarm; dynamic; procedure UpdateAlarm; public property AlarmTime : TDateTime read FAlarmTime write SetAlarm; constructor Create(AOwner: TComponent); override; destructor Destroy; override; published property OnAlarm: TNotifyEvent read FOnAlarm write SetOnAlarm; property Enabled: Boolean read FEnabled write SetEnabled default False; end;
procedure TAlarm.SetOnAlarm(Value: TNotifyEvent);
begin
FOnAlarm := Value; UpdateAlarm; end;

procedure TAlarm.SetEnabled(Value : Boolean);
begin
FEnabled := Value; UpdateAlarm; end;

procedure TAlarm.SetAlarm(Value: TDateTime);
begin
FAlarmTime := Value; UpdateAlarm; end;

procedure TAlarm.Alarm;
begin
If
Assigned(FOnAlarm) then FOnAlarm(Self); end;

procedure TAlarm.UpdateAlarm;
begin
If
Assigned(FOnAlarm) and FEnabled Then FTimer.Enabled := True Else FTimer.Enabled := False; end;

constructor TAlarm.Create(AOwner: TComponent);
begin
FTimer := TTimer.Create(Self); With FTimer do Begin Enabled := False; Interval := 250; OnTimer := AlarmTimer; End; end;

destructor TAlarm.Destroy;
begin
FEnabled := False; UpdateAlarm; FTimer.Free; end;

procedure TAlarm.AlarmTimer(Sender: TObject);
begin
If
Now >= FAlarmTime Then Alarm; end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Label1.Caption := DateTimeToStr(Now); end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Label2.Caption := 'Ожидание...'; With TAlarm.Create(Self) do begin AlarmTime := StrToDateTime(Edit1.Text); OnAlarm := FormAlarm; Enabled := True; end; end;

procedure TForm1.FormAlarm(Sender: TObject);
begin
(Sender as TAlarm).Free; Label2.Caption := 'Бииииип!'; end;

end.

[001628]



Содержание раздела