?? lcd.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':
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 + -