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

📄 qisevensegmentcharacter.pas

📁 iocopm3.04源码,一套很好的工控开发工具
💻 PAS
📖 第 1 页 / 共 3 页
字号:
      InvalidateChange;
    end;
end;
//****************************************************************************************************************************************************
procedure TiSevenSegmentCharacter.SetSegmentSeperation(const Value : Integer);
begin
  if FSegmentSeperation <> Value then
    begin
      FSegmentSeperation := Value;
      if FSegmentSeperation < 0 then FSegmentSeperation := 0;
      InvalidateChange;
    end;
end;
//****************************************************************************************************************************************************
procedure TiSevenSegmentCharacter.SetSegmentMargin(const Value : Integer);
begin
  if FSegmentMargin <> Value then
    begin
      FSegmentMargin := Value;
      if FSegmentMargin < 0 then FSegmentMargin := 0;
      DoAutoSize;
      InvalidateChange;
    end;
end;
//****************************************************************************************************************************************************
function TiSevenSegmentCharacter.ConvertCharacterToValue(AChar : Char): TSevenSegmentCharacter;
begin
  case AChar of
    '0'      : Result := ssc0;
    '1'      : Result := ssc1;
    '2'      : Result := ssc2;
    '3'      : Result := ssc3;
    '4'      : Result := ssc4;
    '5'      : Result := ssc5;
    '6'      : Result := ssc6;
    '7'      : Result := ssc7;
    '8'      : Result := ssc8;
    '9'      : Result := ssc9;
    'a', 'A' : Result := sscA;
    'b', 'B' : Result := sscB;
    'c', 'C' : Result := sscC;
    'd', 'D' : Result := sscD;
    'e', 'E' : Result := sscE;
    'f', 'F' : Result := sscF;
    ' '      : Result := sscBlank;
    '.'      : Result := sscPeriod;
    '+'      : Result := sscPlus;
    '-'      : Result := sscMinus;
    ':'      : Result := sscColon;
    ';'      : Result := sscSemiColon;
    ','      : Result := sscComma;
    '_'      : Result := sscLine;
    '<'      : Result := sscUpArrow;
    '>'      : Result := sscDownArrow;
    else       Result := sscBlank;
  end;
end;
//****************************************************************************************************************************************************
function TiSevenSegmentCharacter.GetCharacter: Char;
begin
  case FValue of
    ssc0         : Result := '0';
    ssc1         : Result := '1';
    ssc2         : Result := '2';
    ssc3         : Result := '3';
    ssc4         : Result := '4';
    ssc5         : Result := '5';
    ssc6         : Result := '6';
    ssc7         : Result := '7';
    ssc8         : Result := '8';
    ssc9         : Result := '9';
    sscA         : Result := 'a';
    sscB         : Result := 'b';
    sscC         : Result := 'c';
    sscD         : Result := 'd';
    sscE         : Result := 'e';
    sscF         : Result := 'f';
    sscBlank     : Result := ' ';
    sscPeriod    : Result := '.';
    sscPlus      : Result := '+';
    sscMinus     : Result := '-';
    sscColon     : Result := ':';
    sscSemiColon : Result := ';';
    sscComma     : Result := ',';
    sscLine      : Result := '_';
    sscUpArrow   : Result := '<';
    sscDownArrow : Result := '>';
    else           Result := '?';
  end;
end;
//****************************************************************************************************************************************************
procedure TiSevenSegmentCharacter.SetCharacter(const AValue: Char);
begin
  Value := ConvertCharacterToValue(AValue);
end;
//****************************************************************************************************************************************************
procedure TiSevenSegmentCharacter.iPaintTo(Canvas: TCanvas);
var
  OffsetPoint : TPoint;
begin
  DrawBackGround(Canvas, BackGroundColor);
  OffsetPoint := Point(0, 0);
  Draw(Canvas, OffsetPoint, Width, Height, FValue);
end;
//****************************************************************************************************************************************************
procedure TiSevenSegmentCharacter.Draw(Canvas: TCanvas; OffsetPoint: TPoint; AWidth, AHeight: Integer; AValue : TSevenSegmentCharacter);
var
  OnColor, OffColor : TColor;
  Segments          : TSegments;
begin
  if AutoSegmentOffColor then OffColor  := $02000000 + DimColor(SegmentColor,3)
    else OffColor := FSegmentOffColor;

  OnColor   := $02000000 + FSegmentColor;

  if FPowerOff then OnColor := OffColor;

  if FUseSegmentBits then
    begin
      Segments := [];
      if SegAOn then Segments := Segments + [segA];
      if SegBOn then Segments := Segments + [segB];
      if SegCOn then Segments := Segments + [segC];
      if SegDOn then Segments := Segments + [segD];
      if SegEOn then Segments := Segments + [segE];
      if SegFOn then Segments := Segments + [segF];
      if SegGOn then Segments := Segments + [segG];
      DrawSegments(Canvas, OnColor, OffColor, OffsetPoint, Segments, AWidth, AHeight);
    end
  else case AValue of
    ssc0         : DrawSegments(Canvas, OnColor, OffColor, OffsetPoint, [segA, segB, segC, segD, segE, segF      ],AWidth,AHeight);   //                A
    ssc1         : DrawSegments(Canvas, OnColor, OffColor, OffsetPoint, [segB, segC                              ],AWidth,AHeight);   //                --
    ssc2         : DrawSegments(Canvas, OnColor, OffColor, OffsetPoint, [segA, segB, segD, segE, segG            ],AWidth,AHeight);   //               |  |
    ssc3         : DrawSegments(Canvas, OnColor, OffColor, OffsetPoint, [segA, segB, segC, segD, segG            ],AWidth,AHeight);   //             F |  | B          . = H
    ssc4         : DrawSegments(Canvas, OnColor, OffColor, OffsetPoint, [segB, segC, segF, segG                  ],AWidth,AHeight);   //                --             : = I
    ssc5         : DrawSegments(Canvas, OnColor, OffColor, OffsetPoint, [segA, segC, segD, segF, segG            ],AWidth,AHeight);   //               |G |            + = J
    ssc6         : DrawSegments(Canvas, OnColor, OffColor, OffsetPoint, [segA, segC, segD, segE, segF, segG      ],AWidth,AHeight);   //             E |  | C          - = K
    ssc7         : DrawSegments(Canvas, OnColor, OffColor, OffsetPoint, [segA, segB, segC                        ],AWidth,AHeight);   //                --             _ = L
    ssc8         : DrawSegments(Canvas, OnColor, OffColor, OffsetPoint, [segA, segB, segC, segD, segE, segF, segG],AWidth,AHeight);   //                D      UpArrow   = M
    ssc9         : DrawSegments(Canvas, OnColor, OffColor, OffsetPoint, [segA, segB, segC, segF, segG            ],AWidth,AHeight);   //                       DownArrow = N
    sscA         : DrawSegments(Canvas, OnColor, OffColor, OffsetPoint, [segA, segB, segC, segE, segF, SegG      ],AWidth,AHeight);   //
    sscB         : DrawSegments(Canvas, OnColor, OffColor, OffsetPoint, [segC, segD, segE, segF, segG            ],AWidth,AHeight);   //              5x9
    sscC         : DrawSegments(Canvas, OnColor, OffColor, OffsetPoint, [segA, segD, segF, segE                  ],AWidth,AHeight);
    sscD         : DrawSegments(Canvas, OnColor, OffColor, OffsetPoint, [segB, segC, segD, segE, segG            ],AWidth,AHeight);
    sscE         : DrawSegments(Canvas, OnColor, OffColor, OffsetPoint, [segA, segD, segE, segF, segG            ],AWidth,AHeight);
    sscF         : DrawSegments(Canvas, OnColor, OffColor, OffsetPoint, [segA, segE, segF, segG                  ],AWidth,AHeight);
    sscBlank     : DrawSegments(Canvas, OnColor, OffColor, OffsetPoint, [                                        ],AWidth,AHeight);

    sscPeriod    : DrawSegmentPeriod   (Canvas, OffsetPoint, OnColor,AWidth,AHeight);
    sscColon     : DrawSegmentColon    (Canvas, OffsetPoint, OnColor,AWidth,AHeight);
    sscSemiColon : DrawSegmentSemiColon(Canvas, OffsetPoint, OnColor,AWidth,AHeight);
    sscComma     : DrawSegmentComma    (Canvas, OffsetPoint, OnColor,AWidth,AHeight);
    sscPlus      : begin
                     DrawSegmentPlus(Canvas, OffsetPoint, OnColor,AWidth,AHeight);
                     if FShowOffSegments then DrawSegmentMinus(Canvas, OffsetPoint, OffColor,AWidth,AHeight);
                   end;
    sscMinus     : begin
                     DrawSegmentMinus(Canvas, OffsetPoint, OnColor,AWidth,AHeight);
                     if FShowOffSegments then DrawSegmentPlus(Canvas, OffsetPoint, OffColor,AWidth,AHeight);
                   end;
    sscLine      : DrawSegmentLine(Canvas, OffsetPoint, OnColor,AWidth,AHeight);
    sscUpArrow   : DrawSegmentUpArrow(Canvas, OffsetPoint, OnColor,AWidth,AHeight);
    sscDownArrow : DrawSegmentDownArrow(Canvas, OffsetPoint, OnColor,AWidth,AHeight);
  end;
