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

📄 lcd.pas

📁 LCD/LED数码显示控件
💻 PAS
字号:
unit LCD;

interface

uses
  Windows, Messages, SysUtils, Classes, Controls,Graphics,StdCtrls;

type
  TLCD = class(TLabel)
  private
    FLC:TColor;//线条色
    FFC:TColor;//填充色
    FChrW:Integer;//字符宽
    FChrH:Integer;//字符高
    FTrcW:Byte;//笔划宽
    FFill:Boolean;//是否填充
    FJX:Integer;//字符间隙
    FoffX,FoffY:Integer;
procedure SetLineColor(C:TColor);
procedure SetFillColor(C:TColor);
procedure SetCharW(W:Integer);
procedure SetCharH(H:Integer);
procedure SetTrickW(W:Byte);
procedure SetFill(Fill:Boolean);
Procedure SetJX(JX:Integer);
procedure SetoffX(X:Integer);
procedure SetoffY(Y:Integer);

  protected
procedure DrawLCD(C:Char;X,Y,W,HH:integer);
    procedure Paint; override;
  public
    constructor Create(AOwner: TComponent); override;
  published
    property LineColor:TColor read FLC write SetLineColor;
    property FillColor:TColor read FFC write SetFillColor;
    property CharWidth:Integer read FChrW write SetCharW;
    property CharHeight:Integer read FChrH write SetCharH;
    property PenWidth:Byte read FTrcW Write SetTrickW;
    property FillTrick:Boolean read FFill Write SetFill;
    property Split:Integer Read FJX Write SetJX;
    property OffX:Integer Read FoffX Write SetoffX;
    property OffY:Integer Read FoffY Write SetoffY;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('MYKJ', [TLCD]);
end;

constructor TLCD.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FLC:=clAqua;
  FFC:=clLime;
  FChrW:=10;
  FChrH:=10;
  FTrcW:=4;
  FoffX:=2;
  FoffY:=3;
  FFill:=True;
  FJX:=5;
end;

procedure TLCD.SetLineColor(C:TColor);
Begin
if C<>FLC Then
Begin
 FLC:=C;
 Invalidate;
End;
End;
procedure TLCD.SetFillColor(C:TColor);
Begin
if C<>FFC Then
Begin
 FFC:=C;
 Invalidate;
End;
End;

procedure TLCD.SetoffX(X:Integer);
Begin
if X<>FoffX Then
Begin
 FoffX:=X;
 Invalidate;
End;
End;

procedure TLCD.SetoffY(Y:Integer);
Begin
if Y<>FoffY Then
Begin
 FoffY:=Y;
 Invalidate;
End;
End;

procedure TLCD.SetCharW(W:Integer);
Begin
if W<>FChrW Then
Begin
 FChrW:=W;
 Invalidate;
End;
End;

procedure TLCD.SetCharH(H:Integer);
Begin
if H<>FChrH Then
Begin
FChrH:=H;
Invalidate;
End;

End;

procedure TLCD.SetTrickW(W:Byte);
Begin
if W<>FTrcW Then
Begin
FTrcW:=W;
Invalidate;
End;
End;

procedure TLCD.SetFill(Fill:Boolean);
Begin
 if Fill<>FFIll Then
 Begin
  FFill:=Fill;
  Invalidate;
 End;
End;
Procedure TLCD.SetJX(JX:Integer);
Begin
if JX<>FJX Then
Begin
 FJX:=JX;
 Invalidate;
End;
End;

procedure TLCD.Paint;
Var Rc:TRect;
    S:String;
    I,L:Integer;
    X0,Y0,X,Y:Integer;
    LC,TC:TColor;
    CaptionW:Integer;
    FH:Integer;
Begin
if Caption='' Then Caption:='0';
S:=Caption;
L:=Length(S);
X0:=FoffX;Y0:=FoffY;
CaptionW:=L*(FChrW+FTrcW+FJX+FTrcW);
FH:=Y0+FChrH+4*FTrcW+Y0-2;

if (Align<>alNone)and(Align<>alCustom)Then AutoSize:=False;

