Contributor: UDO JUERSS
{
 Q: Why doing the 243. version of a LED light.
 A: It does not use bitmaps - so it|s fully scaleable (and saves resources).
 Contact: Udo Juerss, 57078 Siegen, Germany, CompuServe [101364,526]
 March 9. 1996
 Greetings from germany - enjoy...
}
unit
 LEDPaint;
interface
uses
 WinTypes, WinProcs, Messages, Classes, Graphics, Controls, ExtCtrls;
{------------------------------------------------------------------------------}
type
 TLEDColor = (lcRed,lcGreen,lcBlue,lcYellow,lcNone);
 TLEDType = (ltRound,ltRect);
 TLEDPaint = class(TGraphicControl)
 private
 FBackGround: TColor;
 FBevelOuter: TPanelBevel;
 FBevelInner: TPanelBevel;
 FBevelWidth: Byte;
 FLEDColor: TLEDColor;
 FLEDOn: Boolean;
 FLEDType: TLEDType;
 Border: Byte;
 protected
 procedure Draw(BkGnd:Boolean);
 procedure DrawBevel(Rect: TRect);
 procedure SetBackGround(Value: TColor);
 procedure SetBevelOuter(Value: TPanelBevel);
 procedure SetBevelInner(Value: TPanelBevel);
 procedure SetBevelWidth(Value: Byte);
 procedure SetLED(Value:Boolean);
 procedure SetLEDColor(Value: TLEDColor);
 procedure SetLEDType(Value: TLEDType);
 public
 constructor Create(AOwner: TComponent); override;
 procedure Paint; override;
 published
 property BackGround: TColor read FBackGround write SetBackGround default clBtnFace;
 property BevelOuter: TPanelBevel read FBevelOuter write SetBevelOuter default bvRaised;
 property BevelInner: TPanelBevel read FBevelInner write SetBevelInner default bvRaised;
 property BevelWidth: Byte read FBevelWidth write SetBevelWidth default 1;
 property LEDColor: TLEDColor read FLEDColor write SetLEDColor default lcRed;
 property LEDOn: Boolean read FLEDOn write SetLED default False;
 property LEDType: TLEDType read FLEDType write SetLEDType default ltRound;
 end;
{------------------------------------------------------------------------------}
procedure Register;
implementation
{------------------------------------------------------------------------------}
constructor TLEDPaint.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);
 Canvas.Brush.Style:=bsSolid;
 FBackGround:=clBtnFace;
 FBevelOuter:=bvRaised;
 FBevelInner:=bvRaised;
 FBevelWidth:=1;
 FLEDColor:=lcRed;
 FLEDOn:=False;
 FLEDType:=ltRound;
 Border:=2;
 Left:=0;
 Top:=0;
 Width:=19;
 Height:=19;
end;
{------------------------------------------------------------------------------}
procedure TLEDPaint.Paint;
begin
 Draw(True);
end;
{------------------------------------------------------------------------------}
procedure TLEDPaint.DrawBevel(Rect: TRect);
var
 TopColor: TColor;
 BottomColor: TColor;
 procedure SetColors(Bevel: TPanelBevel);
 begin
 TopColor:=clBtnHighlight;
 if Bevel = bvLowered then TopColor:=clBtnShadow;
 BottomColor:=clBtnShadow;
 if Bevel = bvLowered then BottomColor:=clBtnHighlight;
 end;
begin
 if FBevelOuter  bvNone then
 begin
 SetColors(BevelOuter);
 Frame3D(Canvas,Rect,TopColor,BottomColor,BevelWidth);
 end;
 if FBevelInner  bvNone then
 begin
 SetColors(FBevelInner);
 Frame3D(Canvas,Rect,TopColor,BottomColor,FBevelWidth);
 end;
end;
{------------------------------------------------------------------------------}
procedure TLEDPaint.Draw(BkGnd: Boolean);
var
 R: TRect;
 OnColor: TColor;
 OffColor: TColor;
 UpColor: TColor;
 DnColor: TColor;
 S: Byte;
