uses GDIPAPI, GDIPOBJ;
type TPaintClock = Class (TObject)
private
FTime : TDateTime ;
FHDC :HDC;
FBackGroundGradientStart,
FBackGroundGradientEnd,
FTextGradientStart,FTextGradientEnd:TColor;
FFontName:String;
FHeight,FWidth:integer;
Brush: TGPLinearGradientBrush;
R: TGPRectF;
StrFormat:TGPStringFormat ;
g :TGPGraphics;
Font :TGPFont ;
FontFamily : TGPFontFamily ;
Public
constructor Create(DC: HDC);
procedure Free;
procedure Paint();overload;
procedure Paint(DC:HDC);overload;
procedure SetSize(X,Y,Width, Height: integer);
published
property Time : TDateTime read FTime write FTime ;
property BackGroundGradientStart : TColor read FBackGroundGradientStart
write FBackGroundGradientStart ;
property BackGroundGradientEnd: TColor read FBackGroundGradientEnd
write FBackGroundGradientEnd;
property TextGradientStart : TColor read FTextGradientStart
write FTextGradientStart ;
property TextGradientEnd: TColor read FTextGradientEnd
write FTextGradientEnd;
property FontName : string read FFontName write FFontName;
// property Width : integer read FWidth write SetWidth;
// property Height : integer read FHeight write SetHeight;
implementation
{ TPaintClock by SMP3 }
constructor TPaintClock.Create(DC: HDC);
begin
R.X:=0;
R.Y:=0;
R.Width:=200;
R.Height:=30;
g :=TGPGraphics.Create(DC);
Brush:=TGPLinearGradientBrush.Create(R, MakeColor(0,199,5),
MakeColor(33,79,15), LinearGradientModeVertical);
FBackGroundGradientStart:= MakeColor(0,199,5) ;
FBackGroundGradientEnd := MakeColor(33,79,15) ;
FTextGradientStart := aclWhite ;
FTextGradientEnd := aclWhite ;
StrFormat:=TGPStringFormat.Create();
FHDC:=DC;
FTime:=System.SysUtils.Time ;
FFontName:='Times New Roman';
end;
procedure TPaintClock.Free;
begin
StrFormat.Free;
Brush.Free;
g.Free;
if assigned( FontFamily)then
FontFamily.Free;
if assigned( Font)then
Font.Free;
end;
procedure TPaintClock.Paint;
begin
Paint(FHDC);
end;
procedure TPaintClock.Paint(DC: HDC);
begin //Times New Roman
FontFamily := TGPFontFamily.Create(FontName);
Font := TGPFont.Create(FontFamily, 24, FontStyleRegular, UnitPixel);
Brush.SetLinearColors(FBackGroundGradientStart,FBackGroundGradientEnd);
g:=g.FromHDC(DC);
g.FillRectangle(Brush, R.X, R.Y, R.Width,R.Height);
Brush.SetLinearColors(FTextGradientStart,FTextGradientEnd);
StrFormat.SetFormatFlags(StringFormatFlagsNoWrap);
StrFormat.SetAlignment(StringAlignmentCenter) ;
g.DrawString(FormatDateTime('tt',FTime),-1,Font, R, StrFormat,Brush);
StrFormat.SetAlignment(StringAlignmentNear) ;
FontFamily.Free;
Font.Free;
FontFamily := TGPFontFamily.Create(FontName);
Font := TGPFont.Create(FontFamily, 14, FontStyleRegular, UnitPixel);
R.X:=R.X + 10.0;
StrFormat.SetLineAlignment(StringAlignmentNear) ;
g.DrawString(FormatDateTime('d',FTime),-1,Font, R, StrFormat,Brush);
StrFormat.SetLineAlignment(StringAlignmentFar) ;
g.DrawString(FormatDateTime('mmm',FTime),-1,Font, R, StrFormat,Brush);
R.X:=R.X - 20.0;
StrFormat.SetFormatFlags(StringFormatFlagsDirectionRightToLeft);
StrFormat.SetLineAlignment(StringAlignmentFar);
g.DrawString(FormatDateTime('ddd',FTime),-1,Font, R, StrFormat,Brush);
StrFormat.SetLineAlignment(StringAlignmentNear);
if ISPM(Time) then
g.DrawString('PM' ,-1,Font, R, StrFormat,Brush)else
g.DrawString('UP' ,-1,Font, R, StrFormat,Brush) ;
end;
procedure TPaintClock.SetSize(X,Y,Width, Height: integer);
begin
R.X:=X;
R.Y:=Y;
R.Width:=Width;
R.Height:= Height;
Brush.Free;
Brush:=TGPLinearGradientBrush.Create(R, MakeColor(0,199,5),
MakeColor(33,79,15), LinearGradientModeVertical);
end;