if AutoSize Then
Begin
 Width:=CaptionW;
 Height:=FH;
End Else
Begin
X0:=(Width -CaptionW) div 2;
Y0:=(Height-FH) div 2;
End;

Rc:=GetClientRect;
//Canvas.Rectangle(Rc);
Canvas.Brush.Color:=Color;
Canvas.Brush.Style:=bsSolid;
Canvas.FillRect(Rc);
LC:=Canvas.Pen.Color;
TC:=Canvas.Brush.Color;
X:=X0;
Y:=Y0;

For I:=1 To L do
Begin
DrawLCD(S[I],X,Y,FChrW,FChrH);
X:=X0+I*(FChrW+2*FTrcW+FJX);
End;

Canvas.Pen.Color:=LC;
Canvas.Brush.Color:=TC;

End;

procedure TLCD.DrawLCD(C:Char;X,Y,W,HH:integer);

 procedure LCD1(X0,Y0,TW,TH:Integer);
 Var P:Array[0..3] of TPoint;
  Begin // 上 -
  TH:=TH-3;
  P[0].X:=X0;P[0].Y:=Y0;
  P[1].X:=X0+TW+TW+TH;P[1].Y:=Y0;
  P[2].X:=X0+TW+TH;P[2].Y:=Y0+TW;
  P[3].X:=X0+TW;P[3].Y:=Y0+TW;
Canvas.Polygon(P);
  End;

 procedure LCD2(X0,Y0,TW,TH:Integer);
 Var P:Array[0..3] of TPoint;
  Begin  // 右上
  P[0].X:=X0+TW;P[0].Y:=Y0;
  P[1].X:=X0+TW;P[1].Y:=Y0+TH+TW+TW;
  P[2].X:=X0;P[2].Y:=Y0+TH+TW+TW div 2;
  P[3].X:=X0;P[3].Y:=Y0+TW;
Canvas.Polygon(P);
  End;

 procedure LCD3(X0,Y0,TW,TH:Integer);
 Var P:Array[0..3] of TPoint;
  Begin  // 右下
  P[0].X:=X0+TW;P[0].Y:=Y0;
  P[1].X:=X0+TW;P[1].Y:=Y0+TH+TW+TW;
  P[2].X:=X0;P[2].Y:=Y0+TH+TW;
  P[3].X:=X0;P[3].Y:=Y0+TW div 2;
Canvas.Polygon(P);
  End;

 procedure LCD6(X0,Y0,TW,TH:Integer);
 Var P:Array[0..3] of TPoint;
  Begin // 左 上
  P[0].X:=X0;P[0].Y:=Y0;
  P[1].X:=X0+TW;P[1].Y:=Y0+TW;
  P[2].X:=X0+TW;P[2].Y:=Y0+TH+TW+TW div 2;
  P[3].X:=X0;P[3].Y:=Y0+TH+TW+TW;
Canvas.Polygon(P);
  End;

 procedure LCD5(X0,Y0,TW,TH:Integer);
 Var P:Array[0..3] of TPoint;
  Begin // 左下
  P[0].X:=X0;P[0].Y:=Y0;
  P[1].X:=X0+TW;P[1].Y:=Y0+TW div 2;
  P[2].X:=X0+TW;P[2].Y:=Y0+TH+TW;
  P[3].X:=X0;P[3].Y:=Y0+TH+TW+TW;
Canvas.Polygon(P);
  End;


  procedure LCD7(X0,Y0,TW,TH:Integer);
  Var P:Array[0..5] of TPoint;
   Begin // 中 -
   TH:=TH-3;
