📄 qisevensegmentcharacter.pas
字号:
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 + -