end;
//****************************************************************************************************************************************************
procedure TiSevenSegmentCharacter.DrawSegments(Canvas: TCanvas; OnColor, OffColor: TColor; Offset: TPoint; Segments: TSegments; AWidth, AHeight: Integer);
begin
  if segA in Segments then DrawSegmentA(Canvas,Offset,OnColor,AWidth,AHeight) else if FShowOffSegments then DrawSegmentA(Canvas,Offset,OffColor,AWidth,AHeight);
  if segB in Segments then DrawSegmentB(Canvas,Offset,OnColor,AWidth,AHeight) else if FShowOffSegments then DrawSegmentB(Canvas,Offset,OffColor,AWidth,AHeight);
  if segC in Segments then DrawSegmentC(Canvas,Offset,OnColor,AWidth,AHeight) else if FShowOffSegments then DrawSegmentC(Canvas,Offset,OffColor,AWidth,AHeight);
  if segD in Segments then DrawSegmentD(Canvas,Offset,OnColor,AWidth,AHeight) else if FShowOffSegments then DrawSegmentD(Canvas,Offset,OffColor,AWidth,AHeight);
  if segE in Segments then DrawSegmentE(Canvas,Offset,OnColor,AWidth,AHeight) else if FShowOffSegments then DrawSegmentE(Canvas,Offset,OffColor,AWidth,AHeight);
  if segF in Segments then DrawSegmentF(Canvas,Offset,OnColor,AWidth,AHeight) else if FShowOffSegments then DrawSegmentF(Canvas,Offset,OffColor,AWidth,AHeight);
  if segG in Segments then DrawSegmentG(Canvas,Offset,OnColor,AWidth,AHeight) else if FShowOffSegments then DrawSegmentG(Canvas,Offset,OffColor,AWidth,AHeight);