begin
 R:=GetClientRect;
 S:=Width div 6; {Abstand der Schattierung vom Au-enkreis}
 if BkGnd or (csDesigning in ComponentState) then
 begin
 DrawBevel(R);
 if FBackGround  clWindow then
 begin
 Canvas.Pen.Color:=FBackGround;
 Canvas.Brush.Color:=FBackGround;
 InflateRect(R,-Border,-Border);
 Canvas.FillRect(R);
 end;
 end
 else InflateRect(R,-Border,-Border);
 case FLEDColor of
 lcNone : begin
 OnColor:=clBtnFace;
 OffColor:=clBtnFace;
 end;
 lcRed : begin
 OnColor:=clRed;
 OffColor:=clMaroon;
 end;
 lcGreen : begin
 OnColor:=clLime;
 OffColor:=clGreen;
 end;
 lcBlue : begin
 OnColor:=clBlue;
 OffColor:=clNavy;
 end;
 lcYellow : begin
 OnColor:=clYellow;
 OffColor:=clOlive;
 end;
 end;
 if FLEDOn then Canvas.Brush.Color:=OnColor else Canvas.Brush.Color:=OffColor;
 Canvas.Pen.Width:=1;
 if FLEDType = ltRound then
 begin
 if not FLEDOn then Canvas.Pen.Color:=clSilver else Canvas.Pen.Color:=clGray;
 Canvas.Ellipse(R.Left,R.Top,R.Right,R.Bottom);
 if FLEDOn then Canvas.Pen.Color:=clSilver else Canvas.Pen.Color:=clGray;
 Canvas.Arc(R.Left + S,R.Top + S,
 R.Right - S,R.Bottom - S,
 R.Right - S,R.Top + S,
 R.Left + S,R.Bottom - S);
 end
 else
 begin
 case BevelInner of
 bvRaised : Frame3D(Canvas,R,clBlack,clWhite,1);
 bvLowered : Frame3D(Canvas,R,clWhite,clBlack,1);
 bvNone : begin
 if FBevelOuter = bvLowered then
 Frame3D(Canvas,R,clWhite,clBlack,1)
 else Frame3D(Canvas,R,clBlack,clWhite,1);
 end;
 end;
 Canvas.FillRect(R);
 end;
end;
{------------------------------------------------------------------------------}
procedure TLEDPaint.SetBackGround(Value: TColor);
begin
 if FBackGround  Value then
 begin
 FBackGround:=Value;
 Draw(True);
 end;
end;
{------------------------------------------------------------------------------}
procedure TLEDPaint.SetBevelOuter(Value: TPanelBevel);
begin
 if FBevelOuter  Value then
 begin
 FBevelOuter:=Value;
 if FBevelOuter  bvNone then Border:=FBevelWidth else Border:=0;
 if FBevelInner  bvNone then Inc(Border,FBevelWidth);
 Draw(True);
 end;
end;
{------------------------------------------------------------------------------}
procedure TLEDPaint.SetBevelInner(Value: TPanelBevel);
begin
 if FBevelInner  Value then
 begin
 FBevelInner:=Value;
 if FBevelOuter  bvNone then Border:=FBevelWidth else Border:=0;
 if FBevelInner  bvNone then Inc(Border,FBevelWidth);
 Draw(True);
 end;
end;
{------------------------------------------------------------------------------}
procedure TLEDPaint.SetBevelWidth(Value: Byte);
begin
 if FBevelWidth  Value then
 begin
 FBevelWidth:=Value;
 if FBevelOuter  bvNone then Border:=FBevelWidth else Border:=0;
 if FBevelInner  bvNone then Inc(Border,FBevelWidth);
 Draw(True);
 end;
end;
{------------------------------------------------------------------------------}
procedure TLEDPaint.SetLED(Value: Boolean);
begin
 if FLEDOn  Value then
 begin
 FLEDOn:=Value;
 Draw(False);
 end;
end;
{------------------------------------------------------------------------------}
procedure TLEDPaint.SetLEDColor(Value: TLEDColor);
begin
 if FLEDColor  Value then
 begin
 FLEDColor:=Value;
 Draw(False);
 end;
end;
{------------------------------------------------------------------------------}
procedure TLEDPaint.SetLEDType(Value: TLEDType);
begin
 if FLEDType  Value then
 begin
 FLEDType:=Value;
 Draw(True);
 end;
end;
{------------------------------------------------------------------------------}
procedure Register;
begin
 RegisterComponents('Udo|s',[TLEDPaint]);
end;
{------------------------------------------------------------------------------}
initialization
end.


AltStyle によって変換されたページ (->オリジナル) /