📄 isevensegmentclocksmpte.pas
字号:
Hour : Word;
Min : Word;
Sec : Word;
MSec : Word;
begin
DecodeTime(FTime, Hour, Min, Sec, MSec);
Result := Hour;
end;
//****************************************************************************************************************************************************
function TiSevenSegmentClockSMPTE.GetMinutes: Integer;
var
Hour : Word;
Min : Word;
Sec : Word;
MSec : Word;
begin
DecodeTime(FTime, Hour, Min, Sec, MSec);
Result := Min;
end;
//****************************************************************************************************************************************************
function TiSevenSegmentClockSMPTE.GetSeconds: Integer;
var
Hour : Word;
Min : Word;
Sec : Word;
MSec : Word;
begin
DecodeTime(FTime, Hour, Min, Sec, MSec);
Result := Sec;
end;
//****************************************************************************************************************************************************
procedure TiSevenSegmentClockSMPTE.SetFrameNumber(const Value: Integer);
begin
if FFrameNumber <> Value then
begin
FFrameNumber := Value;
InvalidateChange;
if Assigned(OnValueChange) then OnValueChange(Self)
end;
end;
//****************************************************************************************************************************************************
procedure TiSevenSegmentClockSMPTE.SetFieldNumber(const Value: Integer);
begin
if FFieldNumber <> Value then
begin
FFieldNumber := Value;
InvalidateChange;
if Assigned(OnValueChange) then OnValueChange(Self)
end;
end;
//****************************************************************************************************************************************************
procedure TiSevenSegmentClockSMPTE.SetShowFrameNumber(const Value: Boolean);
begin
if FShowFrameNumber <> Value then
begin
FShowFrameNumber := Value;
DoAutoSize;
InvalidateChange;
end;
end;
//****************************************************************************************************************************************************
procedure TiSevenSegmentClockSMPTE.SetShowFieldNumber(const Value: Boolean);
begin
if FShowFieldNumber <> Value then
begin
FShowFieldNumber := Value;
DoAutoSize;
InvalidateChange;
end;
end;
//****************************************************************************************************************************************************
procedure TiSevenSegmentClockSMPTE.SetHourStyle(const Value: TiClockHourStyle);
begin
if FHourStyle <> Value then
begin
FHourStyle := Value;
InvalidateChange;
end;
end;
//****************************************************************************************************************************************************
procedure TiSevenSegmentClockSMPTE.SetFrameStyle(const Value: TiFrameStyle);
begin
if FFrameStyle <> Value then
begin
FFrameStyle := Value;
InvalidateChange;
end;
end;
//****************************************************************************************************************************************************
procedure TiSevenSegmentClockSMPTE.iPaintTo(Canvas: TCanvas);
var
OffsetPoint : TPoint;
Hour : Word;
Min : Word;
Sec : Word;
MSec : Word;
FrameNumberTemp : Integer;
FieldNumberTemp : Integer;
DigitWidth : Integer;
ColonWidth : Integer;
DigitCount : Integer;
ColonCount : Integer;
CenterOffset : Integer;
CharacterTotalWidth : Integer;
AHeight : Integer;
Character : TSevenSegmentCharacter;
begin
SetupCharacter;
DrawBackGround(Canvas, BackGroundColor);
DigitCount := 6;
ColonCount := 2;
if FShowFrameNumber then
begin
DigitCount := DigitCount + 2;
ColonCount := ColonCount + 1;
end;
if FShowFieldNumber then
begin
DigitCount := DigitCount + 2;
ColonCount := ColonCount + 1;
end;
CharacterTotalWidth := Width - 2*SegmentMargin;
DigitWidth := Trunc( (5*CharacterTotalWidth - 5*DigitSpacing*(DigitCount + ColonCount - 1))/(5*DigitCount + ColonCount));
ColonWidth := DigitWidth div 5;
AHeight := Height - 2*SegmentMargin;
CenterOffset := (Width - DigitCount*(DigitWidth + DigitSpacing) - ColonCount*(ColonWidth + DigitSpacing)+ DigitSpacing) div 2;
OffsetPoint.x := CenterOffset;
OffsetPoint.y := SegmentMargin;
DecodeTime(FTime, Hour, Min, Sec, MSec);
if FHourStyle = ichs12 then if Hour > 12 then Hour := Hour - 12;
if Hour > 9 then Character := TSevenSegmentCharacter(Hour div 10) else Character := ssc0;
SevenSegmentCharacter.Draw(Canvas, OffsetPoint, DigitWidth, AHeight, Character);
OffsetPoint.x := OffsetPoint.x + DigitWidth + DigitSpacing;
if Hour <> 0 then Hour := Hour - (Hour div 10)*10 else Hour := 0;
SevenSegmentCharacter.Draw(Canvas, OffsetPoint, DigitWidth, AHeight, TSevenSegmentCharacter(Hour));
OffsetPoint.x := OffsetPoint.x + DigitWidth + DigitSpacing;
SevenSegmentCharacter.Draw(Canvas, OffsetPoint, ColonWidth, AHeight, sscColon);
OffsetPoint.x := OffsetPoint.x + ColonWidth + DigitSpacing;
if Min > 9 then Character := TSevenSegmentCharacter(Min div 10) else Character := ssc0;
SevenSegmentCharacter.Draw(Canvas, OffsetPoint, DigitWidth, AHeight, Character);
OffsetPoint.x := OffsetPoint.x + DigitWidth + DigitSpacing;
if Min <> 0 then Min := Min - (Min div 10)*10 else Min := 0;
SevenSegmentCharacter.Draw(Canvas, OffsetPoint, DigitWidth, AHeight, TSevenSegmentCharacter(Min));
OffsetPoint.x := OffsetPoint.x + DigitWidth + DigitSpacing;
SevenSegmentCharacter.Draw(Canvas, OffsetPoint, ColonWidth, AHeight, sscColon);
OffsetPoint.x := OffsetPoint.x + ColonWidth + DigitSpacing;
if Sec > 9 then Character := TSevenSegmentCharacter(Sec div 10) else Character := ssc0;
SevenSegmentCharacter.Draw(Canvas, OffsetPoint, DigitWidth, AHeight, Character);
OffsetPoint.x := OffsetPoint.x + DigitWidth + DigitSpacing;
if Sec <> 0 then Sec := Sec - (Sec div 10)*10 else Sec := 0;
SevenSegmentCharacter.Draw(Canvas, OffsetPoint, DigitWidth, AHeight, TSevenSegmentCharacter(Sec));
OffsetPoint.x := OffsetPoint.x + DigitWidth + DigitSpacing;
if FShowFrameNumber then
begin
case FFrameStyle of
ifsDropFrame : Character := sscSemiColon;
else Character := sscColon;
end;
SevenSegmentCharacter.Draw(Canvas, OffsetPoint, ColonWidth, AHeight, Character);
OffsetPoint.x := OffsetPoint.x + ColonWidth + DigitSpacing;
if FFrameNumber > 9 then Character := TSevenSegmentCharacter(FFrameNumber div 10) else Character := ssc0;
SevenSegmentCharacter.Draw(Canvas, OffsetPoint, DigitWidth, AHeight, Character);
OffsetPoint.x := OffsetPoint.x + DigitWidth + DigitSpacing;
if FFrameNumber <> 0 then FrameNumberTemp := FFrameNumber - (FFrameNumber div 10)*10 else FrameNumberTemp := 0;
SevenSegmentCharacter.Draw(Canvas, OffsetPoint, DigitWidth, AHeight, TSevenSegmentCharacter(FrameNumberTemp));
OffsetPoint.x := OffsetPoint.x + DigitWidth + DigitSpacing;
end;
if FShowFieldNumber then
begin
SevenSegmentCharacter.Draw(Canvas, OffsetPoint, ColonWidth, AHeight, sscPeriod);
OffsetPoint.x := OffsetPoint.x + ColonWidth + DigitSpacing;
if FFieldNumber > 9 then Character := TSevenSegmentCharacter(FFieldNumber div 10) else Character := ssc0;
SevenSegmentCharacter.Draw(Canvas, OffsetPoint, DigitWidth, AHeight, Character);
OffsetPoint.x := OffsetPoint.x + DigitWidth + DigitSpacing;
if FFieldNumber <> 0 then FieldNumberTemp := FFieldNumber - (FFieldNumber div 10)*10 else FieldNumberTemp := 0;
SevenSegmentCharacter.Draw(Canvas, OffsetPoint, DigitWidth, AHeight, TSevenSegmentCharacter(FieldNumberTemp));
OffsetPoint.x := OffsetPoint.x + DigitWidth + DigitSpacing;
end;
end;
//****************************************************************************************************************************************************
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -