⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 isevensegmentclocksmpte.pas

📁 iocopm3.04源码,一套很好的工控开发工具
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  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 + -