P[0].X:=X0+TW;P[0].Y:=Y0;
P[1].X:=X0+TH+TW;P[1].Y:=Y0;
P[2].X:=X0+TW+TW+TH;P[2].Y:=Y0+TW div 2;
P[3].X:=X0+TW+TH;P[3].Y:=Y0+TW;
P[4].X:=X0+TW;P[4].Y:=Y0+TW;
P[5].X:=X0;P[5].Y:=Y0+TW div 2;
Canvas.Polygon(P);
  End;

  procedure LCD4(X0,Y0,TW,TH:Integer);
  Var P:Array[0..3] of TPoint;
    Begin // 下 -
    TH:=TH-3;
    P[0].X:=X0+TW;P[0].Y:=Y0;
    P[1].X:=X0+TW+TH;P[1].Y:=Y0;
    P[2].X:=X0+TW+TH+TW;P[2].Y:=Y0+TW;
    P[3].X:=X0;P[3].Y:=Y0+TW;
Canvas.Polygon(P);
   End;
   
 procedure LCD8(X0,Y0,TW,TH:Integer);
    Begin //:
     Canvas.Rectangle(Rect(X0+TW+TH div 2,Y0-TW,X0+2*TW+TH,Y0-2*TW));
     Canvas.Rectangle(Rect(X0+TW+TH div 2,Y0+TW+1,X0+2*TW+TH,Y0+2*TW));
   End;
 procedure LCD9(X0,Y0,TW:Integer);
 Begin  //.
   Canvas.Ellipse(X0+2,Y0-2,X0+TW+4,Y0+TW+2);
 End;

Var X1,X2,X3,X4,X5,X6,X7,X8,X9:Integer;
    Y1,Y2,Y3,Y4,Y5,Y6,Y7,Y8,Y9:Integer;
    TrcW,H:Integer;
    LC,BC:TColor;
Begin

LC:=Canvas.Pen.Color;
BC:=Canvas.Brush.Color;
TrcW:=FTrcW;
  H:=HH div 2;
  X1:=X+2;Y1:=Y;
  X2:=X+W+TrcW+1;Y2:=Y+1;
  X3:=X+W+TrcW+1;Y3:=Y2+H+2*TrcW+2;
  X4:=X+2;Y4:=Y3+H+TrcW+1;
  X5:=X;Y5:=Y3;
  X6:=X;Y6:=Y2;
  X7:=X+2;Y7:=Y2+H+TrcW+TrcW div 2+1;
  X8:=X;Y8:=Y7+TrcW div 2;
  X9:=X4+(W-TrcW)Div 2;Y9:=Y4;
if FFill Then
Begin
 Canvas.Brush.Color:=FFC;
 Canvas.Brush.Style:=bsSolid;
End;
  Canvas.Pen.Color:=FLC;
Case C of
'0':Begin
LCD1(X1,Y1,TrcW,W);
LCD2(X2,Y2,TrcW,H);
LCD3(X3,Y3,TrcW,H);
LCD4(X4,Y4,TrcW,W);
LCD5(X5,Y5,TrcW,H);
LCD6(X6,Y6,TrcW,H);
    End;
'1':Begin
LCD2(X2,Y2,TrcW,H);
LCD3(X3,Y3,TrcW,H);
    End;
'2':Begin
LCD1(X1,Y1,TrcW,W);
LCD2(X2,Y2,TrcW,H);
LCD7(X7,Y7,TrcW,W);
LCD5(X5,Y5,TrcW,H);
LCD4(X4,Y4,TrcW,W);
    End;
'3':Begin
LCD1(X1,Y1,TrcW,W);
LCD2(X2,Y2,TrcW,H);
LCD7(X7,Y7,TrcW,W);
LCD3(X3,Y3,TrcW,H);
LCD4(X4,Y4,TrcW,W);
    End;
'4':Begin
LCD2(X2,Y2,TrcW,H);
LCD3(X3,Y3,TrcW,H);
LCD6(X6,Y6,TrcW,H);
LCD7(X7,Y7,TrcW,W);
    End;
'5','s','S':Begin
LCD1(X1,Y1,TrcW,W);
LCD6(X6,Y6,TrcW,H);
LCD7(X7,Y7,TrcW,W);
LCD3(X3,Y3,TrcW,H);
LCD4(X4,Y4,TrcW,W);
    End;
