You've already forked lazarus-ccr
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@6790 8e941d3f-bd1b-0410-a28a-d453659cc2b4
194 lines
4.6 KiB
ObjectPascal
194 lines
4.6 KiB
ObjectPascal
unit Unit1;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
|
|
ExtCtrls, VpLEDLabel, VpClock;
|
|
|
|
type
|
|
|
|
{ TForm1 }
|
|
|
|
TForm1 = class(TForm)
|
|
BtnStartStop: TButton;
|
|
CbNewClockFace: TCheckBox;
|
|
CbMilitaryTime: TCheckBox;
|
|
EdCountDownTime: TEdit;
|
|
LblCountDownTime: TLabel;
|
|
LblElapsedTime: TLabel;
|
|
Panel1: TPanel;
|
|
RgDisplayMode: TRadioGroup;
|
|
RgClockMode: TRadioGroup;
|
|
VpClock: TVpClock;
|
|
VpLEDLabel1: TVpLEDLabel;
|
|
procedure AnalogClockCountdownDone(Sender: TObject);
|
|
procedure BtnStartStopClick(Sender: TObject);
|
|
procedure CbMilitaryTimeChange(Sender: TObject);
|
|
procedure CbNewClockFaceChange(Sender: TObject);
|
|
procedure EdCountDownTimeChange(Sender: TObject);
|
|
procedure FormShow(Sender: TObject);
|
|
procedure RgClockModeClick(Sender: TObject);
|
|
procedure RgDisplayModeClick(Sender: TObject);
|
|
procedure VpClockCountdownDone(Sender: TObject);
|
|
procedure VpClockTimeChange(Sender: TObject);
|
|
private
|
|
{ private declarations }
|
|
public
|
|
{ public declarations }
|
|
end;
|
|
|
|
var
|
|
Form1: TForm1;
|
|
|
|
implementation
|
|
|
|
{$R *.lfm}
|
|
|
|
uses
|
|
Math;
|
|
|
|
{ TForm1 }
|
|
|
|
procedure TForm1.AnalogClockCountdownDone(Sender: TObject);
|
|
begin
|
|
ShowMessage('Countdown finished.');
|
|
end;
|
|
|
|
procedure TForm1.VpClockTimeChange(Sender: TObject);
|
|
begin
|
|
LblElapsedTime.Caption := Format('Elapsed: %d hrs, %d min, %d sec', [
|
|
VpClock.ElapsedHours, VpClock.ElapsedMinutes, VpClock.ElapsedSeconds
|
|
]);
|
|
end;
|
|
|
|
procedure TForm1.BtnStartStopClick(Sender: TObject);
|
|
var
|
|
isStarted: Boolean;
|
|
willStart: Boolean;
|
|
begin
|
|
isStarted := VpClock.Active;
|
|
willStart := not isStarted;
|
|
|
|
if willStart and (RgClockMode.ItemIndex = ord(cmCountdownTimer)) then
|
|
RgClockModeClick(nil);
|
|
|
|
VpClock.Active := willStart;
|
|
if VpClock.Active then
|
|
BtnStartStop.Caption := 'Stop' else
|
|
BtnStartStop.Caption := 'Start';
|
|
end;
|
|
|
|
procedure TForm1.CbMilitaryTimeChange(Sender: TObject);
|
|
var
|
|
t: TDateTime;
|
|
begin
|
|
t := VpClock.Time;
|
|
VpClock.DigitalOptions.MilitaryTime := CbMilitaryTime.Checked;
|
|
VpClock.Time := t;
|
|
end;
|
|
|
|
procedure TForm1.CbNewClockFaceChange(Sender: TObject);
|
|
begin
|
|
if CbNewClockFace.Checked then begin
|
|
VpClock.AnalogOptions.ClockFace.LoadFromFile('clockface.bmp');
|
|
VpClock.AnalogOptions.HourHandWidth := 2;
|
|
VpClock.AnalogOptions.MinuteHandWidth := 2;
|
|
VpClock.AnalogOptions.SecondHandWidth := 1;
|
|
VpClock.Width := 100;
|
|
VpClock.Height := 100;
|
|
end else begin
|
|
VpClock.AnalogOptions.ClockFace := nil;
|
|
VpClock.AnalogOptions.HourHandWidth := 4;
|
|
VpClock.AnalogOptions.MinuteHandWidth := 3;
|
|
VpClock.AnalogOptions.SecondHandWidth := 1;
|
|
VpClock.Width := 200;
|
|
VpClock.Height := 200;
|
|
end;
|
|
VpClock.AnalogOptions.DrawMarks := not CbNewClockFace.Checked;
|
|
if RgDisplayMode.ItemIndex = ord(dmAnalog) then
|
|
VpClock.Invalidate;
|
|
end;
|
|
|
|
procedure TForm1.EdCountDownTimeChange(Sender: TObject);
|
|
var
|
|
t: TTime;
|
|
begin
|
|
if VpClock.ClockMode = cmCountDownTimer then
|
|
if TryStrToTime(EdCountdownTime.Text, t) then
|
|
VpClock.Time := t;
|
|
end;
|
|
|
|
procedure TForm1.FormShow(Sender: TObject);
|
|
var
|
|
w: Integer;
|
|
begin
|
|
RgDisplayMode.AutoSize := false;
|
|
RgClockMode.AutoSize := false;
|
|
w := Max(RgDisplayMode.Width, RgClockMode.Width);
|
|
RgDisplayMode.Width := w;
|
|
RgClockMode.Width := w;
|
|
|
|
AutoSize := true;
|
|
end;
|
|
|
|
procedure TForm1.RgClockModeClick(Sender: TObject);
|
|
var
|
|
h,m,s,ms: Word;
|
|
begin
|
|
VpClock.Active := false;
|
|
BtnStartStop.Caption := 'Start';
|
|
VpClock.ClockMode := TVpClockMode(RgClockMode.ItemIndex);
|
|
case VpClock.ClockMode of
|
|
cmClock:
|
|
begin
|
|
VpClock.Time := now;
|
|
VpClock.Active := true;
|
|
BtnStartStop.Caption := 'Stop';
|
|
end;
|
|
cmTimer:
|
|
VpClock.Time := 0;
|
|
cmCountdownTimer:
|
|
begin
|
|
DecodeTime(StrToTime(EdCountDownTime.Text), h,m,s,ms);
|
|
VpClock.HourOffset := h;
|
|
VpClock.MinuteOffset := m;
|
|
VpClock.SecondOffset := s;
|
|
end;
|
|
end;
|
|
EdCountDownTime.Visible := VpClock.ClockMode = cmCountDownTimer;
|
|
LblCountDownTime.Visible := EdCountDownTime.Visible;
|
|
end;
|
|
|
|
procedure TForm1.RgDisplayModeClick(Sender: TObject);
|
|
var
|
|
t: TDateTime;
|
|
begin
|
|
t := VpClock.Time;
|
|
VpClock.DisplayMode := TVpClockDisplayMode(RgDisplayMode.ItemIndex);
|
|
case VpClock.DisplayMode of
|
|
dmAnalog:
|
|
CbNewClockFaceChange(nil);
|
|
dmDigital:
|
|
begin
|
|
VpClock.Width := 136;
|
|
VpClock.Height := 30;
|
|
end;
|
|
end;
|
|
CbMilitaryTime.Visible := VpClock.DisplayMode = dmDigital;
|
|
CbNewClockface.Visible := VpClock.DisplayMode = dmAnalog;
|
|
|
|
VpClock.Time := t;
|
|
end;
|
|
|
|
procedure TForm1.VpClockCountdownDone(Sender: TObject);
|
|
begin
|
|
ShowMessage('Countdown completed.');
|
|
end;
|
|
|
|
|
|
end.
|
|
|