[lazarus] LED Component

Mattias Gaertner nc-gaertnma at netcologne.de
Thu Feb 6 01:29:54 EST 2003


On Thu,  6 Feb 2003 10:35:58 +0530
Jay Dubal <jay.dubal at intergold.net> wrote:

> Hi there,
>  
>               I made a LED component which could display digits 0 - 9
>               works 
> well on Delphi and I modified it to work on Lazarus. The unit got compiled
> and the component is on the pallet BUT.... when I drop it on Form not only
> Lazarus but the whole XWindows HANGSS!!!!!

TCanvas.Refresh was not implemented yet and therefore you used
TControl.Refresh and created an infinite loop. I added TCanvas.Refresh to
the LCL for Delphi compatibility. But you don't need the calls anyway, just
delete them. 


Mattias


> 
>               I am sendin the atachment and I request to inspect the unit 
> before compiling. If the attachemnt is not there then here is the code for
> it
> 
> *************************************************************************
> **** START OF CODE ...
> 
> 
> {************************************************************************
>             Author : Jay Dubal
>             version : 2.0
>             E-mail : delphisoft at hotpop.com, jaydubal at hotmail.com
>             URL : http://delphisoft.topcities.com
>             copyleft® DelphiSoft
> 
>             This is a Free! component. You can modify it as you like
>             and you don'nt need to inform me. Use it at my risk as
>             it is fully tested and works perfectly (Delphi 6.0)
> 
>            _a__
>           |    |b
>         f |    |
>            -g--         The basic 7 segment Light Emitting Diode (LED)
>         e |    | c      This version 2.0 has More real LED shape
>           |    |
>            -d--                
> 
> *************************************************************************
> *} unit JDLed;
> 
> {$mode objfpc}
> 
> interface
> 
> uses
>   SysUtils, Classes, Controls, Graphics, Dialogs,
>   LMessages, LResources, Forms, StdCtrls;
> 
> type
>   TJDLed = class(TGraphicControl)
>   private
>     procedure SetLedDigit(value : integer);
>     procedure SetLedThick(value: integer);
>     { Private declarations }
>   protected
>     FDigit       : integer;
>     FThick       : integer;
>     procedure   Paint; override;
>     { Protected declarations }
>   public
>     constructor Create(AOwner: TComponent); override;
>     destructor  Destroy; override;
>     { Public declarations }
>   published
>     property Digit      : integer read FDigit  write SetLedDigit;
>     property Thick      : integer read FThick  write SetLedThick;
>     { Published declarations }
>   end;
> 
> implementation
> 
> constructor TJDLed.Create(AOwner: TComponent);
> begin
>   inherited Create(AOwner);  { always call the inherited constructor }
>   FDigit  := 1;
>   FThick  := 5;
>   Height  := 90;
>   Width   := 50;
>   with Constraints do
>   begin
>     MinHeight := 30;
>     MinWidth  := 15;
>   end;
> end;
> 
> destructor TJDLed.Destroy;
> begin
>   inherited Destroy;
> end;
> 
> 
> procedure TJDLed.Paint;
> var
>   X1,X2,X3,X4,X5,X6,X7,Z,Z1 : integer;
> begin
>   X1 := self.Height;
>   X2 := self.Width;
>   X3 := self.FThick;
>   Z := abs(X3 div 2);
>   Z1 := abs(self.Height div 2);
>   X4 := Z1 - Z;
>   X5 := Z1 + Z;
>   X6 := Z1 - X3 - Z;
>   X7 := Z1 + X3 + Z;
> 
>   inherited;
>   with Canvas do
>   begin
>     Refresh;
>     Brush.Color := clBlack;
>     Pen.Color := clBlack;
>     Refresh;
> 
>     Rectangle(0,0,self.Width,self.Height);
>     Brush.Color := clRed;
>     Pen.Color := clRed; 
>     Refresh;
>     case FDigit of
> 
>     0:
>     begin
>       Polygon([Point(Z,0),Point(X2-Z,0),Point(X2-X3-Z,X3),Point(X3 + 
> Z,X3)]); //  a
>       Polygon([Point(X2-X3,X3+Z),Point(X2,Z),Point(X2,X4),Point(X2-
> X3,X6)]); //  b
>       Polygon([Point(X2-X3,X7),Point(X2,X5),Point(X2,X1-Z),Point(X2-X3,X1
>       -X3-
> Z)]); //  c
>       Polygon([Point(X3+Z,X1-X3),Point(X2-X3-Z,X1-X3),Point(X2-Z,X1),Poin
>       t(X3-
> Z,X1)]); //  d
>       Polygon([Point(0,X5),Point(X3,X7),Point(X3,X1-X3-Z),Point(0,X1-Z)]);
>       //  e Polygon([Point(0,Z),Point(X3,X3+Z),Point(X3,X6),Point(0,X4)]);
>       //  f
>     end;
>     1:
>     begin
>       Polygon([Point(X2-X3,X3+Z),Point(X2,Z),Point(X2,X4),Point(X2-
> X3,X6)]); //  b
>       Polygon([Point(X2-X3,X7),Point(X2,X5),Point(X2,X1-Z),Point(X2-X3,X1
>       -X3-
> Z)]); //  c
>     end;
>     2:
>     begin
>       Polygon([Point(Z,0),Point(X2-Z,0),Point(X2-X3-Z,X3),Point(X3 + 
> Z,X3)]); //  a
>       Polygon([Point(X2-X3,X3+Z),Point(X2,Z),Point(X2,X4),Point(X2-
> X3,X6)]); //  b
>       Polygon([Point(X3+Z,X1-X3),Point(X2-X3-Z,X1-X3),Point(X2-Z,X1),Poin
>       t(X3-
> Z,X1)]); //  d
>       Polygon([Point(0,X5),Point(X3,X7),Point(X3,X1-X3-Z),Point(0,X1-Z)]);
>       //  e Polygon([Point(X3 - abs(Z div 2),Z1),Point(X3+Z,Z1-Z - abs(Z
>       div 4)),Point
> (X2-X3-Z,Z1-Z - abs(Z div 4)),Point(X2-X3 + abs(Z div 2),Z1)]); //  g1
>       Polygon([Point(X3 - abs(Z div 2),Z1),Point(X3+Z,Z1+Z + abs(Z div
>       4)),Point
> (X2-X3-Z,Z1+Z + abs(Z div 4)),Point(X2-X3 + abs(Z div 2),Z1)]); //  g2
>     end;
>     3:
>     begin
>       Polygon([Point(Z,0),Point(X2-Z,0),Point(X2-X3-Z,X3),Point(X3 + 
> Z,X3)]); //  a
>       Polygon([Point(X2-X3,X3+Z),Point(X2,Z),Point(X2,X4),Point(X2-
> X3,X6)]); //  b
>       Polygon([Point(X2-X3,X7),Point(X2,X5),Point(X2,X1-Z),Point(X2-X3,X1
>       -X3-
> Z)]); //  c
>       Polygon([Point(X3+Z,X1-X3),Point(X2-X3-Z,X1-X3),Point(X2-Z,X1),Poin
>       t(X3-
> Z,X1)]); //  d
>       Polygon([Point(X3 - abs(Z div 2),Z1),Point(X3+Z,Z1-Z - abs(Z div
>       4)),Point
> (X2-X3-Z,Z1-Z - abs(Z div 4)),Point(X2-X3 + abs(Z div 2),Z1)]); //  g1
>       Polygon([Point(X3 - abs(Z div 2),Z1),Point(X3+Z,Z1+Z + abs(Z div
>       4)),Point
> (X2-X3-Z,Z1+Z + abs(Z div 4)),Point(X2-X3 + abs(Z div 2),Z1)]); //  g2
>     end;
>     4:
>     begin
>       Polygon([Point(X2-X3,X3+Z),Point(X2,Z),Point(X2,X4),Point(X2-
> X3,X6)]); //  b
>       Polygon([Point(X2-X3,X7),Point(X2,X5),Point(X2,X1-Z),Point(X2-X3,X1
>       -X3-
> Z)]); //  c
>       Polygon([Point(0,Z),Point(X3,X3+Z),Point(X3,X6),Point(0,X4)]); //  f
>       Polygon([Point(X3 - abs(Z div 2),Z1),Point(X3+Z,Z1-Z - abs(Z div
>       2)),Point
> (X2-X3-Z,Z1-Z - abs(Z div 2)),Point(X2-X3 + abs(Z div 2),Z1)]); //  g1
>       Polygon([Point(X3 - abs(Z div 2),Z1),Point(X3+Z,Z1+Z + abs(Z div
>       2)),Point
> (X2-X3-Z,Z1+Z + abs(Z div 2)),Point(X2-X3 + abs(Z div 2),Z1)]); //  g2
>     end;
>     5:
>     begin
>       Polygon([Point(Z,0),Point(X2-Z,0),Point(X2-X3-Z,X3),Point(X3 + 
> Z,X3)]); //  a
>       Polygon([Point(X2-X3,X7),Point(X2,X5),Point(X2,X1-Z),Point(X2-X3,X1
>       -X3-
> Z)]); //  c
>       Polygon([Point(X3+Z,X1-X3),Point(X2-X3-Z,X1-X3),Point(X2-Z,X1),Poin
>       t(X3-
> Z,X1)]); //  d
>       Polygon([Point(0,Z),Point(X3,X3+Z),Point(X3,X6),Point(0,X4)]); //  f
>       Polygon([Point(X3 - abs(Z div 2),Z1),Point(X3+Z,Z1-Z - abs(Z div
>       4)),Point
> (X2-X3-Z,Z1-Z - abs(Z div 4)),Point(X2-X3 + abs(Z div 2),Z1)]); //  g1
>       Polygon([Point(X3 - abs(Z div 2),Z1),Point(X3+Z,Z1+Z + abs(Z div
>       4)),Point
> (X2-X3-Z,Z1+Z + abs(Z div 4)),Point(X2-X3 + abs(Z div 2),Z1)]); //  g2
>     end;
>     6:
>     begin
>       Polygon([Point(Z,0),Point(X2-Z,0),Point(X2-X3-Z,X3),Point(X3 + 
> Z,X3)]); //  a
>       Polygon([Point(X2-X3,X7),Point(X2,X5),Point(X2,X1-Z),Point(X2-X3,X1
>       -X3-
> Z)]); //  c
>       Polygon([Point(X3+Z,X1-X3),Point(X2-X3-Z,X1-X3),Point(X2-Z,X1),Poin
>       t(X3-
> Z,X1)]); //  d
>       Polygon([Point(0,X5),Point(X3,X7),Point(X3,X1-X3-Z),Point(0,X1-Z)]);
>       //  e Polygon([Point(0,Z),Point(X3,X3+Z),Point(X3,X6),Point(0,X4)]);
>       //  f Polygon([Point(X3 - abs(Z div 2),Z1),Point(X3+Z,Z1-Z - abs(Z
>       div 4)),Point
> (X2-X3-Z,Z1-Z - abs(Z div 4)),Point(X2-X3 + abs(Z div 2),Z1)]); //  g1
>       Polygon([Point(X3 - abs(Z div 2),Z1),Point(X3+Z,Z1+Z + abs(Z div
>       4)),Point
> (X2-X3-Z,Z1+Z + abs(Z div 4)),Point(X2-X3 + abs(Z div 2),Z1)]); //  g2
>     end;
>     7:
>     begin
>       Polygon([Point(Z,0),Point(X2-Z,0),Point(X2-X3-Z,X3),Point(X3 + 
> Z,X3)]); //  a
>       Polygon([Point(X2-X3,X3+Z),Point(X2,Z),Point(X2,X4),Point(X2-
> X3,X6)]); //  b
>       Polygon([Point(X2-X3,X7),Point(X2,X5),Point(X2,X1-Z),Point(X2-X3,X1
>       -X3-
> Z)]); //  c
>     end;
>     8:
>     begin
>       Polygon([Point(Z,0),Point(X2-Z,0),Point(X2-X3-Z,X3),Point(X3 + 
> Z,X3)]); //  a
>       Polygon([Point(X2-X3,X3+Z),Point(X2,Z),Point(X2,X4),Point(X2-
> X3,X6)]); //  b
>       Polygon([Point(X2-X3,X7),Point(X2,X5),Point(X2,X1-Z),Point(X2-X3,X1
>       -X3-
> Z)]); //  c
>       Polygon([Point(X3+Z,X1-X3),Point(X2-X3-Z,X1-X3),Point(X2-Z,X1),Poin
>       t(X3-
> Z,X1)]); //  d
>       Polygon([Point(0,X5),Point(X3,X7),Point(X3,X1-X3-Z),Point(0,X1-Z)]);
>       //  e Polygon([Point(0,Z),Point(X3,X3+Z),Point(X3,X6),Point(0,X4)]);
>       //  f
>        Polygon([Point(X3 - abs(Z div 2),Z1),Point(X3+Z,Z1-Z - abs(Z div 
> 4)),Point(X2-X3-Z,Z1-Z - abs(Z div 4)),Point(X2-X3 + abs(Z div 2),Z1)]);
> //  g1
>       Polygon([Point(X3 - abs(Z div 2),Z1),Point(X3+Z,Z1+Z + abs(Z div
>       4)),Point
> (X2-X3-Z,Z1+Z + abs(Z div 4)),Point(X2-X3 + abs(Z div 2),Z1)]); //  g2
>     end;
>     9:
>     begin
>       Polygon([Point(Z,0),Point(X2-Z,0),Point(X2-X3-Z,X3),Point(X3 + 
> Z,X3)]); //  a
>       Polygon([Point(X2-X3,X3+Z),Point(X2,Z),Point(X2,X4),Point(X2-
> X3,X6)]); //  b
>       Polygon([Point(X2-X3,X7),Point(X2,X5),Point(X2,X1-Z),Point(X2-X3,X1
>       -X3-
> Z)]); //  c
>       Polygon([Point(X3+Z,X1-X3),Point(X2-X3-Z,X1-X3),Point(X2-Z,X1),Poin
>       t(X3-
> Z,X1)]); //  d
>       Polygon([Point(0,Z),Point(X3,X3+Z),Point(X3,X6),Point(0,X4)]); //  f
>       Polygon([Point(X3 - abs(Z div 2),Z1),Point(X3+Z,Z1-Z - abs(Z div
>       4)),Point
> (X2-X3-Z,Z1-Z - abs(Z div 4)),Point(X2-X3 + abs(Z div 2),Z1)]); //  g1
>       Polygon([Point(X3 - abs(Z div 2),Z1),Point(X3+Z,Z1+Z + abs(Z div
>       4)),Point
> (X2-X3-Z,Z1+Z + abs(Z div 4)),Point(X2-X3 + abs(Z div 2),Z1)]); //  g2
>     end;
>    end;
>    Refresh;    
>   end;
> 
> end;
> 
> 
> procedure TJDLed.SetLedDigit(value: integer);
> begin
>   if (value >= 0) and (value <= 9) then
>   begin
>     FDigit := value;
>     Paint;
>   end;
> end;
> 
> procedure TJDLed.SetLedThick(value: integer);
> begin
>   if (value > 2) then
>   begin
>     FThick := Value;
>     Paint;
>   end;
> end;
> 
> initialization
>  {$I jdledicon.lrs}
> 
> end.
> 
> END OF CODE.....
> *************************************************************************
> ****
> 
> 
> Jay Dubal
> delphisoft.topcities.com






More information about the Lazarus mailing list