'6':Begin
LCD1(X1,Y1,TrcW,W);
LCD6(X6,Y6,TrcW,H);
LCD5(X5,Y5,TrcW,H);
LCD4(X4,Y4,TrcW,W);
LCD3(X3,Y3,TrcW,H);
LCD7(X7,Y7,TrcW,W);
    End;
'7':Begin
LCD1(X1,Y1,TrcW,W);
LCD2(X2,Y2,TrcW,H);
LCD3(X3,Y3,TrcW,H);
End;
'8':Begin
LCD1(X1,Y1,TrcW,W);
LCD2(X2,Y2,TrcW,H);
LCD3(X3,Y3,TrcW,H);
LCD4(X4,Y4,TrcW,W);
LCD5(X5,Y5,TrcW,H);
LCD6(X6,Y6,TrcW,H);
LCD7(X7,Y7,TrcW,W);
End;
'9':Begin
LCD7(X7,Y7,TrcW,W);
LCD6(X6,Y6,TrcW,H);
LCD1(X1,Y1,TrcW,W);
LCD2(X2,Y2,TrcW,H);
LCD3(X3,Y3,TrcW,H);
LCD4(X4,Y4,TrcW,W);
End;
'a','A':Begin
LCD1(X1,Y1,TrcW,W);
LCD2(X2,Y2,TrcW,H);
LCD3(X3,Y3,TrcW,H);
LCD5(X5,Y5,TrcW,H);
LCD6(X6,Y6,TrcW,H);
LCD7(X7,Y7,TrcW,W);
End;
'b','B':Begin
LCD3(X3,Y3,TrcW,H);
LCD4(X4,Y4,TrcW,W);
LCD5(X5,Y5,TrcW,H);
LCD6(X6,Y6,TrcW,H);
LCD7(X7,Y7,TrcW,W);
End;
'c','C':Begin
LCD4(X4,Y4,TrcW,W);
LCD5(X5,Y5,TrcW,H);
LCD7(X7,Y7,TrcW,W);
End;
'd','D':Begin
LCD2(X2,Y2,TrcW,H);
LCD3(X3,Y3,TrcW,H);
LCD4(X4,Y4,TrcW,W);
LCD5(X5,Y5,TrcW,H);
LCD7(X7,Y7,TrcW,W);
End;
'e','E':Begin
LCD1(X1,Y1,TrcW,W);
LCD4(X4,Y4,TrcW,W);
LCD5(X5,Y5,TrcW,H);
LCD6(X6,Y6,TrcW,H);
LCD7(X7,Y7,TrcW,W);
End;
'f','F':Begin
LCD1(X1,Y1,TrcW,W);
LCD5(X5,Y5,TrcW,H);
LCD6(X6,Y6,TrcW,H);
LCD7(X7,Y7,TrcW,W);
End;
'g','G':
Begin
LCD1(X1,Y1,TrcW,W);
LCD6(X6,Y6,TrcW,H);
LCD5(X5,Y5,TrcW,H);
LCD4(X4,Y4,TrcW,W);
LCD3(X3,Y3,TrcW,H);
End;
'h':
Begin
LCD6(X6,Y6,TrcW,H);
LCD5(X5,Y5,TrcW,H);
LCD7(X7,Y7,TrcW,W);
LCD3(X3,Y3,TrcW,H);
End;
'H':
Begin
LCD2(X2,Y2,TrcW,H);
LCD3(X3,Y3,TrcW,H);
LCD5(X5,Y5,TrcW,H);
LCD6(X6,Y6,TrcW,H);
LCD7(X7,Y7,TrcW,W);
End;
'i','I':
Begin
LCD3(X3,Y3,TrcW,H);
End;
'j','J':
Begin
LCD2(X2,Y2,TrcW,H);
LCD3(X3,Y3,TrcW,H);
LCD4(X4,Y4,TrcW,W);
LCD5(X5,Y5,TrcW,H);
End;
'k','K':
Begin
LCD2(X2,Y2,TrcW,H);
LCD3(X3,Y3,TrcW,H);
LCD7(X7,Y7,TrcW,W);
End;
'l','L':
Begin
LCD6(X6,Y6,TrcW,H);
LCD5(X5,Y5,TrcW,H);
LCD4(X4,Y4,TrcW,W);
End;