end;
//****************************************************************************************************************************************************
procedure TiSevenSegmentCharacter.DrawSegmentA(Canvas: TCanvas; Offset: TPoint; AColor: TColor; AWidth, AHeight: Integer);
begin
  with Canvas do
    begin                                                       
      Brush.Color := AColor;
      Pen.Color   := AColor;
      Polygon([Point(Offset.x +                  FSegmentMargin + FSegmentSeperation,                      Offset.y + FSegmentMargin                 ),
               Point(Offset.x + AWidth - 1 - FSegmentMargin - FSegmentSeperation,                      Offset.y + FSegmentMargin                 ),
               Point(Offset.x + AWidth - 1 - FSegmentMargin - FSegmentSeperation - FSegmentSize *  2 , Offset.y + FSegmentMargin + 2*FSegmentSize),
               Point(Offset.x +                  FSegmentMargin + FSegmentSeperation + FSegmentSize *  2 , Offset.y + FSegmentMargin + 2*FSegmentSize)]);
    end;
end;
//****************************************************************************************************************************************************
procedure TiSevenSegmentCharacter.DrawSegmentB(Canvas: TCanvas; Offset: TPoint; AColor: TColor; AWidth, AHeight: Integer);
begin
  with Canvas do
    begin
      Brush.Color := AColor;
      Pen.Color   := AColor;
      Polygon([Point(Offset.x + AWidth - 1 - FSegmentMargin,                     Offset.y + FSegmentMargin      + FSegmentSeperation                    ),
               Point(Offset.x + AWidth - 1 - FSegmentMargin,                     Offset.y + (AHeight - 1) div 2 - FSegmentSeperation                    ),
               Point(Offset.x + AWidth - 1 - FSegmentMargin - FSegmentSize *  2, Offset.y + (AHeight - 1) div 2 - FSegmentSeperation - FSegmentSize *  2),
               Point(Offset.x + AWidth - 1 - FSegmentMargin - FSegmentSize *  2, Offset.y + FSegmentMargin      + FSegmentSeperation + FSegmentSize *  2)]);
    end;
end;
//****************************************************************************************************************************************************
procedure TiSevenSegmentCharacter.DrawSegmentC(Canvas: TCanvas; Offset: TPoint; AColor: TColor; AWidth, AHeight: Integer);
begin
  with Canvas do
    begin
      Brush.Color := AColor;
      Pen.Color   := AColor;
      Polygon([Point(Offset.x + AWidth - 1 - FSegmentMargin,                     Offset.y + (AHeight - 1) div 2                  + FSegmentSeperation                    ),
               Point(Offset.x + AWidth - 1 - FSegmentMargin,                     Offset.y + (AHeight - 1)       - FSegmentMargin - FSegmentSeperation                    ),
               Point(Offset.x + AWidth - 1 - FSegmentMargin - FSegmentSize *  2, Offset.y + (AHeight - 1)       - FSegmentMargin - FSegmentSeperation - FSegmentSize *  2),
               Point(Offset.x + AWidth - 1 - FSegmentMargin - FSegmentSize *  2, Offset.y + (AHeight - 1) div 2                  + FSegmentSeperation + FSegmentSize *  2)]);
    end;
end;
//****************************************************************************************************************************************************
procedure TiSevenSegmentCharacter.DrawSegmentD(Canvas: TCanvas; Offset: TPoint; AColor: TColor; AWidth, AHeight: Integer);
begin
  with Canvas do
    begin
      Brush.Color := AColor;
      Pen.Color   := AColor;
      Polygon([Point(Offset.x +              FSegmentMargin + FSegmentSeperation,                      Offset.y + AHeight - 1 - FSegmentMargin                 ),
               Point(Offset.x + AWidth - 1 - FSegmentMargin - FSegmentSeperation,                      Offset.y + AHeight - 1 - FSegmentMargin                 ),
               Point(Offset.x + AWidth - 1 - FSegmentMargin - FSegmentSeperation - FSegmentSize *  2 , Offset.y + AHeight - 1 - FSegmentMargin - 2*FSegmentSize),
               Point(Offset.x +              FSegmentMargin + FSegmentSeperation + FSegmentSize *  2 , Offset.y + AHeight - 1 - FSegmentMargin - 2*FSegmentSize)]);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -