MMLEDS.pas
上传用户:hylc_2004
上传日期:2014-01-23
资源大小:46800k
文件大小:65k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. {========================================================================}
  2. {=                (c) 1995-98 SwiftSoft Ronald Dittrich                 =}
  3. {========================================================================}
  4. {=                          All Rights Reserved                         =}
  5. {========================================================================}
  6. {=  D 01099 Dresden             = Fax.: +49(0)351-8037944               =}
  7. {=  Loewenstr.7a                = info@swiftsoft.de                     =}
  8. {========================================================================}
  9. {=  Actual versions on http://www.swiftsoft.de/index.html               =}
  10. {========================================================================}
  11. {=  This code is for reference purposes only and may not be copied or   =}
  12. {=  distributed in any format electronic or otherwise except one copy   =}
  13. {=  for backup purposes.                                                =}
  14. {=                                                                      =}
  15. {=  No Delphi Component Kit or Component individually or in a collection=}
  16. {=  subclassed or otherwise from the code in this unit, or associated   =}
  17. {=  .pas, .dfm, .dcu, .asm or .obj files may be sold or distributed     =}
  18. {=  without express permission from SwiftSoft.                          =}
  19. {=                                                                      =}
  20. {=  For more licence informations please refer to the associated        =}
  21. {=  HelpFile.                                                           =}
  22. {========================================================================}
  23. {=  $Date: 22.10.98 - 17:51:31 $                                        =}
  24. {========================================================================}
  25. Unit MMLEDS;
  26. {$I COMPILER.INC}
  27. interface
  28. uses
  29. {$IFDEF WIN32}
  30.     Windows,
  31. {$ELSE}
  32.     WinTypes,
  33.     WinProcs,
  34. {$ENDIF}
  35.     SysUtils,
  36.     Messages,
  37.     Classes,
  38.     Graphics,
  39.     Controls,
  40.     Forms,
  41.     Dialogs,
  42.     ExtCtrls,
  43.     Buttons,
  44.     MMObj,
  45.     MMUtils,
  46.     MMString,
  47.     MMSpin;
  48. type
  49.     TMMLEDType =(ltDigit, ltPeriod, ltColon, ltMinus);
  50.     TMMLEDSize =(ls06x07,ls07x11,ls08x13,ls11x19,ls13x20,ls13x21,ls15x24,
  51.                  ls15x25,ls17x29,ls18x25,ls19x33,ls21x37,ls23x41);
  52.     TMMPaintEvent = procedure(Sender: TObject; Canvas: TCanvas; R: TRect) of object;
  53.     
  54.     {-- TMMLED -----------------------------------------------------------}
  55.     TMMLED = class(TMMGraphicControl)
  56.     private
  57.        FEnabled    : Boolean;           { Enable or disable LED           }
  58.        FLEDColor   : TColor;            { foreground color                }
  59.        FBeveledRect: TRect;             { the real LED area               }
  60.        FOnPaint    : TMMPaintEvent;
  61.        procedure SetEnabled(aValue: Boolean);
  62.        procedure SetLEDColor(aValue: TColor);
  63.        procedure DrawLED;
  64.        procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED;
  65.     protected
  66.        procedure Paint; override;
  67.        procedure Changed; override;
  68.        procedure SetBounds(aLeft, aTop, aWidth, aHeight: integer); override;
  69.     public
  70.        constructor Create(AOwner: TComponent); override;
  71.     published
  72.        { Events }
  73.        property OnClick;
  74.        property OnDblClick;
  75.        property OnMouseDown;
  76.        property OnMouseMove;
  77.        property OnMouseUp;
  78.        property OnDragDrop;
  79.        property OnDragOver;
  80.        property OnEndDrag;
  81.        property OnStartDrag;
  82.        property OnPaint: TMMPaintEvent read FOnPaint write FOnPaint;
  83.        property Bevel;
  84.        property Color default clGreen;
  85.        property ParentShowHint;
  86.        property ShowHint;
  87.        property Visible;
  88.        property Font;
  89.        property Caption;
  90.        property DragCursor;
  91.        property Enabled: Boolean read FEnabled write SetEnabled default True;
  92.        property Height default 8;
  93.        property Width default 16;
  94.        property LEDColor: TColor read FLEDColor write setLEDColor default clLime;
  95.     end;
  96.     {-- TMMLEDMode -------------------------------------------------------}
  97.     TMMLEDMode = class(TMMGraphicControl)
  98.     private
  99.        FMode          : TMMMode;
  100.        FEnabled       : Boolean;
  101.        FLEDColor      : TColor;
  102.        FInactiveColor : TColor;
  103.        FDrawInactive  : Boolean;
  104.        FBitmap        : TBitmap;
  105.        procedure LoadNewResource;
  106.        procedure SetMode(aValue: TMMMode);
  107.        procedure SetLEDColor(aColor: TColor);
  108.        procedure SetInactiveColor(aColor: TColor);
  109.        procedure SetDrawInactive(aValue: Boolean);
  110.        procedure SetEnabled(aValue: Boolean);
  111.        function  GetEnabled: Boolean;
  112.        procedure CMColorChanged(var Message: TMessage); message CM_COLORCHANGED;
  113.     protected
  114.        procedure Paint; override;
  115.     public
  116.        constructor Create (AOwner: TComponent); override;
  117.        destructor  Destroy; override;
  118.     published
  119.        { Events }
  120.        property OnClick;
  121.        property OnDblClick;
  122.        property OnMouseDown;
  123.        property OnMouseMove;
  124.        property OnMouseUp;
  125.        property OnDragDrop;
  126.        property OnDragOver;
  127.        property OnEndDrag;
  128.        property OnStartDrag;
  129.        property ParentShowHint;
  130.        property ParentColor;
  131.        property ShowHint;
  132.        property Visible;
  133.        property Color;
  134.        property DragCursor;
  135.        property Width default 27;
  136.        property Height default 11;
  137.        property DrawInactive: Boolean read FDrawInactive write SetDrawInactive default True;
  138.        property Enabled: Boolean read GetEnabled write SetEnabled default True;
  139.        property Mode: TMMMode read FMode write SetMode default mMono;
  140.        property LEDColor: TColor read FLEDColor write SetLEDColor default clLime;
  141.        property InactiveColor: TColor read FInactiveColor write SetInactiveColor default clGreen;
  142.     end;
  143.     {-- TMMCustomLEDDigit ------------------------------------------------}
  144.     TMMCustomLEDDigit = class(TMMGraphicControl);
  145.     {-- TMMLEDDigit ------------------------------------------------------}
  146.     TMMLEDDigit = class(TMMCustomLEDDigit)
  147.     private
  148.        FMinValue      : integer;
  149.        FMaxValue      : integer;
  150.        FValue         : Longint;
  151.        FDrawInactive  : Boolean;
  152.        FZeroBlank     : Boolean;
  153.        FInactiveColor : TColor;
  154.        FLEDColor      : TColor;
  155.        FEnabled       : Boolean;
  156.        FSize          : TMMLEDSize;
  157.        FType          : TMMLEDType;
  158.        FCascade       : Boolean;
  159.        FConnect       : TMMCustomLEDDigit;
  160.        FBitmap        : TBitmap;
  161.        FOnRollForward : TNotifyEvent;
  162.        FOnRollBackward: TNotifyEvent;
  163.        procedure LoadNewResource;
  164.        procedure SetEnabled(aValue: Boolean);
  165.        function  GetEnabled: Boolean;
  166.        procedure SetMinValue(aValue: integer);
  167.        procedure SetMaxValue(aValue: integer);
  168.        procedure SetValue(aValue: Longint);
  169.        procedure SetDrawInactive(aValue: Boolean);
  170.        procedure SetZeroBlank(aValue: Boolean);
  171.        procedure SetType(aType: TMMLEDType);
  172.        procedure SetSize(aValue: TMMLEDSize);
  173.        procedure SetLEDColor(aColor: TColor);
  174.        procedure SetInactiveColor(aColor: TColor);
  175.        procedure SetCascade(aValue: Boolean);
  176.        procedure SetConnect(aControl: TMMCustomLEDDigit);
  177.        procedure CMColorChanged(var Message: TMessage); message CM_COLORCHANGED;
  178.        {$IFDEF BUILD_ACTIVEX}
  179.        procedure WMSize(var Message: TWMSize); message WM_SIZE;
  180.        {$ENDIF}
  181.     protected
  182.        procedure Loaded; override;
  183.        procedure Paint; override;
  184.        procedure SetBounds(aLeft, aTop, aWidth, aHeight: integer); override;
  185.        procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  186.        procedure RollForward; dynamic;
  187.        procedure RollBackward; dynamic;
  188.     public
  189.        constructor Create (AOwner: TComponent); override;
  190.        destructor  Destroy; override;
  191.        procedure   Increase;
  192.        procedure   Decrease;
  193.     published
  194.        { Events }
  195.        property OnClick;
  196.        property OnDblClick;
  197.        property OnMouseDown;
  198.        property OnMouseMove;
  199.        property OnMouseUp;
  200.        property OnRollForward: TNotifyEvent read FOnRollForward write FOnRollForward;
  201.        property OnRollBackward: TNotifyEvent read FOnRollBackward write FOnRollBackward;
  202.        property ParentShowHint;
  203.        property ParentColor;
  204.        property ShowHint;
  205.        property Visible;
  206.        property Color;
  207.        property Width default 11;
  208.        property Height default 21;
  209.        property Enabled: Boolean read GetEnabled write SetEnabled default True;
  210.        property MinValue: integer read FMinValue write SetMinValue default 0;
  211.        property MaxValue: integer read FMaxValue write SetMaxValue default 9;
  212.        property Value: Longint read FValue write SetValue default 0;
  213.        property DrawInactive: Boolean read FDrawInactive write SetDrawInactive default True;
  214.        property ZeroBlank: Boolean read FZeroBlank write SetZeroBlank default False;
  215.        property InactiveColor: TColor read FInactiveColor write SetInactiveColor default clGreen;
  216.        property LEDColor: TColor read FLEDColor write SetLEDColor default clLime;
  217.        property DigitSize: TMMLEDSize read FSize write SetSize default ls13X21;
  218.        property DisplayType: TMMLEDType read FType write SetType default ltDigit;
  219.        property CascadeValues: Boolean read FCascade write SetCascade default False;
  220.        property Connect: TMMCustomLEDDigit read FConnect write SetConnect;
  221.     end;
  222.     {-- TMMLEDPanel ------------------------------------------------------}
  223.     TMMLEDPanel = class(TMMCustomPanel)
  224.     private
  225.        FMinValue     : LongInt;
  226.        FMaxValue     : LongInt;
  227.        FValue        : Longint;
  228.        FSize         : TMMLEDSize;
  229.        FLEDSpace     : integer;
  230.        FLEDColor     : TColor;
  231.        FInactiveColor: TColor;
  232.        FDrawInactive : Boolean;
  233.        FZeroBlank    : Boolean;
  234.        FNumDigits    : integer;
  235.        FDigits       : array[0..8] of TMMLedDigit;
  236.        FOnChange     : TNotifyEvent;
  237.        function  CreateDigit: TMMLedDigit;
  238.        procedure CreateAllDigits;
  239.        procedure AdjustSize (var W, H: integer);
  240.        procedure AdjustBounds;
  241.        procedure DestroyAllDigits;
  242.        procedure SetMaxValue(aValue: Longint);
  243.        procedure SetMinValue(aValue: Longint);
  244.        procedure SetNumDigits(aValue: integer);
  245.        procedure SetLEDSpace(aValue: integer);
  246.        procedure SetLEDColor(aValue: TColor);
  247.        procedure SetInactiveColor(aValue: TColor);
  248.        procedure SetDrawInactive(aValue: Boolean);
  249.        procedure SetEnabled(aValue: Boolean);
  250.        function  GetEnabled: Boolean;
  251.        procedure SetSize(aValue: TMMLEDSize);
  252.        procedure SetZeroBlank(aValue: Boolean);
  253.        procedure SetValue(aValue: Longint);
  254.        procedure WMSize(var Message: TWMSize);  message WM_SIZE;
  255.        procedure CMColorChanged(var Message: TMessage); message CM_COLORCHANGED;
  256.        procedure BtnClick(Sender: TObject);
  257.        procedure BtnDblClick(Sender: TObject);
  258.        procedure MsDown(Sender: TObject; Button: TMouseButton;
  259.                         Shift: TShiftState; X, Y: Integer);
  260.        procedure MsUp(Sender: TObject; Button: TMouseButton;
  261.                       Shift: TShiftState; X, Y: Integer);
  262.        procedure MsMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  263.     protected
  264.        procedure Loaded; override;
  265.        procedure Change; dynamic;
  266.        procedure Changed; override;
  267.        procedure SetBounds(aLeft, aTop, aWidth, aHeight: integer); override;
  268.        {$IFDEF WIN32}
  269.        {$IFDEF DELPHI3}
  270.        procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
  271.        {$ELSE}
  272.        procedure GetChildren(Proc: TGetChildProc); override;
  273.        {$ENDIF}
  274.        {$ENDIF}
  275.     public
  276.        constructor Create (aOwner: TComponent); override;
  277.        destructor  Destroy; override;
  278.     published
  279.        { Events }
  280.        property OnClick;
  281.        property OnDblClick;
  282.        property OnMouseDown;
  283.        property OnMouseMove;
  284.        property OnMouseUp;
  285.        property OnResize;
  286.        property OnChange: TNotifyEvent read FOnChange write FOnChange;
  287.        property Bevel;
  288.        property ParentShowHint;
  289.        property ParentColor;
  290.        property ShowHint;
  291.        property Visible;
  292.        property Color default clBlack;
  293.        property DrawInactive: Boolean read FDrawInactive write SetDrawInactive default True;
  294.        property Enabled: Boolean read GetEnabled write SetEnabled default True;
  295.        property LEDColor: TColor read FLEDColor write SetLEDColor default clLime;
  296.        property InactiveColor: TColor read FInactiveColor write SetInactiveColor default clGreen;
  297.        property NumDigits: integer read FNumDigits write SetNumDigits default 2;
  298.        property DigitSize: TMMLEDSize read FSize write SetSize default ls13X21;
  299.        property LEDSpace: integer read FLEDSpace write SetLEDSpace default 1;
  300.        property MaxValue: LongInt read FMaxValue write SetMaxValue default 0;
  301.        property MinValue: LongInt read FMinValue write SetMinValue default 100;
  302.        property TabOrder;
  303.        property TabStop;
  304.        property ZeroBlank: Boolean read FZeroBlank write SetZeroBlank default False;
  305.        property Value: Longint read FValue write SetValue default 0;
  306.     end;
  307.     {-- TMMLEDSpin -------------------------------------------------------}
  308.     TMMLEDSpin = class(TMMWinControl)
  309.     private
  310.        FLEDPanel   : TMMLEDPanel;
  311.        FButton     : TMMSpinButton;
  312.        FSpace      : integer;
  313.        FOnChange   : TNotifyEvent;
  314.        FOnUpClick  : TNotifyEvent;
  315.        FOnDownClick: TNotifyEvent;
  316.        procedure SetIncrement(aValue: Longint);
  317.        function  GetIncrement: Longint;
  318.        procedure SetSpace(aValue: integer);
  319.        procedure SetNumDigits(aValue: integer);
  320.        function  GetNumDigits: integer;
  321.        procedure SetLEDSpace(aValue: integer);
  322.        function  GetLEDSpace: integer;
  323.        procedure SetColor(aValue: TColor);
  324.        function  GetColor: TColor;
  325.        procedure SetLEDColor(aValue: TColor);
  326.        function  GetLedColor: TColor;
  327.        procedure SetInactiveColor(aValue: TColor);
  328.        function  GetInactiveColor: TColor;
  329.        procedure SetDrawInactive(aValue: Boolean);
  330.        function  GetDrawInactive: Boolean;
  331.        procedure SetEnabled(aValue: Boolean);
  332.        function  GetEnabled: Boolean;
  333.        procedure SetSize(aValue: TMMLEDSize);
  334.        function  GetSize: TMMLEDSize;
  335.        procedure SetZeroBlank(aValue: Boolean);
  336.        function  GetZeroBlank: Boolean;
  337.        procedure SetValue(aValue: Longint);
  338.        function  GetValue: Longint;
  339.        procedure SetMinValue(aValue: Longint);
  340.        function  GetMinValue: Longint;
  341.        procedure SetMaxValue(aValue: Longint);
  342.        function  GetMaxValue: Longint;
  343.        procedure SetLEDBevel(aBevel: TMMBevel);
  344.        function  GetLEDBevel: TMMBevel;
  345.        procedure SetTabStop(aValue: Boolean);
  346.        function  GetTabStop: Boolean;
  347.        function  GetUpGlyph: TBitmap;
  348.        function  GetDownGlyph: TBitmap;
  349.        procedure SetUpGlyph(Value: TBitmap);
  350.        procedure SetUpNumGlyphs(Value: TNumGlyphs);
  351.        function  GetUpNumGlyphs: TNumGlyphs;
  352.        procedure SetDownGlyph(Value: TBitmap);
  353.        procedure SetDownNumGlyphs(Value: TNumGlyphs);
  354.        function  GetDownNumGlyphs: TNumGlyphs;
  355.        procedure SetButtonFace(Value: Boolean);
  356.        function  GetButtonFace: Boolean;
  357.        procedure SetMiddleButton(Value: Boolean);
  358.        function  GetMiddleButton: Boolean;
  359.        procedure SetSpinBevel(aValue: TMMBevel);
  360.        function  GetSpinBevel: TMMBevel;
  361.        procedure AdjustSize (var W, H: integer);
  362.        procedure AdjustBounds;
  363.        procedure WMSetFocus(var Message: TWMSetFocus); message WM_SETFOCUS;
  364.        procedure WMSize(var Message: TWMSize); message WM_SIZE;
  365.        procedure BtnClick(Sender: TObject);
  366.        procedure BtnDblClick(Sender: TObject);
  367.        procedure MsDown(Sender: TObject; Button: TMouseButton;
  368.                         Shift: TShiftState; X, Y: Integer);
  369.        procedure MsUp(Sender: TObject; Button: TMouseButton;
  370.                       Shift: TShiftState; X, Y: Integer);
  371.        procedure MsMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  372.     protected
  373.        procedure UpClick(Sender: TObject); virtual;
  374.        procedure DownClick(Sender: TObject); virtual;
  375.        procedure ChildChange(Sender: TObject); virtual;
  376.        procedure Change; virtual;
  377.        procedure GetChanged(Sender: TObject); virtual;
  378.        {$IFDEF WIN32}
  379.        {$IFDEF DELPHI3}
  380.        procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
  381.        {$ELSE}
  382.        procedure GetChildren(Proc: TGetChildProc); override;
  383.        {$ENDIF}
  384.        {$ENDIF}
  385.        procedure SetBounds(aLeft, aTop, aWidth, aHeight: integer); override;
  386.        procedure Click; override;
  387.     public
  388.        constructor Create(AOwner: TComponent); override;
  389.        destructor  Destroy; override;
  390.        property    Button: TMMSpinButton read FButton write FButton;
  391.     published
  392.        { Events }
  393.        property OnClick;
  394.        property OnDblClick;
  395.        property OnMouseDown;
  396.        property OnMouseMove;
  397.        property OnMouseUp;
  398.        property OnChange: TNotifyEvent read FOnChange write FOnChange;
  399.        property OnDownClick: TNotifyEvent read FOnDownClick write FOnDownClick;
  400.        property OnUpClick: TNotifyEvent read FOnUpClick write FOnUpClick;
  401.        property Bevel: TMMBevel read GetLEDBevel write SetLEDBevel;
  402.        property ParentShowHint;
  403.        property ShowHint;
  404.        property Visible;
  405.        property Color: TColor read GetColor write SetColor default clBlack;
  406.        property DrawInactive: Boolean read GetDrawInactive write SetDrawInactive default True;
  407.        property Enabled: Boolean read GetEnabled write SetEnabled;
  408.        property LEDColor: TColor read GetLEDColor write SetLEDColor;
  409.        property InactiveColor: TColor read GetInactiveColor write SetInactiveColor;
  410.        property NumDigits: integer read GetNumDigits write SetNumDigits;
  411.        property DigitSize: TMMLEDSize read GetSize write SetSize;
  412.        property LEDSpace: integer read GetLEDSpace write SetLEDSpace;
  413.        property Space: integer read FSpace write SetSpace default 2;
  414.        property TabStop: Boolean read GetTabStop write setTabStop default True;
  415.        property TabOrder;
  416.        property Increment: Longint read GetIncrement write SetIncrement;
  417.        property ZeroBlank: Boolean read GetZeroBlank write SetZeroBlank;
  418.        property MaxValue: LongInt read GetMaxValue write SetMaxValue;
  419.        property MinValue: LongInt read GetMinValue write SetMinValue;
  420.        property Value: Longint read GetValue write SetValue;
  421.        property DownGlyph: TBitmap read GetDownGlyph write SetDownGlyph;
  422.        property DownNumGlyphs: TNumGlyphs read GetDownNumGlyphs write SetDownNumGlyphs;
  423.        property UpGlyph: TBitmap read GetUpGlyph write SetUpGlyph;
  424.        property UpNumGlyphs: TNumGlyphs read GetUpNumGlyphs write SetUpNumGlyphs;
  425.        property ButtonFace: Boolean read GetButtonFace write SetButtonFace;
  426.        property MiddleButton: Boolean read GetMiddleButton write SetMiddleButton;
  427.        property SpinBevel: TMMBevel read GetSpinBevel write SetSpinBevel;
  428.     end;
  429. implementation
  430. const
  431.      RC_NumDigits    = 11;     { number of digits in the resource file    }
  432.      RC_NumSeparators= 4;      { number of separators in resource file    }
  433. {$IFDEF WIN32}
  434.   {$R MMLEDS.D32}
  435. {$ELSE}
  436.   {$R MMLEDS.D16}
  437. {$ENDIF}
  438. { these mode resource are available: }
  439. { 'LCD_MODE'   }
  440. { these digit resources are available: }
  441. { 'LCD_06X07' }
  442. { 'LCD_07X11' }
  443. { 'LCD_08X13' }
  444. { 'LCD_11X19' }
  445. { 'LCD_13X20' }
  446. { 'LCD_13X21' }
  447. { 'LCD_15X24' }
  448. { 'LCD_15X25' }
  449. { 'LCD_18X25' }
  450. { 'LCD_21X37' }
  451. { 'LCD_23X41' }
  452. { these separator resources are available: }
  453. { 'LCDS_06X07' }
  454. { 'LCDS_07X11' }
  455. { 'LCDS_08X13' }
  456. { 'LCDS_11X19' }
  457. { 'LCDS_13X20' }
  458. { 'LCDS_13X21' }
  459. { 'LCDS_15X24' }
  460. { 'LCDS_15X25' }
  461. { 'LCDS_18X25' }
  462. { 'LCDS_21X37' }
  463. { 'LCDS_23X41' }
  464. {-- TMMLED ---------------------------------------------------------------}
  465. constructor TMMLED.Create(AOwner: TComponent);
  466. begin
  467.      inherited Create(AOwner);
  468.      ControlStyle := ControlStyle - [csSetCaption];
  469.      FBeveledRect := BeveledRect;
  470.      Height := 8;
  471.      Width := 16;
  472.      FEnabled := True;
  473.      Color := clGreen;
  474.      FLEDColor := clLime;
  475.      ErrorCode := ComponentRegistered(InitCode, Self, ClassName);
  476.      if (ErrorCode <> 0) then RegisterFailed(InitCode, Self , ClassName);
  477. end;
  478. {-- TMMLED ---------------------------------------------------------------}
  479. Procedure TMMLED.SetLEDColor(aValue: TColor);
  480. begin
  481.      if (aValue <> FLEDColor) then
  482.      begin
  483.           FLEDColor := aValue;
  484.           Invalidate;
  485.      end;
  486. end;
  487. {-- TMMLED ---------------------------------------------------------------}
  488. procedure TMMLED.SetEnabled(aValue: Boolean);
  489. begin
  490.      if (aValue <> FEnabled) then
  491.      begin
  492.           FEnabled := aValue;
  493.           if (Caption = '') then
  494.               DrawLED
  495.           else
  496.               Repaint;
  497.      end;
  498. end;
  499. {-- TMMLED ---------------------------------------------------------------}
  500. procedure TMMLED.SetBounds(aLeft, aTop, aWidth, aHeight: integer);
  501. begin
  502.      inherited SetBounds(aLeft, aTop, aWidth, aHeight);
  503.      FBeveledRect := BeveledRect;
  504. end;
  505. {-- TMMLED ---------------------------------------------------------------}
  506. Procedure TMMLED.Changed;
  507. begin
  508.      FBeveledRect := BeveledRect;
  509.      inherited Changed;
  510. end;
  511. {-- TMMLED ---------------------------------------------------------------}
  512. procedure TMMLED.CMTextChanged(var Message: TMessage);
  513. begin
  514.    Refresh;
  515. end;
  516. {-- TMMLED ---------------------------------------------------------------}
  517. Procedure TMMLED.DrawLED;
  518. var
  519.    aRect: TRect;
  520.    FontHeight: Integer;
  521.    Text: PChar;
  522. begin
  523.      {$IFNDEF BUILD_ACTIVEX}
  524.      if (Parent <> nil) and Parent.HandleAllocated then
  525.      {$ENDIF}
  526.      with Canvas do
  527.      begin
  528.         if assigned(FOnPaint) then
  529.            FOnPaint(Self,Canvas,ClientRect)
  530.         else
  531.         begin
  532.            if FEnabled then
  533.               Brush.Color := FLEDColor
  534.            else
  535.               Brush.Color := Color;
  536.            FillRect(FBeveledRect);
  537.            if (Caption <> '') then
  538.            begin
  539.               Text := StrAlloc(Length(Caption)+1);
  540.               try
  541.                  StrPCopy(Text, Caption);
  542.                  Brush.Style := bsClear;
  543.                  Font := Self.Font;
  544.                  FontHeight := TextHeight('W');
  545.                  with aRect do
  546.                  begin
  547.                     Top := ((Bottom + Top) - FontHeight) shr 1;
  548.                     Bottom := Top + FontHeight;
  549.                  end;
  550.                  DrawText(Handle, Text, StrLen(Text), aRect, (DT_EXPANDTABS or
  551.                           DT_VCENTER) or DT_CENTER);
  552.               finally
  553.                  StrDispose(Text);
  554.               end;
  555.            end;
  556.         end;
  557.      end;
  558. end;
  559. {-- TMMLED ---------------------------------------------------------------}
  560. Procedure TMMLED.Paint;
  561. begin
  562.    inherited Paint;                                    { draw the bevel }
  563.    DrawLED;
  564. end;
  565. {== TMMLEDMode ===========================================================}
  566. constructor TMMLedMode.Create (AOwner: TComponent);
  567. begin
  568.      FBitmap := TBitmap.Create;
  569.      inherited Create (AOwner);
  570.      Width := 27;
  571.      Height := 11;
  572.      FEnabled := True;      { !!!!!!!! ev. wieder zu inherited 鋘dern }
  573.      FMode := mMono;
  574.      FDrawInactive := True;
  575.      FInactiveColor := clGreen;
  576.      LEDColor := clLime;
  577.      ErrorCode := ComponentRegistered(InitCode, Self, ClassName);
  578.      if (ErrorCode <> 0) then RegisterFailed(InitCode, Self , ClassName);
  579. end;
  580. {-- TMMLEDMode -----------------------------------------------------------}
  581. destructor TMMLedMode.Destroy;
  582. begin
  583.      FBitmap.Free;
  584.      inherited Destroy;
  585. end;
  586. {-- TMMLEDMode -----------------------------------------------------------}
  587. procedure TMMLEDMode.LoadNewResource;
  588. begin                                                { load the resource }
  589.      FBitmap.Handle := LoadBitmap(HInstance, 'LCD_MODE');
  590.      { Change the black/white resource to a colored bitmap }
  591.      ChangeColors(FBitmap,FDrawInactive,FLEDColor,FInactiveColor,Color);
  592. end;
  593. {-- TMMLEDMode -----------------------------------------------------------}
  594. procedure TMMLedMode.SetMode(aValue: TMMMode);
  595. begin
  596.      if (aValue <> FMode) then
  597.      begin
  598.           FMode := aValue;
  599.           Invalidate;
  600.      end;
  601. end;
  602. {-- TMMLEDMode -----------------------------------------------------------}
  603. procedure TMMLEDMode.CMColorChanged(var Message: TMessage);
  604. begin
  605.      LoadNewResource;
  606.      Invalidate;
  607. end;
  608. {-- TMMLEDMode -----------------------------------------------------------}
  609. procedure TMMLEDMode.SetEnabled(aValue: Boolean);
  610. begin
  611.      {inherited Enabled := aValue;}
  612.      FEnabled := aValue;       { !!!!!!!! ev. wieder zu inherited 鋘dern }
  613.      Invalidate;
  614. end;
  615. {-- TMMLEDMode -----------------------------------------------------------}
  616. function  TMMLEDMode.GetEnabled: Boolean;
  617. begin
  618.      {Result := inherited Enabled;}
  619.      Result := FEnabled;       { !!!!!!!! ev. wieder zu inherited 鋘dern }
  620. end;
  621. {-- TMMLEDMode -----------------------------------------------------------}
  622. procedure TMMLedMode.SetLEDColor(aColor: TColor);
  623. begin
  624.      if (aColor <> FLEDColor) then
  625.      begin
  626.           FLEDColor := aColor;
  627.           LoadNewResource;
  628.           Invalidate;
  629.      end;
  630. end;
  631. {-- TMMLEDMode -----------------------------------------------------------}
  632. procedure TMMLedMode.SetInactiveColor(aColor: TColor);
  633. begin
  634.      if (aColor <> FInactiveColor) then
  635.      begin
  636.           FInactiveColor := aColor;
  637.           LoadNewResource;
  638.           Invalidate;
  639.      end;
  640. end;
  641. {-- TMMLEDMode -----------------------------------------------------------}
  642. procedure TMMLedMode.SetDrawInactive(aValue: Boolean);
  643. begin
  644.      if (FDrawInactive <> aValue) then
  645.      begin
  646.           FDrawInactive := aValue;
  647.           LoadNewResource;
  648.           Invalidate;
  649.      end;
  650. end;
  651. {-- TMMLEDMode -----------------------------------------------------------}
  652. procedure TMMLedMode.Paint;
  653. Var
  654.    MemDC: HDC;
  655.    oldBitmap: HBitmap;
  656.    BitmapOfs: integer;
  657. begin
  658.      MemDC := CreateCompatibleDC(0);
  659.      oldBitmap := SelectObject(MemDC, FBitmap.Handle);
  660.      BitmapOfs := (FBitmap.Width div 4) * (Ord(FMode)+1) * Ord(Enabled);
  661.      StretchBlt(Canvas.Handle,
  662.                 0, 0, Width, Height,
  663.                 MemDC,
  664.                 BitmapOfs, 0,
  665.                 FBitmap.Width div 4, FBitmap.Height,
  666.                 SRCCOPY);
  667.      SelectObject(MemDC, oldBitmap);
  668.      DeleteDC(MemDC);
  669. end;
  670. {=========================================================================}
  671. type
  672.     PDigitBitmap = ^TDigitBitmap;
  673.     TDigitBitmap = record
  674.        FBitmap    : TBitmap;
  675.        FType      : TMMLEDType;
  676.        FSize      : TMMLEDSize;
  677.        FInactive  : Boolean;
  678.        FColor     : TColor;
  679.        FLEDColor  : TColor;
  680.        FInactColor: TColor;
  681.        FCount     : integer;
  682.     end;
  683.     TDigitCache = class
  684.     public
  685.        BitmapList: TList;
  686.        constructor Create;
  687.        destructor Destroy; override;
  688.        function  Empty: Boolean;
  689.        function  LoadBitmap(Typ: TMMLEDType; Size: TMMLEDSize; Inactive: Boolean;
  690.                             LEDColor, InactColor,Color: TColor): TBitmap;
  691.        procedure RemoveBitmap(var Bitmap: TBitmap);
  692.     end;
  693. const
  694.    DigitCache : TDigitCache = nil;
  695. {== TDigitCache ==========================================================}
  696. constructor TDigitCache.Create;
  697. begin
  698.    inherited Create;
  699.    BitmapList := TList.Create;
  700. end;
  701. {-- TDigitCache ----------------------------------------------------------}
  702. destructor TDigitCache.Destroy;
  703. begin
  704.    BitmapList.Free;
  705.    inherited Destroy;
  706. end;
  707. {-- TDigitCache ----------------------------------------------------------}
  708. function TDigitCache.Empty: Boolean;
  709. begin
  710.    Result := BitmapList.Count = 0;
  711. end;
  712. {-- TDigitCache ----------------------------------------------------------}
  713. function TDigitCache.LoadBitmap(Typ: TMMLEDType; Size: TMMLEDSize; Inactive: Boolean;
  714.                                 LEDColor,InactColor,Color: TColor): TBitmap;
  715. Var
  716.    DigitBitmap: PDigitBitmap;
  717.    Str1: array[0..80] of Char;
  718.    i: integer;
  719. begin
  720.    if (BitmapList.Count > 0) then
  721.    begin
  722.       { look if we have such a bitmap always in the cache }
  723.       for i := 0 to BitmapList.Count-1 do
  724.       with PDigitBitmap(BitmapList.Items[i])^ do
  725.       begin
  726.          if (Typ = FType) and (Size = FSize) and (Inactive = FInactive) and
  727.             (Color = FColor) and (LEDColor = FLEDColor) and (InactColor = FInactColor) then
  728.          begin
  729.             inc(FCount);
  730.             Result := FBitmap;
  731.             exit;
  732.          end;
  733.       end;
  734.    end;
  735.    { load and prepare a new bitmap resource }
  736.    if (Typ = ltDigit) then
  737.    case Size of
  738.         ls06x07: StrCopy(str1, 'LCD_06X07');
  739.         ls07x11: StrCopy(str1, 'LCD_07X11');
  740.         ls08x13: StrCopy(str1, 'LCD_08X13');
  741.         ls11x19: StrCopy(str1, 'LCD_11X19');
  742.         ls13x20: StrCopy(str1, 'LCD_13X20');
  743.         ls13x21: StrCopy(str1, 'LCD_13X21');
  744.         ls15x24: StrCopy(str1, 'LCD_15X24');
  745.         ls15x25: StrCopy(str1, 'LCD_15X25');
  746.         ls17x29: StrCopy(str1, 'LCD_17X29');
  747.         ls18x25: StrCopy(str1, 'LCD_18X25');
  748.         ls19x33: StrCopy(str1, 'LCD_19X33');
  749.         ls21x37: StrCopy(str1, 'LCD_21X37');
  750.         ls23x41: StrCopy(str1, 'LCD_23X41');
  751.    end
  752.    else
  753.    case Size of
  754.         ls06x07: StrCopy(str1, 'LCDS_06X07');
  755.         ls07x11: StrCopy(str1, 'LCDS_07X11');
  756.         ls08x13: StrCopy(str1, 'LCDS_08X13');
  757.         ls11x19: StrCopy(str1, 'LCDS_11X19');
  758.         ls13x20: StrCopy(str1, 'LCDS_13X20');
  759.         ls13x21: StrCopy(str1, 'LCDS_13X21');
  760.         ls15x24: StrCopy(str1, 'LCDS_15X24');
  761.         ls15x25: StrCopy(str1, 'LCDS_15X25');
  762.         ls17x29: StrCopy(str1, 'LCDS_17X29');
  763.         ls18x25: StrCopy(str1, 'LCDS_18X25');
  764.         ls19x33: StrCopy(str1, 'LCDS_19X33');
  765.         ls21x37: StrCopy(str1, 'LCDS_21X37');
  766.         ls23x41: StrCopy(str1, 'LCDS_23X41');
  767.    end;
  768.    New(DigitBitmap);
  769.    with DigitBitmap^ do
  770.    begin
  771.       FBitmap := TBitmap.Create;
  772.       {$IFDEF WIN32}
  773.       FBitmap.Handle := Windows.LoadBitmap(HInstance, Str1);{ load the resource }
  774.       {$ELSE}
  775.       FBitmap.Handle := WinProcs.LoadBitmap(HInstance, Str1);{ load the resource }
  776.       {$ENDIF}
  777.       { Change the black/white resource to a colored bitmap }
  778.       ChangeColors(FBitmap,Inactive,LEDColor,InactColor,Color);
  779.       FType      := Typ;
  780.       FSize      := Size;
  781.       FInactive  := Inactive;
  782.       FColor     := Color;
  783.       FLEDColor  := LEDColor;
  784.       FInactColor:= InactColor;
  785.       FCount     := 1;
  786.       BitmapList.Add(DigitBitmap);
  787.       Result := FBitmap;
  788.    end;
  789. end;
  790. {-- TDigitCache ----------------------------------------------------------}
  791. procedure TDigitCache.RemoveBitmap(var Bitmap: TBitmap);
  792. var
  793.    i: integer;
  794. begin
  795.    if (Bitmap <> nil) and (BitmapList.Count > 0) then
  796.    begin
  797.       for i := 0 to BitmapList.Count-1 do
  798.       with PDigitBitmap(BitmapList.Items[i])^ do
  799.       begin
  800.          if (FBitmap = Bitmap) then
  801.          begin
  802.             dec(FCount);
  803.             if (FCount = 0) then
  804.             begin
  805.                FBitmap.Free;
  806.                Dispose(BitmapList.Items[i]);
  807.                BitmapList.Delete(i);
  808.                Bitmap := nil;
  809.             end;
  810.             break;
  811.          end;
  812.       end;
  813.    end;
  814. end;
  815. {== TMMLEDDigit ==========================================================}
  816. constructor TMMLedDigit.Create (AOwner: TComponent);
  817. begin
  818.    ControlState := ControlState + [csCreating];
  819.    inherited Create (AOwner);
  820.    ControlStyle := ControlStyle - [csSetCaption];
  821.    FBitmap := nil;
  822.    Width := 11;
  823.    Height := 21;
  824.    FCascade := False;
  825.    FConnect := Nil;
  826.    FEnabled := True;      { !!!!!!!! ev. wieder zu inherited 鋘dern }
  827.    FMinValue := 0;
  828.    FMaxValue := 9;
  829.    FDrawInactive := True;
  830.    FZeroBlank := False;
  831.    FType := ltDigit;
  832.    FInactiveColor := clGreen;
  833.    FLEDColor := clLime;
  834.    FSize := ls13x21;
  835.    if (DigitCache = nil) then DigitCache := TDigitCache.Create;
  836.    ControlState := ControlState - [csCreating];
  837.    LoadNewResource;
  838.    ErrorCode := ComponentRegistered(InitCode, Self, ClassName);
  839.    if (ErrorCode <> 0) then RegisterFailed(InitCode, Self , ClassName);
  840. end;
  841. {-- TMMLEDDigit ----------------------------------------------------------}
  842. destructor TMMLedDigit.Destroy;
  843. begin
  844.    if (DigitCache <> nil) then
  845.    begin
  846.       DigitCache.RemoveBitmap(FBitmap);
  847.       if DigitCache.Empty then
  848.       begin
  849.          DigitCache.Free;
  850.          DigitCache := nil;
  851.       end;
  852.    end;
  853.    inherited Destroy;
  854. end;
  855. {-- TMMLEDDigit ----------------------------------------------------------}
  856. procedure TMMLedDigit.Notification(AComponent: TComponent; Operation: TOperation);
  857. begin
  858.    inherited Notification(AComponent, Operation);
  859.    if (Operation = opRemove) and (AComponent = FConnect) then
  860.       FConnect := Nil;
  861. end;
  862. {-- TMMLEDDigit ----------------------------------------------------------}
  863. procedure TMMLedDigit.RollForward;
  864. begin
  865.    if (csLoading in ComponentState) or
  866.       (csReading in ComponentState) then exit;
  867.    if assigned(FOnRollForward) then FOnRollForward(self);
  868. end;
  869. {-- TMMLEDDigit ----------------------------------------------------------}
  870. procedure TMMLedDigit.RollBackward;
  871. begin
  872.    if (csLoading in ComponentState) or
  873.       (csReading in ComponentState) then exit;
  874.    if assigned(FOnRollBackward) then FOnRollBackward(self);
  875. end;
  876. {-- TMMLEDDigit ----------------------------------------------------------}
  877. procedure TMMLEDDigit.SetBounds(aLeft, aTop, aWidth, aHeight: integer);
  878. Var
  879.    DigitWidth: integer;
  880. begin
  881.    if (FBitmap <> nil) then
  882.    begin
  883.       if (FType = ltDigit) then
  884.          DigitWidth  := FBitmap.Width div RC_NumDigits
  885.       else
  886.          DigitWidth  := FBitmap.Width div RC_NumSeparators;
  887.       inherited SetBounds(aLeft, aTop, DigitWidth, FBitmap.Height);
  888.    end
  889.    else inherited SetBounds(aLeft, aTop, aWidth, aHeight);
  890. end;
  891. {$IFDEF BUILD_ACTIVEX}
  892. {-- TMMLEDDigit ----------------------------------------------------------}
  893. procedure TMMLEDDigit.WMSize(var Message: TWMSize);
  894. begin
  895.    inherited;
  896.    SetBounds(Left,Top,Width,Height);
  897. end;
  898. {$ENDIF}
  899. {-- TMMLEDDigit ----------------------------------------------------------}
  900. procedure TMMLEDDigit.LoadNewResource;
  901. begin
  902.    if (csLoading in ComponentState) or
  903.       (csReading in ComponentState) or
  904.       (csCreating in ControlState)  or
  905.       (DigitCache = nil) then exit;
  906.    DigitCache.RemoveBitmap(FBitmap);
  907.    FBitmap := DigitCache.LoadBitmap(FType, FSize, FDrawInactive,
  908.                                     FLEDColor, FInactiveColor, Color);
  909.    { only a dummy call to change to the new Digit size }
  910.    if (FBitmap <> nil) then
  911.        SetBounds(Left, Top, FBitmap.Width, FBitmap.Height);
  912.    Invalidate;
  913. end;
  914. {-- TMMLEDDigit ----------------------------------------------------------}
  915. procedure TMMLEDDigit.SetSize(aValue: TMMLEDSize);
  916. begin
  917.    if (FSize <> aValue) then
  918.    begin
  919.       FSize := aValue;
  920.       LoadNewResource;
  921.    end;
  922.    {$IFDEF WIN32}
  923.    {$IFDEF TRIAL}
  924.    {$DEFINE _HACK1}
  925.    {$I MMHACK.INC}
  926.    {$ENDIF}
  927.    {$ENDIF}
  928. end;
  929. {-- TMMLEDDigit ----------------------------------------------------------}
  930. procedure TMMLedDigit.SetType(aType: TMMLEDType);
  931. begin
  932.    if (aType <> FType) then
  933.    begin
  934.       FType := aType;
  935.       LoadNewResource;
  936.    end;
  937. end;
  938. {-- TMMLEDDigit ----------------------------------------------------------}
  939. procedure TMMLedDigit.SetDrawInactive(aValue: Boolean);
  940. begin
  941.    if (FDrawInactive <> aValue) then
  942.    begin
  943.       FDrawInactive := aValue;
  944.       LoadNewResource;
  945.    end;
  946. end;
  947. {-- TMMLEDDigit ----------------------------------------------------------}
  948. procedure TMMLEDDigit.SetZeroBlank(aValue: Boolean);
  949. begin
  950.    if (FZeroBlank <> aValue) then
  951.    begin
  952.       FZeroBlank := aValue;
  953.       Invalidate;
  954.    end;
  955.    {$IFDEF WIN32}
  956.    {$IFDEF TRIAL}
  957.    {$DEFINE _HACK2}
  958.    {$I MMHACK.INC}
  959.    {$ENDIF}
  960.    {$ENDIF}
  961. end;
  962. {-- TMMLEDDigit ----------------------------------------------------------}
  963. procedure TMMLEDDigit.CMColorChanged(var Message: TMessage);
  964. begin
  965.    LoadNewResource;
  966. end;
  967. {-- TMMLEDDigit ----------------------------------------------------------}
  968. procedure TMMLedDigit.SetLEDColor(aColor: TColor);
  969. begin
  970.    if (aColor <> FLEDColor) then
  971.    begin
  972.       FLEDColor := aColor;
  973.       LoadNewResource;
  974.    end;
  975.    {$IFDEF WIN32}
  976.    {$IFDEF TRIAL}
  977.    {$DEFINE _HACK3}
  978.    {$I MMHACK.INC}
  979.    {$ENDIF}
  980.    {$ENDIF}
  981. end;
  982. {-- TMMLEDDigit ----------------------------------------------------------}
  983. procedure TMMLedDigit.SetInactiveColor(aColor: TColor);
  984. begin
  985.    if (aColor <> FInactiveColor) then
  986.    begin
  987.       FInactiveColor := aColor;
  988.       LoadNewResource;
  989.    end;
  990. end;
  991. {-- TMMLEDDigit ----------------------------------------------------------}
  992. procedure TMMLedDigit.SetCascade(aValue: Boolean);
  993. begin
  994.    if (aValue <> FCascade) then FCascade := aValue;
  995. end;
  996. {-- TMMLEDDigit ----------------------------------------------------------}
  997. procedure TMMLedDigit.SetMinValue(aValue: integer);
  998. begin
  999.    if (aValue <> FMinValue) AND (aValue >= 0) AND (aValue < 10) then
  1000.    begin
  1001.       FMinValue := aValue;
  1002.       if (FValue < FMinValue) then FValue := FMinValue;
  1003.       Invalidate;
  1004.    end;
  1005. end;
  1006. {-- TMMLEDDigit ----------------------------------------------------------}
  1007. procedure TMMLedDigit.SetMaxValue(aValue: integer);
  1008. begin
  1009.    if (aValue <> FMaxValue) AND (aValue >= 0) AND (aValue < 10) then
  1010.    begin
  1011.       FMaxValue := aValue;
  1012.       if (FValue > FMaxValue) then FValue := FMaxValue;
  1013.       Invalidate;
  1014.    end;
  1015. end;
  1016. {-- TMMLEDDigit ----------------------------------------------------------}
  1017. procedure TMMLedDigit.SetValue(aValue: Longint);
  1018. begin
  1019.    if FCascade AND assigned(FConnect) then
  1020.       TMMLEDDigit(FConnect).Value := aValue div 10;
  1021.    aValue := aValue mod 10;
  1022.    if (aValue <> FValue) AND (aValue >= FMinValue) AND (aValue <= FMaxValue) then
  1023.    begin
  1024.       FValue := aValue;
  1025.       Refresh;
  1026.    end;
  1027. end;
  1028. {-- TMMLEDDigit ----------------------------------------------------------}
  1029. procedure TMMLedDigit.Increase;
  1030. begin
  1031.    if (FValue = FMaxValue) then
  1032.    begin
  1033.       FValue := FMinValue;
  1034.       if assigned(FConnect) then TMMLEDDigit(FConnect).Increase;
  1035.       RollForward;
  1036.    end
  1037.    else inc(FValue);
  1038.    Invalidate;
  1039. end;
  1040. {-- TMMLEDDigit ----------------------------------------------------------}
  1041. procedure TMMLedDigit.Decrease;
  1042. begin
  1043.    if (FValue = FMinValue) then
  1044.    begin
  1045.       FValue := FMaxValue;
  1046.       if assigned(FConnect) then TMMLEDDigit(FConnect).Decrease;
  1047.       RollBackward;
  1048.    end
  1049.    else dec(FValue);
  1050.    Invalidate;
  1051. end;
  1052. {-- TMMLEDDigit ----------------------------------------------------------}
  1053. procedure TMMLEDDigit.SetEnabled(aValue: Boolean);
  1054. begin
  1055.    {inherited Enabled := aValue;}
  1056.    if (aValue <> FEnabled) then
  1057.    begin
  1058.       FEnabled := aValue;        { !!!!!!!! ev. wieder zu inherited 鋘dern }
  1059.       Invalidate;
  1060.    end;
  1061. end;
  1062. {-0- TMMLEDDigit ----------------------------------------------------------}
  1063. function  TMMLEDDigit.GetEnabled: Boolean;
  1064. begin
  1065.    {Result := inherited Enabled;}
  1066.    Result := FEnabled;        { !!!!!!!! ev. wieder zu inherited 鋘dern }
  1067. end;
  1068. {-- TMMLEDDigit ----------------------------------------------------------}
  1069. procedure TMMLEDDigit.SetConnect(aControl: TMMCustomLEDDigit);
  1070. begin
  1071.    if (aControl <> Self) and (FConnect <> aControl) then
  1072.    begin
  1073.       FConnect := aControl;
  1074.    end;
  1075. end;
  1076. {-- TMMLEDDigit ----------------------------------------------------------}
  1077. procedure TMMLedDigit.Loaded;
  1078. begin
  1079.    inherited Loaded;
  1080.    LoadNewResource;
  1081. end;
  1082.  
  1083. {-- TMMLEDDigit ----------------------------------------------------------}
  1084. procedure TMMLedDigit.Paint;
  1085. Var
  1086.    MemDC: HDC;
  1087.    oldBitmap: HBitmap;
  1088.    BitmapOfs: integer;
  1089.    Blank: Boolean;
  1090. begin
  1091.    if (FBitmap = nil) then exit;
  1092.    if FZeroBlank AND (FValue = 0) then Blank := True
  1093.    else Blank := False;
  1094.    if (FType = ltDigit) then
  1095.        BitmapOfs := Width * ((Ord(FValue)+1) * Ord(Enabled)) * Ord(NOT Blank)
  1096.    else
  1097.        BitmapOfs := Width * (Ord(FType) * Ord(Enabled));
  1098.    MemDC := CreateCompatibleDC(0);
  1099.    oldBitmap := SelectObject(MemDC, FBitmap.Handle);
  1100.    BitBlt(Canvas.Handle,
  1101.           0, 0, Width, Height,
  1102.           MemDC,
  1103.           BitmapOfs, 0,
  1104.           SRCCOPY);
  1105.    SelectObject(MemDC, oldBitmap);
  1106.    DeleteDC(MemDC);
  1107. end;
  1108. {== TMMLEDPanel ==========================================================}
  1109. constructor TMMLedPanel.Create (aOwner: TComponent);
  1110. begin
  1111.      inherited Create (aOwner);
  1112.      ControlStyle := ControlStyle - [csAcceptsControls,csSetCaption];
  1113.      Color := clBlack;
  1114.      FValue := 0;
  1115.      FMinValue := 0;
  1116.      FMaxValue := 100;
  1117.      FInactiveColor := clGreen;
  1118.      FLEDColor := clLime;
  1119.      FDrawInactive := True;
  1120.      FZeroBlank := False;
  1121.      FSize := ls13x21;
  1122.      FLEDSpace := 1;
  1123.      NumDigits := 2;
  1124.      ErrorCode := ComponentRegistered(InitCode, Self, ClassName);
  1125.      if (ErrorCode <> 0) then RegisterFailed(InitCode, Self , ClassName);
  1126. end;
  1127. {-- TMMLEDPanel ----------------------------------------------------------}
  1128. destructor TMMLedPanel.Destroy;
  1129. begin
  1130.      DestroyAllDigits;
  1131.      inherited Destroy;
  1132. end;
  1133. {-- TMMLEDPanel ----------------------------------------------------------}
  1134. {$IFDEF WIN32}
  1135. {$IFDEF DELPHI3}
  1136. procedure TMMLedPanel.GetChildren(Proc: TGetChildProc; Root: TComponent);
  1137. {$ELSE}
  1138. procedure TMMLedPanel.GetChildren(Proc: TGetChildProc);
  1139. {$ENDIF}
  1140. begin
  1141. end;
  1142. {$ENDIF}
  1143. {-- TMMLEDPanel ----------------------------------------------------------}
  1144. procedure TMMLEDPanel.CMColorChanged(var Message: TMessage);
  1145. {$IFDEF BUILD_ACTIVEX}
  1146. var
  1147.    i: integer;
  1148. {$ENDIF}
  1149. begin
  1150.    inherited;
  1151.    {$IFDEF BUILD_ACTIVEX}
  1152.    for i := 0 to FNumDigits-1 do FDigits[i].Color := Color;
  1153.    {$ENDIF}
  1154. end;
  1155. {-- TMMLEDPanel ----------------------------------------------------------}
  1156. procedure TMMLedPanel.Change;
  1157. begin
  1158.    if (csLoading in ComponentState) or
  1159.       (csReading in ComponentState) then exit;
  1160.    if assigned(FOnChange) then FOnChange(Self);
  1161. end;
  1162. {-- TMMLEDPanel ----------------------------------------------------------}
  1163. function TMMLedPanel.CreateDigit: TMMLedDigit;
  1164. begin
  1165.      Result := TMMLedDigit.Create(Self);
  1166.      Result.Parent := Self;
  1167.      Result.CascadeValues := True;
  1168.      Result.Enabled := Enabled;
  1169.      Result.DigitSize := FSize;
  1170.      {$IFDEF BUILD_ACTIVEX}
  1171.      Result.Color := Color;
  1172.      {$ENDIF}
  1173.      Result.InactiveColor := FInactiveColor;
  1174.      Result.LEDColor := FLEDColor;
  1175.      Result.DrawInactive := FDrawInactive;
  1176.      Result.ParentShowHint := False;
  1177.      Result.OnClick := BtnClick;
  1178.      Result.OnDblClick := BtnDblClick;
  1179.      Result.OnMouseDown := MsDown;
  1180.      Result.OnMouseMove := MsMove;
  1181.      Result.OnMouseUp := MsUp;
  1182. end;
  1183. {-- TMMLEDPanel ----------------------------------------------------------}
  1184. procedure TMMLedPanel.CreateAllDigits;
  1185. Var
  1186.    i: integer;
  1187. begin
  1188.      for i := 0 to FNumDigits-1 do
  1189.      begin
  1190.           FDigits[i] := CreateDigit;
  1191.           if i > 0 then FDigits[i-1].Connect := FDigits[i];
  1192.      end;
  1193.      FDigits[0].ZeroBlank := False;
  1194.      FDigits[0].Value := FValue;
  1195.      SetZeroBlank(FZeroBlank);
  1196. end;
  1197. {-- TMMLEDPanel ----------------------------------------------------------}
  1198. procedure TMMLedPanel.DestroyAllDigits;
  1199. Var
  1200.    i: integer;
  1201. begin
  1202.      for i := 0 to FNumDigits-1 do
  1203.      begin
  1204.           FDigits[i].Free;
  1205.           FDigits[i] := Nil;
  1206.      end;
  1207. end;
  1208. {-- TMMLEDPanel ----------------------------------------------------------}
  1209. procedure TMMLedPanel.BtnClick(Sender: TObject);
  1210. begin
  1211.      Click;
  1212. end;
  1213. {-- TMMLEDPanel ----------------------------------------------------------}
  1214. procedure TMMLedPanel.BtnDblClick(Sender: TObject);
  1215. begin
  1216.      DblClick;
  1217. end;
  1218. {-- TMMLEDPanel ----------------------------------------------------------}
  1219. procedure TMMLedPanel.MsDown(Sender: TObject; Button: TMouseButton;
  1220.                              Shift: TShiftState; X, Y: Integer);
  1221. begin
  1222.      MouseDown(Button, Shift, X, Y);
  1223. end;
  1224. {-- TMMLEDPanel ----------------------------------------------------------}
  1225. procedure TMMLedPanel.MsUp(Sender: TObject; Button: TMouseButton;
  1226.                            Shift: TShiftState; X, Y: Integer);
  1227. begin
  1228.      MouseUp(Button, Shift, X, Y);
  1229. end;
  1230. {-- TMMLEDPanel ----------------------------------------------------------}
  1231. procedure TMMLedPanel.MsMove(Sender: TObject; Shift: TShiftState;
  1232.                              X, Y: Integer);
  1233. begin
  1234.      MouseMove(Shift, X, Y);
  1235. end;
  1236. {-- TMMLEDPanel ----------------------------------------------------------}
  1237. procedure TMMLedPanel.SetBounds(aLeft, aTop, aWidth, aHeight: Integer);
  1238. var
  1239.   W, H: Integer;
  1240. begin
  1241.      W := aWidth;
  1242.      H := aHeight;
  1243.      AdjustSize (W, H);
  1244.      inherited SetBounds (aLeft, aTop, W, H);
  1245. end;
  1246. {-- TMMLEDPanel ----------------------------------------------------------}
  1247. procedure TMMLedPanel.AdjustSize (Var W, H: Integer);
  1248. Var
  1249.    i: integer;
  1250.    aLeft: integer;
  1251. begin
  1252.      if (FDigits[0] = Nil) or (csLoading in ComponentState) or
  1253.         (csReading in ComponentState) then exit;
  1254.      W := (((FDigits[0].Width + FLEDSpace) * FNumDigits) + 2 * BevelExtend) - FLEDSpace;
  1255.      H := FDigits[0].Height + 2 * BevelExtend;
  1256.      aLeft := BevelExtend;
  1257.      for i := FNumDigits-1 downTo 0 do
  1258.      begin
  1259.           FDigits[i].SetBounds (aLeft,BevelExtend, FDigits[0].Width, FDigits[0].Height);
  1260.           inc(aLeft, FDigits[0].Width + FLEDSpace);
  1261.      end;
  1262. end;
  1263. {-- TMMLEDPanel ----------------------------------------------------------}
  1264. procedure TMMLedPanel.AdjustBounds;
  1265. var
  1266.   W, H: Integer;
  1267. begin
  1268.      W := Width;
  1269.      H := Height;
  1270.      AdjustSize (W, H);
  1271.      if (W <> Width) or (H <> Height) then
  1272.         inherited SetBounds(Left, Top, W, H)
  1273.      else Invalidate;
  1274. end;
  1275. {-- TMMLEDPanel ----------------------------------------------------------}
  1276. procedure TMMLedPanel.WMSize(var Message: TWMSize);
  1277. begin
  1278.      inherited;
  1279.      AdjustBounds;
  1280.      Message.Result := 0;
  1281. end;
  1282. {-- TMMLEDPanel ----------------------------------------------------------}
  1283. procedure TMMLEDPanel.Changed;
  1284. begin
  1285.      AdjustBounds;
  1286. end;
  1287. {-- TMMLEDPanel ----------------------------------------------------------}
  1288. procedure TMMLedPanel.SetNumDigits(aValue: integer);
  1289. begin
  1290.      if (aValue <> FNumDigits) AND (aValue > 0) AND (aValue < 10) then
  1291.      begin
  1292.         DestroyAllDigits;
  1293.         FNumDigits := aValue;
  1294.         CreateAllDigits;
  1295.         AdjustBounds;
  1296.      end;
  1297. end;
  1298. {-- TMMLEDPanel ----------------------------------------------------------}
  1299. procedure TMMLedPanel.SetLEDSpace(aValue: integer);
  1300. begin
  1301.      if (aValue <> FLEDSpace) AND (aValue > 0) then
  1302.      begin
  1303.           FLEDSpace := aValue;
  1304.           AdjustBounds;
  1305.      end;
  1306. end;
  1307. {-- TMMLEDPanel ----------------------------------------------------------}
  1308. procedure TMMLedPanel.SetLEDColor(aValue: TColor);
  1309. Var
  1310.    i: integer;
  1311. begin
  1312.      if (aValue <> FLEDColor) then
  1313.      begin
  1314.           FLEDColor := aValue;
  1315.           for i := 0 to FNumDigits-1 do
  1316.               FDigits[i].LEDColor := FLEDColor;
  1317.      end;
  1318. end;
  1319. {-- TMMLEDPanel ----------------------------------------------------------}
  1320. procedure TMMLedPanel.SetInactiveColor(aValue: TColor);
  1321. Var
  1322.    i: integer;
  1323. begin
  1324.      if (aValue <> FInactiveColor) then
  1325.      begin
  1326.           FInactiveColor := aValue;
  1327.           for i := 0 to FNumDigits-1 do
  1328.               FDigits[i].InactiveColor := FInactiveColor;
  1329.      end;
  1330. end;
  1331. {-- TMMLEDPanel ----------------------------------------------------------}
  1332. procedure TMMLedPanel.SetDrawInactive(aValue: Boolean);
  1333. Var
  1334.    i: integer;
  1335. begin
  1336.      if (FDrawInactive <> aValue) then
  1337.      begin
  1338.           FDrawInactive := aValue;
  1339.           for i := 0 to FNumDigits-1 do
  1340.               FDigits[i].DrawInactive := FDrawInactive;
  1341.      end;
  1342. end;
  1343. {-- TMMLEDPanel ----------------------------------------------------------}
  1344. procedure TMMLedPanel.SetEnabled(aValue: Boolean);
  1345. Var
  1346.    i: integer;
  1347. begin
  1348.      if (aValue <> inherited Enabled) then
  1349.      begin
  1350.           inherited Enabled := aValue;
  1351.           for i := 0 to FNumDigits-1 do
  1352.               FDigits[i].Enabled := Enabled;
  1353.      end;
  1354. end;
  1355. {-- TMMLEDPanel ----------------------------------------------------------}
  1356. function TMMLEDPanel.GetEnabled: Boolean;
  1357. begin
  1358.      Result := inherited Enabled;
  1359. end;
  1360. {-- TMMLEDPanel ----------------------------------------------------------}
  1361. procedure TMMLedPanel.SetZeroBlank(aValue: Boolean);
  1362. Var
  1363.    i: Longint;
  1364.    j: integer;
  1365. begin
  1366.    FZeroBlank := aValue;
  1367.    if FZeroBlank then
  1368.    begin
  1369.       i := 10;
  1370.       j := 1;
  1371.       while (i < abs(FValue)) AND (j < FNumDigits-1) do
  1372.       begin
  1373.          FDigits[j].ZeroBlank := False;
  1374.          inc(j);
  1375.          i := i * 10;
  1376.       end;
  1377.       for j := j to FNumDigits-1 do FDigits[j].ZeroBlank := True;
  1378.    end
  1379.    else for i := 1 to FNumDigits-1 do FDigits[i].ZeroBlank := False;
  1380. end;
  1381. {-- TMMLEDPanel ----------------------------------------------------------}
  1382. procedure TMMLEDPanel.SetSize(aValue: TMMLEDSize);
  1383. Var
  1384.    i: integer;
  1385. begin
  1386.      if (FSize <> aValue) then
  1387.      begin
  1388.           FSize := aValue;
  1389.           for i := 0 to FNumDigits-1 do
  1390.               FDigits[i].DigitSize := FSize;
  1391.           AdjustBounds;
  1392.      end;
  1393. end;
  1394. {-- TMMLEDPanel ----------------------------------------------------------}
  1395. procedure TMMLedPanel.SetValue(aValue: Longint);
  1396. begin
  1397.      aValue := MinMax(aValue, FMinValue, FMaxValue);
  1398.      if (aValue <> FValue) then
  1399.      begin
  1400.           FValue := aValue;
  1401.           SetZeroBlank(FZeroBlank);
  1402.           FDigits[0].Value := abs(FValue);
  1403.           if (FValue < 0) then FDigits[FNumDigits-1].DisplayType := ltMinus
  1404.           else FDigits[FNumDigits-1].DisplayType := ltDigit;
  1405.           Change;
  1406.      end;
  1407. end;
  1408. {-- TMMLEDPanel ----------------------------------------------------------}
  1409. procedure TMMLedPanel.SetMinValue(aValue: Longint);
  1410. begin
  1411.      if (aValue <> FMinValue) then
  1412.      begin
  1413.           FMinValue := aValue;
  1414.           if (FValue < FMinValue) then Value := FMinValue;
  1415.           Invalidate;
  1416.      end;
  1417. end;
  1418. {-- TMMLEDPanel ----------------------------------------------------------}
  1419. procedure TMMLedPanel.SetMaxValue(aValue: Longint);
  1420. begin
  1421.      if (aValue <> FMaxValue) then
  1422.      begin
  1423.           FMaxValue := aValue;
  1424.           if (FValue > FMaxValue) then Value := FMaxValue;
  1425.           Invalidate;
  1426.      end;
  1427. end;
  1428. {-- TMMLEDPanel ----------------------------------------------------------}
  1429. procedure TMMLedPanel.Loaded;
  1430. begin
  1431.      inherited Loaded;
  1432.      AdjustBounds;
  1433. end;
  1434. {== TMMLEDSpin ===========================================================}
  1435. constructor TMMLEDSpin.Create(AOwner: TComponent);
  1436. begin
  1437.      inherited Create(AOwner);
  1438.      ControlStyle := ControlStyle - [csSetCaption];
  1439.      FButton := TMMSpinButton.Create(Self);
  1440.      FLEDPanel := TMMLEDPanel.Create(Self);
  1441.      FLEDPanel.Parent := Self;
  1442.      FLEDPanel.TabStop := False;
  1443.      FLEDPanel.OnClick := BtnClick;
  1444.      FLEDPanel.OnDblClick := BtnDblClick;
  1445.      FLEDPanel.OnMouseDown := MsDown;
  1446.      FLEDPanel.OnMouseMove := MsMove;
  1447.      FLEDPanel.OnMouseUp := MsUp;
  1448.      FLEDPanel.OnChange := ChildChange;
  1449.      FLEDPanel.Color := clBlack;
  1450.      FLEDPanel.ParentShowHint := False;
  1451.      FButton.Parent := Self;
  1452.      FButton.FocusControl := Self;
  1453.      FButton.Bevel.OnChange := GetChanged;
  1454.      FButton.TabOrder := 0;
  1455.      FButton.OnUpClick := UpClick;
  1456.      FButton.OnDownClick := DownClick;
  1457.      FButton.OnChange := ChildChange;
  1458.      FButton.ParentShowHint := False;
  1459.      ParentColor := True;
  1460.      TabStop := True;
  1461.      FSpace := 2;
  1462.      FLEDPanel.OnResize := GetChanged;
  1463.      AdjustBounds;
  1464.      ErrorCode := ComponentRegistered(InitCode, Self, ClassName);
  1465.      if (ErrorCode <> 0) then RegisterFailed(InitCode, Self , ClassName);
  1466. end;
  1467. {-- TMMLEDSpin -----------------------------------------------------------}
  1468. destructor TMMLEDSpin.Destroy;
  1469. begin
  1470.      FLEDPanel.OnResize := Nil;
  1471.      FLEDPanel.Free;
  1472.      FButton.Free;
  1473.      inherited Destroy;
  1474. end;
  1475. {-- TMMLEDSpin -----------------------------------------------------------}
  1476. {$IFDEF WIN32}
  1477. {$IFDEF DELPHI3}
  1478. procedure TMMLEDSpin.GetChildren(Proc: TGetChildProc; Root: TComponent);
  1479. {$ELSE}
  1480. procedure TMMLEDSpin.GetChildren(Proc: TGetChildProc);
  1481. {$ENDIF}
  1482. begin
  1483. end;
  1484. {$ENDIF}
  1485. {-- TMMLEDSpin -----------------------------------------------------------}
  1486. procedure TMMLEDSpin.WMSetFocus(var Message: TWMSetFocus);
  1487. begin
  1488.      if TabStop AND FButton.CanFocus AND (GetFocus <> FButton.Handle) then
  1489.         FButton.SetFocus;
  1490.      Message.Result := 0;
  1491. end;
  1492. {-- TMMLEDSpin -----------------------------------------------------------}
  1493. procedure TMMLEDSpin.Click;
  1494. begin
  1495.      if TabStop AND FButton.CanFocus AND (GetFocus <> FButton.Handle) then
  1496.         FButton.SetFocus;
  1497.      inherited Click;
  1498. end;
  1499. {-- TMMLEDSpin -----------------------------------------------------------}
  1500. procedure TMMLEDSpin.BtnClick(Sender: TObject);
  1501. begin
  1502.      Click;
  1503. end;
  1504. {-- TMMLEDSpin -----------------------------------------------------------}
  1505. procedure TMMLEDSpin.BtnDblClick(Sender: TObject);
  1506. begin
  1507.      DblClick;
  1508. end;
  1509. {-- TMMLEDSpin -----------------------------------------------------------}
  1510. procedure TMMLEDSpin.MsDown(Sender: TObject; Button: TMouseButton;
  1511.                             Shift: TShiftState; X, Y: Integer);
  1512. begin
  1513.      MouseDown(Button, Shift, X, Y);
  1514. end;
  1515. {-- TMMLEDSpin -----------------------------------------------------------}
  1516. procedure TMMLEDSpin.MsUp(Sender: TObject; Button: TMouseButton;
  1517.                           Shift: TShiftState; X, Y: Integer);
  1518. begin
  1519.      MouseUp(Button, Shift, X, Y);
  1520. end;
  1521. {-- TMMLEDSpin -----------------------------------------------------------}
  1522. procedure TMMLEDSpin.MsMove(Sender: TObject; Shift: TShiftState;
  1523.                             X, Y: Integer);
  1524. begin
  1525.      MouseMove(Shift, X, Y);
  1526. end;
  1527. {-- TMMLEDSpin -----------------------------------------------------------}
  1528. procedure TMMLEDSpin.SetTabStop(aValue: Boolean);
  1529. begin
  1530.      inherited TabStop := aValue;
  1531.      FButton.TabStop := aValue;
  1532. end;
  1533. {-- TMMLEDSpin -----------------------------------------------------------}
  1534. function TMMLEDSpin.GetTabStop: Boolean;
  1535. begin
  1536.      Result := inherited TabStop;
  1537. end;
  1538. {-- TMMLEDSpin -----------------------------------------------------------}
  1539. procedure TMMLEDSpin.AdjustSize (var W, H: integer);
  1540. begin
  1541.      FButton.Height := 1;       { reset the SpinButton size standard }
  1542.      FButton.Width  := 1;
  1543.      W := FLEDPanel.Width + FButton.Width + FSpace;
  1544.      H := Max(FButton.Height,FLEDPanel.Height);
  1545.      FButton.SetBounds(W-FButton.Width,0,FButton.Width,H);
  1546.      FLEDPanel.SetBounds(0,H-FLEDPanel.Height,FLEDPanel.Width,FLEDPanel.Height);
  1547. end;
  1548. {-- TMMLEDSpin -----------------------------------------------------------}
  1549. procedure TMMLEDSpin.AdjustBounds;
  1550. var
  1551.   W, H: Integer;
  1552. begin
  1553.      W := Width;
  1554.      H := Height;
  1555.      AdjustSize (W, H);
  1556.      if (W <> Width) or (H <> Height) then
  1557.         inherited SetBounds(Left, Top, W, H)
  1558.      else Invalidate;
  1559. end;
  1560. {-- TMMLEDSpin -----------------------------------------------------------}
  1561. procedure TMMLEDSpin.WMSize(var Message: TWMSize);
  1562. begin
  1563.      inherited;
  1564.      AdjustBounds;
  1565.      Message.Result := 0;
  1566. end;
  1567. {-- TMMLEDSpin -----------------------------------------------------------}
  1568. procedure TMMLedSpin.SetBounds(aLeft, aTop, aWidth, aHeight: Integer);
  1569. var
  1570.   W, H: Integer;
  1571. begin
  1572.      W := aWidth;
  1573.      H := aHeight;
  1574.      AdjustSize (W, H);
  1575.      inherited SetBounds (aLeft, aTop, W, H);
  1576. end;
  1577. {-- TMMLEDSpin -----------------------------------------------------------}
  1578. procedure TMMLEDSpin.GetChanged;
  1579. begin
  1580.      AdjustBounds;
  1581. end;
  1582. {-- TMMLEDSpin -----------------------------------------------------------}
  1583. procedure TMMLEDSpin.UpClick(Sender: TObject);
  1584. begin
  1585.      if Assigned(FOnUpClick) then FOnUpClick(Self);
  1586. end;
  1587. {-- TMMLEDSpin -----------------------------------------------------------}
  1588. procedure TMMLEDSpin.DownClick(Sender: TObject);
  1589. begin
  1590.      if Assigned(FOnDownClick) then FOnDownClick(Self);
  1591. end;
  1592. {-- TMMLEDSpin -----------------------------------------------------------}
  1593. procedure TMMLEDSpin.ChildChange(Sender: TObject);
  1594. begin
  1595.    if (csLoading in ComponentState) or
  1596.       (csReading in ComponentState) then exit;
  1597.    if Sender = FButton then
  1598.       Value := FButton.Value;
  1599. end;
  1600. {-- TMMLEDSpin -----------------------------------------------------------}
  1601. procedure TMMLEDSpin.Change;
  1602. begin
  1603.    if (csLoading in ComponentState) or
  1604.       (csReading in ComponentState) then exit;
  1605.    if assigned(FOnChange) then FOnChange(Self);
  1606. end;
  1607. {-- TMMLEDSpin -----------------------------------------------------------}
  1608. procedure TMMLEDSpin.SetSpace(aValue: integer);
  1609. begin
  1610.      if (aValue <> FSpace) then
  1611.      begin
  1612.           FSpace := aValue;
  1613.           AdjustBounds;
  1614.      end;
  1615. end;
  1616. {-- TMMLEDSpin -----------------------------------------------------------}
  1617. procedure TMMLEDSpin.SetLEDBevel(aBevel: TMMBevel);
  1618. begin
  1619.      FLEDPanel.Bevel := aBevel;
  1620. end;
  1621. {-- TMMLEDSpin -----------------------------------------------------------}
  1622. function TMMLEDSpin.GetLEDBevel: TMMBevel;
  1623. begin
  1624.      Result := FLEDPanel.Bevel;
  1625. end;
  1626. {-- TMMLEDSpin -----------------------------------------------------------}
  1627. procedure TMMLEDSpin.SetNumDigits(aValue: integer);
  1628. begin
  1629.      FLEDPanel.NumDigits := aValue;
  1630. end;
  1631. {-- TMMLEDSpin -----------------------------------------------------------}
  1632. function  TMMLEDSpin.GetNumDigits: integer;
  1633. begin
  1634.      Result := FLEDPanel.NumDigits;
  1635. end;
  1636. {-- TMMLEDSpin -----------------------------------------------------------}
  1637. procedure TMMLEDSpin.SetLEDSpace(aValue: integer);
  1638. begin
  1639.      FLEDPanel.LEDSpace := aValue;
  1640. end;
  1641. {-- TMMLEDSpin -----------------------------------------------------------}
  1642. function  TMMLEDSpin.GetLEDSpace: integer;
  1643. begin
  1644.      Result := FLEDPanel.LEDSpace;
  1645. end;
  1646. {-- TMMLEDSpin -----------------------------------------------------------}
  1647. procedure TMMLedSpin.SetColor(aValue: TColor);
  1648. begin
  1649.      FLEDPanel.Color := aValue;
  1650. end;
  1651. {-- TMMLEDSpin -----------------------------------------------------------}
  1652. function TMMLEDSpin.GetColor: TColor;
  1653. begin
  1654.      Result := FLEDPanel.Color;
  1655. end;
  1656. {-- TMMLEDSpin -----------------------------------------------------------}
  1657. procedure TMMLEDSpin.SetLEDColor(aValue: TColor);
  1658. begin
  1659.      FLEDPanel.LEDColor := aValue;
  1660. end;
  1661. {-- TMMLEDSpin -----------------------------------------------------------}
  1662. function  TMMLEDSpin.GetLEDColor: TColor;
  1663. begin
  1664.      Result := FLEDPanel.LEDColor;
  1665. end;
  1666. {-- TMMLEDSpin -----------------------------------------------------------}
  1667. procedure TMMLEDSpin.SetInactiveColor(aValue: TColor);
  1668. begin
  1669.      FLEDPanel.InactiveColor := aValue;
  1670. end;
  1671. {-- TMMLEDSpin -----------------------------------------------------------}
  1672. function  TMMLEDSpin.GetInactiveColor: TColor;
  1673. begin
  1674.      Result := FLEDPanel.InactiveColor;
  1675. end;
  1676. {-- TMMLEDSpin -----------------------------------------------------------}
  1677. procedure TMMLEDSpin.SetDrawInactive(aValue: Boolean);
  1678. begin
  1679.      FLEDPanel.DrawInactive := aValue;
  1680. end;
  1681. {-- TMMLEDSpin -----------------------------------------------------------}
  1682. function  TMMLEDSpin.GetDrawInactive: Boolean;
  1683. begin
  1684.      Result := FLEDPanel.DrawInactive;
  1685. end;
  1686. {-- TMMLEDSpin -----------------------------------------------------------}
  1687. procedure TMMLEDSpin.SetEnabled(aValue: Boolean);
  1688. begin
  1689.      inherited Enabled := aValue;
  1690.      FButton.Enabled := aValue;
  1691.      FLEDPanel.Enabled := aValue;
  1692. end;
  1693. {-- TMMLEDSpin -----------------------------------------------------------}
  1694. function  TMMLEDSpin.GetEnabled: Boolean;
  1695. begin
  1696.      Result := inherited Enabled;
  1697. end;
  1698. {-- TMMLEDSpin -----------------------------------------------------------}
  1699. procedure TMMLEDSpin.SetSize(aValue: TMMLEDSize);
  1700. begin
  1701.      FLEDPanel.DigitSize := aValue;
  1702. end;
  1703. {-- TMMLEDSpin -----------------------------------------------------------}
  1704. function  TMMLEDSpin.GetSize: TMMLEDSize;
  1705. begin
  1706.      Result := FLEDPanel.DigitSize;
  1707. end;
  1708. {-- TMMLEDSpin -----------------------------------------------------------}
  1709. procedure TMMLEDSpin.SetZeroBlank(aValue: Boolean);
  1710. begin
  1711.      FLEDPanel.ZeroBlank := aValue;
  1712. end;
  1713. {-- TMMLEDSpin -----------------------------------------------------------}
  1714. function  TMMLEDSpin.GetZeroBlank: Boolean;
  1715. begin
  1716.      Result := FLEDPanel.ZeroBlank;
  1717. end;
  1718. {-- TMMLEDSpin -----------------------------------------------------------}
  1719. procedure TMMLEDSpin.SetIncrement(aValue: Longint);
  1720. begin
  1721.      FButton.Increment := aValue;
  1722. end;
  1723. {-- TMMLEDSpin -----------------------------------------------------------}
  1724. function TMMLEDSpin.GetIncrement: Longint;
  1725. begin
  1726.      Result := FButton.Increment;
  1727. end;
  1728. {-- TMMLEDSpin -----------------------------------------------------------}
  1729. procedure TMMLEDSpin.SetUpGlyph(Value: TBitmap);
  1730. begin
  1731.      FButton.UpGlyph := Value;
  1732. end;
  1733. {-- TMMLEDSpin -----------------------------------------------------------}
  1734. function TMMLEDSpin.GetUpGlyph: TBitmap;
  1735. begin
  1736.      Result := FButton.UpGlyph;
  1737. end;
  1738. {-- TMMLEDSpin -----------------------------------------------------------}
  1739. procedure TMMLEDSpin.SetDownGlyph(Value: TBitmap);
  1740. begin
  1741.      FButton.DownGlyph := Value;
  1742. end;
  1743. {-- TMMLEDSpin -----------------------------------------------------------}
  1744. function TMMLEDSpin.GetDownGlyph: TBitmap;
  1745. begin
  1746.      Result := FButton.DownGlyph;
  1747. end;
  1748. {-- TMMLEDSpin -----------------------------------------------------------}
  1749. procedure TMMLEDSpin.SetDownNumGlyphs(Value: TNumGlyphs);
  1750. begin
  1751.      FButton.DownNumGlyphs := Value;
  1752. end;
  1753. {-- TMMLEDSpin -----------------------------------------------------------}
  1754. function TMMLEDSpin.GetDownNumGlyphs: TNumGlyphs;
  1755. begin
  1756.      Result := FButton.DownNumGlyphs;
  1757. end;
  1758. {-- TMMLEDSpin -----------------------------------------------------------}
  1759. procedure TMMLEDSpin.SetUpNumGlyphs(Value: TNumGlyphs);
  1760. begin
  1761.      FButton.UpNumGlyphs := Value;
  1762. end;
  1763. {-- TMMLEDSpin -----------------------------------------------------------}
  1764. function TMMLEDSpin.GetUpNumGlyphs: TNumGlyphs;
  1765. begin
  1766.      Result := FButton.UpNumGlyphs;
  1767. end;
  1768. {-- TMMLEDSpin -----------------------------------------------------------}
  1769. procedure TMMLEDSpin.SetButtonFace(Value: Boolean);
  1770. begin
  1771.    if (Value <> FButton.ButtonFace) then
  1772.    begin
  1773.       FButton.ButtonFace := Value;
  1774.       AdjustBounds;
  1775.    end;
  1776. end;
  1777. {-- TMMLEDSpin -----------------------------------------------------------}
  1778. function TMMLEDSpin.GetButtonFace: Boolean;
  1779. begin
  1780.    Result := FButton.ButtonFace;
  1781. end;
  1782. {-- TMMLEDSpin -----------------------------------------------------------}
  1783. procedure TMMLEDSpin.SetMiddleButton(Value: Boolean);
  1784. begin
  1785.    if (Value <> FButton.MiddleButton) then
  1786.    begin
  1787.       FButton.MiddleButton := Value;
  1788.       AdjustBounds;
  1789.    end;
  1790. end;
  1791. {-- TMMLEDSpin -----------------------------------------------------------}
  1792. function TMMLEDSpin.GetMiddleButton: Boolean;
  1793. begin
  1794.    Result := FButton.MiddleButton;
  1795. end;
  1796. {-- TMMLEDSpin -----------------------------------------------------------}
  1797. procedure TMMLEDSpin.SetSpinBevel(aValue: TMMBevel);
  1798. begin
  1799.      FButton.Bevel := aValue;
  1800. end;
  1801. {-- TMMLEDSpin -----------------------------------------------------------}
  1802. function TMMLEDSpin.GetSpinBevel: TMMBevel;
  1803. begin
  1804.      Result := FButton.Bevel;
  1805. end;
  1806. {-- TMMLEDSpin -----------------------------------------------------------}
  1807. procedure TMMLEDSpin.SetMinValue(aValue: Longint);
  1808. begin
  1809.      FLEDPanel.MinValue := aValue;
  1810.      FButton.MinValue := aValue;
  1811. end;
  1812. {-- TMMLEDSpin -----------------------------------------------------------}
  1813. function  TMMLEDSpin.GetMinValue: Longint;
  1814. begin
  1815.      Result := FLEDPanel.MinValue;
  1816. end;
  1817. {-- TMMLEDSpin -----------------------------------------------------------}
  1818. procedure TMMLEDSpin.SetMaxValue(aValue: Longint);
  1819. begin
  1820.      FLEDPanel.MaxValue := aValue;
  1821.      FButton.MaxValue := aValue;
  1822. end;
  1823. {-- TMMLEDSpin -----------------------------------------------------------}
  1824. function TMMLEDSpin.GetMaxValue: Longint;
  1825. begin
  1826.      Result := FLEDPanel.MaxValue;
  1827. end;
  1828. {-- TMMLEDSpin -----------------------------------------------------------}
  1829. procedure TMMLEDSpin.SetValue(aValue: Longint);
  1830. begin
  1831.      if (aValue <> FLEDPanel.Value) And Enabled then
  1832.      begin
  1833.         aValue := MinMax(aValue, MinValue, MaxValue);
  1834.         FLEDPanel.Value := aValue;
  1835.         FButton.Value := aValue;
  1836.         Change;
  1837.      end;
  1838. end;
  1839. {-- TMMLEDSpin -----------------------------------------------------------}
  1840. function TMMLEDSpin.GetValue: Longint;
  1841. begin
  1842.      Result := FLEDPanel.Value;
  1843. end;
  1844. end.