Contributor: MATTHEW CSULIK
{
Hello!
I'm from Hungary, and I love the SWAG!
It's a very useful site, and I use it since 2 years.
I send to You a Delphi 2.0 component:
 - TLCDControl (it looks like WinNT 4.0 Task Manager's LCD)
 resource file included (XX3402)
This component was made for Delphi 2.0, but it is also working on Delphi 1.0
(I think).
I send it to You, because I don't know any other addresses about SWAG.
I hope, this component will be useful for somebody.
Kind regards
 Matthew Csulik
 matthew-c@usa.net
P.S.: To extract the resource file, use WinZip95 (the 32bit version)!
-----------------------------------------------------------------------
- -
- LCDControl.pas -
- ************** -
- This component is completely FREE. -
- -
-----------------------------------------------------------------------
unit LCDControl;
{ written by Matthew }
{ matthew-c@usa.net }
interface
uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
 TNumberType = (ntNone, ntCharK, ntPercent);
 TLCDControl = class(TGraphicControl)
 private
 NumBmp: array[0..9] of TBitmap;
 CharKBmp: TBitmap;
 PercentBmp: TBitmap;
 OnBmp: TBitmap;
 OffBmp: TBitmap;
 FNumber: integer;
 FNumberType: TNumberType;
 FNumberMax: integer;
 procedure SetNumber(Value: integer);
 procedure SetNumberType(Value: TNumberType);
 procedure SetNumberMax(Value: integer);
 protected
 procedure Paint; override;
 public
 constructor Create(AOwner: TComponent); override;
 destructor Destroy; override;
 procedure WriteLCDNum(Num: integer; X,Y: integer; ACanvas: TCanvas);
 procedure WriteNumber(Num: integer; NumType: TNumberType; X,Y:
integer; ACanvas: TCanvas);
 function GetNumberLength(Num: integer; NumType: TNumberType): integer;
 procedure DisplayTicks(Rect: TRect; Num: integer; ACanvas: TCanvas);
 procedure UpdateLCD(UpdateCanvas: TCanvas);
 published
 property Number: integer read FNumber write SetNumber;
 property NumberType: TNumberType read FNumberType write SetNumberType;
 property NumberMax: integer read FNumberMax write SetNumberMax;
 end;
procedure Register;
implementation
{$R LCD.RES}
constructor TLCDControl.Create(AOwner: TComponent);
var
 i: integer;
begin
 inherited Create(AOwner);
 for i:= 0 to 9 do
 begin
 NumBmp[i]:= TBitmap.Create;
 NumBmp[i].LoadFromResourceID(HInstance, i);
 end;
 CharKBmp:= TBitmap.Create;
 CharKBmp.LoadFromResourceName(HInstance, 'CHARK');
 PercentBmp:= TBitmap.Create;
 PercentBmp.LoadFromResourceName(HInstance, 'PERCENT');
 OnBmp:= TBitmap.Create;
 OnBmp.LoadFromResourceName(HInstance, 'ON');
 OffBmp:= TBitmap.Create;
 OffBmp.LoadFromResourceName(HInstance, 'OFF');
 FNumber:= 0;
 FNumberMax:= 100;
 FNumberType:= ntNone;
 Width:= 100;
 Height:= 120;
end;
procedure TLCDControl.Paint;
begin
 with inherited Canvas do
 begin
 Brush.Color:= clBlack;
 FillRect(Self.ClientRect);
 Pen.Color:= clbtnShadow;
 Polyline([Point(Width-1,0),Point(0,0),Point(0,Height-1)]);
 Pen.Color:= clbtnHighlight;
 Polyline([Point(Width-1,1),Point(Width-1,Height-1),Point(1,Height-1)]);
 end;
 UpdateLCD(Canvas);
end;
destructor TLCDControl.Destroy;
var
 i: integer;
begin
 for i:= 0 to 9 do
 begin
 NumBmp[i].Free;
 end;
 CharKBmp.Free;
 PercentBmp.Free;
 OnBmp.Free;
 OffBmp.Free;
 inherited Destroy;
end;
procedure TLCDControl.SetNumber(Value: integer);
begin
 if (FNumber  Value) and (Value <= NumberMax) then begin FNumber:= Value; UpdateLCD(Canvas); end; end; procedure TLCDControl.SetNumberMax(Value: integer); begin if (Value> 0) and (Value>= Number) then
 begin
 FNumberMax:= Value;
 Invalidate;
 end;
end;
procedure TLCDControl.SetNumberType(Value: TNumberType);
begin
 if FNumberType  Value then
 begin
 FNumberType:= Value;
 UpdateLCD(Canvas);
 end;
end;
procedure TLCDControl.WriteLCDNum(Num: integer; X,Y: integer; ACanvas: TCanvas);
begin
 with ACanvas do
 begin
 Brush.Color:= clBlack;
 Draw(X,Y,NumBmp[Num]);
 end;
end;
procedure TLCDControl.WriteNumber(Num: integer; NumType: TNumberType; X,Y:
integer; ACanvas: TCanvas);
var
 NumLength: integer;
 NumStr: string;
 CNum: integer;
 CX: integer;
 i: integer;
begin
 CX:= X;
 NumStr:= IntToStr(Num);
 NumLength:= Length(NumStr);
 for i:= 1 to NumLength do
 begin
 CNum:= StrToInt(NumStr[i]);
 WriteLCDNum(CNum, CX, Y, ACanvas);
 Inc(CX, 8);
 end;
 if NumType  ntNone then
 begin
 with ACanvas do
 begin
 Brush.Color:= clBlack;
 case NumType of
 ntCharK:
 begin
 Draw(CX,Y,CharKBmp);
 end;
 ntPercent:
 begin
 Draw(CX,Y,PercentBmp);
 end;
 end;
 end;
 end;
end;
function TLCDControl.GetNumberLength(Num: integer; NumType: TNumberType):
integer;
var
 NumLength: integer;
 NumStr: string;
begin
 Result:= 0;
 NumStr:= IntToStr(Num);
 NumLength:= Length(NumStr);
 case NumType of
 ntNone:
 Result:= NumLength * 8;
 ntCharK:
 Result:= (NumLength + 1) * 8;
 ntPercent:
 Result:= (NumLength + 1) * 8;
 end;
end;
procedure TLCDControl.DisplayTicks(Rect: TRect; Num: integer; ACanvas: TCanvas);
var
 TicksH: integer;
 Ticks: integer;
 TicksOn: integer;
 TicksOff: integer;
 i: integer;
 Center: integer;
 SY: integer;
begin
 SY:= Rect.Top;
 TicksH:= Rect.Bottom-Rect.Top;
 Center:= (Rect.Right-Rect.Left) div 2;
 Ticks:= TicksH div 3;
 TicksOn:= (Ticks * Num) div NumberMax;
 TicksOff:= Ticks-TicksOn;
 with ACanvas do
 begin
 Brush.Color:= clBlack;
 for i:= 1 to TicksOff do
 begin
 Draw(Center-17,SY,OffBmp);
 Draw(Center+1,SY,OffBmp);
 Inc(SY,3);
 end;
 for i:= 1 to TicksOn do
 begin
 Draw(Center-17,SY,OnBmp);
 Draw(Center+1,SY,OnBmp);
 Inc(SY,3);
 end;
 end;
end;
procedure TLCDControl.UpdateLCD(UpdateCanvas: TCanvas);
var
 CX: integer;
begin
 DisplayTicks(Rect(2,2,Self.Width-2,Self.Height-20),Number,UpdateCanvas);
 CX:= (Self.Width div 2)-(GetNumberLength(Number,NumberType) div 2);
 UpdateCanvas.Brush.Color:= clBlack;
 UpdateCanvas.FillRect(Rect(2,Self.Height-15,Self.Width-2,Self.Height-2));
 WriteNumber(Number,NumberType,CX,Self.Height-15,UpdateCanvas);
end;
procedure Register;
begin
 RegisterComponents('Matthew', [TLCDControl]);
end;
end.
{ the following contains addition files that should be included with this
 file. To extract, you need XX3402 available with the SWAG distribution.
 1. Cut the text below out, and save to a file .. filename.xx
 2. Use XX3402 : xx3402 d filename.xx
 3. The decoded file should be created in the same directory.
 4. If the file is a archive file, use the proper archive program to
 extract the members.
{ ------------------ CUT ----------------------}
*XX3402-000656-230497--72--85-06793------LCDRES.ZIP--1-OF--1
I2g1--E++U+6+BNUZm7zSdQJaU+++Bk-+++C++++H2B2EqxiR57jP0tYMr7XM4-UI+1WzzwV
4-poA16ka61ZaFV045kMb-ZQUBWTkEz60k9GDZ-p+U7w91+x4Y+g+QKA1--V-IM458+-X-UO
4W+I0682UAG-+kR+BcAFm53U0UH-PjrDM6k2nDz1kKRnVC3+BhSe-OgK9C-O+4Mn94-M+07U
sY+aL-kc+FRT-J41P+t6+cUMu0vCd8E+F7XW05Mt5-EXVkY+I2g1--E++U+6+4dUZm9FyTbH
5U2++Bk7+++5++++H2B29b7ZQwqIEKf1A--3TtEoHZEcDc6KLKHVGkGHIUWodTEkKTcECM1c
oeTknNkzYdd4RYmx8R8AjwMS0Tko4UE+Vidvfu4ReQfB8rnUU2zI5Bzk3SP9wabpgrN53REX
hM-DJtWmlXpc4Vz27QKVunftcrg2mUJllyUVBJdc1EjPUeAYb9FZGZh4TSLT-TsOfxVn-wT2
v8EHQCz239LQUvLyrPcB+GTeCP0zgyOMs0sdRQBRzUBrCv0MvMKSXgo2Iw5CpttKp09NKFD3
4hyRjx4My7iGRH4nGgPActIqx7+VGav699aMSNaISJXbSQmff5cXp1vGxuUr5f8fwqqjG-nL
SNqubmDBMmumjnT4n7gQunn8lQnP5Djt1qNYJKSt6yslLk-EGk20AUgI++6+0+1KM7QWTreL
3Nc+++1Q+E++1U+++++++++++0++hc2+++++H2B2EqxiR57jP0tYMr7EGk20AUgI++6+0+-e
M7QWoTbtols-++1Q0E++-k+++++++++++0++hc54++++H2B29b7ZQp-9-EM++++++U+0+52+
+++7+U++++++
***** END OF BLOCK 1 *****


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