'm','M':
Begin
LCD1(X1,Y1,TrcW,W);
LCD5(X5,Y5,TrcW,H);
LCD7(X7,Y7,TrcW,W);
LCD3(X3,Y3,TrcW,H);
End;

'n','N':
Begin
LCD5(X5,Y5,TrcW,H);
LCD7(X7,Y7,TrcW,W);
LCD3(X3,Y3,TrcW,H);
End;
'o','O':
Begin
LCD5(X5,Y5,TrcW,H);
LCD7(X7,Y7,TrcW,W);
LCD3(X3,Y3,TrcW,H);
LCD4(X4,Y4,TrcW,W);
End;
'p','P':
Begin
LCD1(X1,Y1,TrcW,W);
LCD2(X2,Y2,TrcW,H);
LCD5(X5,Y5,TrcW,H);
LCD6(X6,Y6,TrcW,H);
LCD7(X7,Y7,TrcW,W);
End;
'q','Q':
Begin
LCD1(X1,Y1,TrcW,W);
LCD2(X2,Y2,TrcW,H);
LCD3(X3,Y3,TrcW,H);
LCD6(X6,Y6,TrcW,H);
LCD7(X7,Y7,TrcW,W);
End;
'r','R':
Begin
LCD5(X5,Y5,TrcW,H);
LCD7(X7,Y7,TrcW,W);
End;
't','T':
Begin
LCD6(X6,Y6,TrcW,H);
LCD5(X5,Y5,TrcW,H);
LCD4(X4,Y4,TrcW,W);
LCD7(X7,Y7,TrcW,W);
End;
'u','U':
Begin
LCD2(X2,Y2,TrcW,H);
LCD3(X3,Y3,TrcW,H);
LCD4(X4,Y4,TrcW,W);
LCD5(X5,Y5,TrcW,H);
LCD6(X6,Y6,TrcW,H);
End;
'v','V':
Begin
LCD5(X5,Y5,TrcW,H);
LCD4(X4,Y4,TrcW,W);
LCD3(X3,Y3,TrcW,H);
End;
'w','W':
Begin
LCD2(X2,Y2,TrcW,H);
LCD3(X3,Y3,TrcW,H);
LCD4(X4,Y4,TrcW,W);
LCD5(X5,Y5,TrcW,H);
LCD6(X6,Y6,TrcW,H);
LCD7(X7,Y7,TrcW,W);
End;
'x','X':
Begin
LCD1(X1,Y1,TrcW,W);
LCD3(X3,Y3,TrcW,H);
LCD4(X4,Y4,TrcW,W);
LCD5(X5,Y5,TrcW,H);
End;
'y','Y':
Begin
LCD6(X6,Y6,TrcW,H);
LCD7(X7,Y7,TrcW,W);
LCD2(X2,Y2,TrcW,H);
LCD3(X3,Y3,TrcW,H);
LCD4(X4,Y4,TrcW,W);
End;
'z','Z':
Begin
LCD3(X3,Y3,TrcW,H);
LCD4(X4,Y4,TrcW,W);
LCD7(X7,Y7,TrcW,W);
End;
'-':LCD7(X7,Y7,TrcW,W);
':':LCD8(X8,Y8,TrcW,H);
'_':LCD4(X4,Y4,TrcW,W);
'.':LCD9(X9,Y9,TrcW);
Else Begin
{
LCD1(X1,Y1,TrcW,W);
LCD2(X2,Y2,TrcW,H);
LCD3(X3,Y3,TrcW,H);
LCD4(X4,Y4,TrcW,W);
LCD5(X5,Y5,TrcW,H);
LCD6(X6,Y6,TrcW,H);
LCD7(X7,Y7,TrcW,W);
LCD8(X8,Y8,TrcW,H);
}
End;
Canvas.Pen.Color:=LC;
Canvas.Brush.Color:=BC;
End;

End;


end.

⌨️ 快捷键说明

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