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

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: 15.11.98 - 03:12:16 $                                        =}
  24. {========================================================================}
  25. Unit MMEGauge;
  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.     Menus,
  43.     MMUtils,
  44.     MMString,
  45.     MMObj,
  46.     MMMulDiv,
  47.     MMDIBCv;
  48. const
  49.     VALUERANGE      = 100; { Range for SetValue/GetValue, here 0..100%    }
  50. type
  51.     TMMLEDGaugeKind      = (gkHorizontal, gkVertical);
  52.     TMMLEDGaugeDirection = (dirNormal, dirReversed);
  53.     TMMLEDDrawBar        = procedure(Sender: TObject; DIB: TMMDIBCanvas;
  54.                                      Rect: TRect; nSpots: integer) of object;
  55.     {-- TMMLEDGauge ---------------------------------------------------------}
  56.     TMMLEDGauge = class(TMMDIBGraphicControl)
  57.     private
  58.       FBarDIB       : TMMDIBCanvas; { bitmap for inactive spots            }
  59.       FKind         : TMMLEDGaugeKind; { draw horizontal / vertikal bars      }
  60.       FBar1Color    : TColor;       { Farbe f黵 die Punkte im 1. Abschnitt }
  61.       FBar2Color    : TColor;       { Farbe f黵 die Punkte im 2. Abschnitt }
  62.       FBar3Color    : TColor;       { Farbe f黵 die Punkte im 3. Abschnitt }
  63.       FInact1Color  : TColor;       { foreColor for inactive spots 1       }
  64.       FInact2Color  : TColor;       { foreColor for inactive spots 2       }
  65.       FInact3Color  : TColor;       { foreColor for inactive spots 3       }
  66.       FInactiveDoted: Boolean;      { draw the inactive spots doted        }
  67.       FActiveDoted  : Boolean;      { draw the active spots doted          }
  68.       FPoint1       : integer;      { Schwelle von 1. zu 2. Abschnitt %    }
  69.       FPoint2       : integer;      { Schwelle von 2. zu 3. Abschnitt %    }
  70.       FPoint1Spot   : integer;      { on which spot begins next color      }
  71.       FPoint2Spot   : integer;      { on which spot begins next color      }
  72.       FSpotSpace    : integer;      { Horizontal space between spots       }
  73.       FSpotWidth    : integer;      { the spot width in pixel              }
  74.       FFirstSpace   : integer;      { the space before the first spot      }
  75.       FNumSpots     : integer;      { number of Spots                      }
  76.       FDirection    : TMMLEDGaugeDirection;{ draw direction, forward/backward }
  77.       FProgress     : integer;
  78.       FData         : integer;      { the current data for the gauge       }
  79.       FWidth        : integer;      { calculated width without border      }
  80.       FHeight       : integer;      { calculated height without border     }
  81.       FClientRect   : TRect;        { calculated beveled Rect              }
  82.       FTag2         : integer;
  83.       FOnDrawBar    : TMMLEDDrawBar;
  84.       procedure AdjustSize(var W, H: Integer);
  85.       procedure CalcNumSpots;
  86.       procedure DrawInactiveSpots;
  87.       procedure DrawBarHorizontal(DIB: TMMDIBCanvas; nSpots: integer);
  88.       procedure DrawBarVertical(DIB: TMMDIBCanvas; nSpots: integer);
  89.       procedure DrawBar(Dummy: Boolean);
  90.       procedure SetOnDrawBar(aValue: TMMLEDDrawBar);
  91.       procedure SetKind(aValue: TMMLEDGaugeKind);
  92.       Procedure SetColors(Index: Integer; aValue: TColor);
  93.       procedure SetPoints(Index, aValue: integer);
  94.       procedure SetSpotSpace(aValue: integer);
  95.       procedure SetSpotWidth(aValue: integer);
  96.       procedure SetDirection(aValue: TMMLEDGaugeDirection);
  97.       procedure SetInactiveDoted(aValue: Boolean);
  98.       procedure SetActiveDoted(aValue: Boolean);
  99.       procedure SetProgress(aValue: integer);
  100.       procedure CMColorChanged(var Message: TMessage); message CM_COLORCHANGED;
  101.     protected
  102.       procedure SetBPP(aValue: integer); override;
  103.       procedure Paint; override;
  104.       procedure Loaded; override;
  105.       procedure SetBounds(aLeft, aTop, aWidth, aHeight: integer); override;
  106.       procedure Changed; override;
  107.     public
  108.       constructor Create(AOwner: TComponent); override;
  109.       destructor  Destroy; override;
  110.       property    NumSpots: integer read FNumSpots;
  111.       property    Point1Spot: integer read FPoint1Spot;
  112.       property    Point2Spot: integer read FPoint2Spot;
  113.     published
  114.       property OnClick;
  115.       property OnDblClick;
  116.       property OnMouseDown;
  117.       property OnMouseMove;
  118.       property OnMouseUp;
  119.       property OnDragDrop;
  120.       property OnDragOver;
  121.       property OnEndDrag;
  122.       property OnStartDrag;
  123.       property OnDrawBar: TMMLEDDrawBar read FOnDrawBar write SetOnDrawBar;
  124.       property Align;
  125.       property Bevel;
  126.       property PopupMenu;
  127.       property ParentShowHint;
  128.       property ShowHint;
  129.       property Visible;
  130.       property Enabled;
  131.       property DragCursor;
  132.       property ParentColor default False;
  133.       property Color default clBlack;
  134.       property Kind: TMMLEDGaugeKind read FKind write SetKind default gkHorizontal;
  135.       property Height default 17;
  136.       property Width default 200;
  137.       property SpotSpace: integer read FSpotSpace write SetSpotSpace default 1;
  138.       property SpotWidth: integer read FSpotWidth write SetSpotWidth default 1;
  139.       property Bar1Color: TColor index 0 read FBar1Color write SetColors default clAqua;
  140.       property Bar2Color: TColor index 1 read FBar2Color write SetColors default clAqua;
  141.       property Bar3Color: TColor index 2 read FBar3Color write SetColors default clRed;
  142.       property Inactive1Color: TColor index 3 read FInact1Color write SetColors default clTeal;
  143.       property Inactive2Color: TColor index 4 read FInact2Color write SetColors default clTeal;
  144.       property Inactive3Color: TColor index 5 read FInact3Color write SetColors default clMaroon;
  145.       property InactiveDoted: Boolean read FInactiveDoted write SetInactiveDoted default False;
  146.       property ActiveDoted: Boolean read FActiveDoted write SetActiveDoted default False;
  147.       property Point1: integer index 0 Read FPoint1 write SetPoints default 50;
  148.       property Point2: integer index 1 Read FPoint2 write SetPoints default 85;
  149.       property Direction: TMMLEDGaugeDirection read FDirection write SetDirection default dirNormal;
  150.       property Progress: integer read FProgress write SetProgress default 0;
  151.       property Tag2: integer read FTag2 write FTag2;
  152.     end;
  153. implementation
  154. {-- TMMLEDGauge ------------------------------------------------------}
  155. constructor TMMLEDGauge.Create(AOwner: TComponent);
  156. begin
  157.    inherited Create(AOwner);
  158.    FBarDIB := TMMDIBCanvas.Create(Self);
  159.    FKind := gkHorizontal;
  160.    FDirection := dirNormal;
  161.    FBar1Color := clAqua;
  162.    FBar2Color := clAqua;
  163.    FBar3Color := clRed;
  164.    FInact1Color := clTeal;
  165.    FInact2Color := clTeal;
  166.    FInact3Color := clMaroon;
  167.    FInactiveDoted := False;
  168.    FActiveDoted := False;
  169.    FSpotSpace := 1;
  170.    FSpotWidth := 1;
  171.    FProgress  := 0;
  172.    FData := 0;
  173.    FPoint1 := 50;
  174.    FPoint2 := 85;
  175.    Height := 17;
  176.    Width := 200;
  177.    Color := clBlack;
  178.    ErrorCode := ComponentRegistered(InitCode, Self, ClassName);
  179.    if (ErrorCode <> 0) then RegisterFailed(InitCode, Self , ClassName);
  180. end;
  181. {-- TMMLEDGauge ------------------------------------------------------}
  182. Destructor TMMLEDGauge.Destroy;
  183. begin
  184.    FBarDIB.Free;
  185.    inherited Destroy;
  186. end;
  187. {-- TMMLEDGauge ------------------------------------------------------}
  188. procedure TMMLEDGauge.SetKind(aValue: TMMLEDGaugeKind);
  189. var
  190.    Temp: integer;
  191. begin
  192.    if (aValue <> FKind) then
  193.    begin
  194.       FKind := aValue;
  195.       if ((FKind = gkHorizontal) and (Height > Width)) or
  196.          ((FKind = gkVertical) and (Height < Width)) then
  197.       begin
  198.          Temp := Width;
  199.          Width := Height;                        { swap Width and Height }
  200.          Height := Temp;
  201.       end;
  202.       Changed;                                    { recalc the dimension }
  203.       Invalidate;
  204.    end;
  205. end;
  206. {-- TMMLEDGauge ------------------------------------------------------}
  207. procedure TMMLEDGauge.SetDirection(aValue: TMMLEDGaugeDirection);
  208. Begin
  209.    if (aValue <> FDirection) then
  210.    begin
  211.       FDirection := aValue;
  212.       DrawInactiveSpots;
  213.       Invalidate;
  214.    end;
  215. end;
  216. {-- TMMLEDGauge ------------------------------------------------------}
  217. procedure TMMLEDGauge.SetSpotSpace(aValue: integer);
  218. begin
  219.    aValue := MinMax(aValue, 0, 10);
  220.    if (aValue <> FSpotSpace) then
  221.    begin
  222.       FSpotSpace := aValue;
  223.       CalcNumSpots;
  224.       Invalidate;
  225.    end;
  226.    {$IFDEF WIN32}
  227.    {$IFDEF TRIAL}
  228.    {$DEFINE _HACK3}
  229.    {$I MMHACK.INC}
  230.    {$ENDIF}
  231.    {$ENDIF}
  232. end;
  233. {-- TMMLEDGauge ------------------------------------------------------}
  234. procedure TMMLEDGauge.SetSpotWidth(aValue: integer);
  235. Var
  236.    Temp: integer;
  237. begin
  238.    Temp := 0;
  239.    case FKind of
  240.       gkHorizontal: Temp := FWidth div 3;
  241.       gkVertical  : Temp := FHeight div 3;
  242.    end;
  243.    aValue := MinMax(aValue, 1, Temp);
  244.    if (aValue <> FSpotWidth) then
  245.    begin
  246.       FSpotWidth := aValue;
  247.       CalcNumSpots;
  248.       Invalidate;
  249.    end;
  250. end;
  251. {-- TMMLEDGauge ------------------------------------------------------}
  252. procedure TMMLEDGauge.CalcNumSpots;
  253. begin
  254.    FSpotWidth := Max(FSpotWidth,1);
  255.    if (FKind = gkHorizontal) then
  256.    begin
  257.       FNumSpots := (FWidth+FSpotSpace) div (FSpotWidth+FSpotSpace);
  258.       FNumSpots := Max(FNumSpots,1);          { fix div by zerro !!! }
  259.       FFirstSpace := (FWidth-(FNumSpots*(FSpotWidth+FSpotSpace)-FSpotSpace)) div 2;
  260.    end
  261.    else
  262.    begin
  263.       FNumSpots := (FHeight+FSpotSpace)div(FSpotWidth+FSpotSpace);
  264.       FNumSpots := Max(FNumSpots,1);           { fix div by zerro !!! }
  265.       FFirstSpace := (FHeight-(FNumSpots*(FSpotWidth+FSpotSpace)-FSpotSpace)) div 2;
  266.    end;
  267.    { calc the spot on which the next color starts }
  268.    FPoint1Spot := (FPoint1 * FNumSpots) div 100;
  269.    FPoint2Spot := (FPoint2 * FNumSpots) div 100;
  270.    { redraw background }
  271.    DrawInactiveSpots;
  272. end;
  273. {-- TMMLEDGauge ------------------------------------------------------}
  274. procedure TMMLEDGauge.AdjustSize(var W, H: Integer);
  275. begin
  276.    if not (csLoading in ComponentState) then
  277.    begin
  278.       W := Max(W,2*BevelExtend+2);
  279.       H := Max(H,2*BevelExtend);
  280.    end;
  281. end;
  282. {-- TMMLEDGauge ------------------------------------------------------}
  283. procedure TMMLEDGauge.SetBounds(aLeft, aTop, aWidth, aHeight: integer);
  284. var
  285.   W, H: Integer;
  286. begin
  287.    W := aWidth;
  288.    H := aHeight;
  289.    AdjustSize (W, H);
  290.    inherited SetBounds(aLeft, aTop, W, H);
  291.    Changed;
  292. end;
  293. {-- TMMLEDGauge ------------------------------------------------------}
  294. procedure TMMLEDGauge.Loaded;
  295. var
  296.   W, H: Integer;
  297. begin
  298.    inherited Loaded;
  299.    W := Width;
  300.    H := Height;
  301.    AdjustSize(W, H);
  302.    Width := W;
  303.    Height:= H;
  304.    DrawInactiveSpots;
  305.    Invalidate;
  306. end;
  307. {-- TMMLEDGauge ------------------------------------------------------}
  308. procedure TMMLEDGauge.Changed;
  309. begin
  310.    FClientRect := BeveledRect;
  311.    FWidth  := Max(FClientRect.Right - FClientRect.Left,1);
  312.    FHeight := Max(FClientRect.Bottom - FClientRect.Top,1);
  313.    DIBCanvas.SetBounds(0,0,FWidth,FHeight);
  314.    FBarDIB.SetBounds(0,0,FWidth,FHeight);
  315.    { recalculate the number of spots }
  316.    CalcNumSpots;
  317.    inherited Changed;
  318. end;
  319. {-- TMMLEDGauge ------------------------------------------------------}
  320. procedure TMMLEDGauge.SetPoints(Index, aValue: integer);
  321. begin
  322.    aValue := MinMax(aValue, 1, 100);
  323.    case Index of
  324.      0: if FPoint1 = aValue then exit else FPoint1 := aValue;
  325.      1: if FPoint2 = aValue then exit else FPoint2 := aValue;
  326.    end;
  327.    CalcNumSpots;
  328.    Invalidate;
  329. end;
  330. {-- TMMLEDGauge ------------------------------------------------------}
  331. procedure TMMLEDGauge.SetColors(Index:Integer; aValue: TColor);
  332. begin
  333.    case Index of
  334.       0: if FBar1Color = aValue then exit else FBar1Color := aValue;
  335.       1: if FBar2Color = aValue then exit else FBar2Color := aValue;
  336.       2: if FBar3Color = aValue then exit else FBar3Color := aValue;
  337.       3: if FInact1Color = aValue then exit else FInact1Color := aValue;
  338.       4: if FInact2Color = aValue then exit else FInact2Color := aValue;
  339.       5: if FInact3Color = aValue then exit else FInact3Color := aValue;
  340.    end;
  341.    DrawInactiveSpots;
  342.    Invalidate;
  343. end;
  344. {-- TMMLEDGauge ------------------------------------------------------}
  345. procedure TMMLEDGauge.SetInactiveDoted(aValue: Boolean);
  346. begin
  347.    if (aValue <> FInactiveDoted) then
  348.    begin
  349.       FInactiveDoted := aValue;
  350.       DrawInactiveSpots;
  351.       Invalidate;
  352.    end;
  353. end;
  354. {-- TMMLEDGauge ------------------------------------------------------}
  355. procedure TMMLEDGauge.SetActiveDoted(aValue: Boolean);
  356. begin
  357.    if (aValue <> FActiveDoted) then
  358.    begin
  359.       FActiveDoted := aValue;
  360.       DrawInactiveSpots;
  361.       Invalidate;
  362.    end;
  363. end;
  364. {-- TMMLEDGauge ------------------------------------------------------}
  365. procedure TMMLEDGauge.CMColorChanged(var Message: TMessage);
  366. begin
  367.    DrawInactiveSpots;
  368.    inherited;
  369. end;
  370. {-- TMMLEDGauge ------------------------------------------------------}
  371. procedure TMMLEDGauge.SetProgress(aValue: integer);
  372. begin
  373.    if (aValue <> FProgress) then
  374.    begin
  375.       FProgress := MinMax(aValue,0,VALUERANGE);
  376.       FData     := Min(MulDiv32(FProgress,FNumSpots,VALUERANGE),FNumSpots);
  377.       if (csDesigning in ComponentState) then
  378.           Refresh
  379.       else
  380.           FastDraw(DrawBar,False);
  381.    end;
  382. end;
  383. {-- TMMLEDGauge ------------------------------------------------------}
  384. procedure TMMLEDGauge.DrawBarHorizontal(DIB: TMMDIBCanvas; nSpots: integer);
  385. Var
  386.    i: integer;
  387.    SpotRect: TRect;                                 { Spot draw rectangle }
  388.    SpotInc: integer;                       { increase value for next spot }
  389. begin
  390.    SpotInc := FSpotWidth + FSpotSpace;
  391.    SpotRect.Top := 0;
  392.    SpotRect.Bottom := FHeight;
  393.    if (FDirection = dirNormal) then
  394.    begin
  395.       SpotRect.Left := FFirstSpace;
  396.       SpotRect.Right := SpotRect.Left + FSpotWidth;             {Leerraum }
  397.    end
  398.    else
  399.    begin
  400.       SpotRect.Right := FWidth - FFirstSpace;
  401.       SpotRect.Left := SpotRect.Right - FSpotWidth;
  402.       SpotInc := -SpotInc;
  403.    end;
  404.    with DIB do
  405.    begin
  406.       DIB_SetTColor(FBar1Color);
  407.       for i := 1 to nSpots do                  { draw the highlited spots }
  408.       begin
  409.          if i > FPoint2Spot then DIB_SetTColor(FBar3Color)
  410.          else if i > FPoint1Spot then DIB_SetTColor(FBar2Color);
  411.          DIB_FillRectDoted(SpotRect,FActiveDoted);
  412.          OffsetRect(SpotRect, SpotInc, 0);
  413.       end;
  414.    end;
  415. end;
  416. {-- TMMLEDGauge ------------------------------------------------------}
  417. procedure TMMLEDGauge.DrawBarVertical(DIB: TMMDIBCanvas; nSpots: integer);
  418. Var
  419.    i: integer;
  420.    SpotRect: TRect;                                 { Spot draw rectangle }
  421.    SpotInc: integer;                       { increase value for next spot }
  422. begin
  423.    SpotInc := FSpotWidth + FSpotSpace;
  424.    SpotRect.Left := 0;
  425.    SpotRect.Right := FWidth;
  426.    with DIB do
  427.    begin
  428.       if (FDirection = dirNormal) then
  429.       begin
  430.          SpotRect.Bottom := FHeight - FFirstSpace;
  431.          SpotRect.Top := SpotRect.Bottom - FSpotWidth;
  432.          SpotInc := -SpotInc;
  433.       end
  434.       else
  435.       begin
  436.          SpotRect.Top := FFirstSpace;
  437.          SpotRect.Bottom := SpotRect.Top + FSpotWidth;
  438.       end;
  439.       DIB_SetTColor(FBar1Color);
  440.       for i := 1 to nSpots do                 { draw the highlited spots }
  441.       begin
  442.          if i > FPoint2Spot then DIB_SetTColor(FBar3Color)
  443.          else if i > FPoint1Spot then DIB_SetTColor(FBar2Color);
  444.          DIB_FillRectDoted(SpotRect,FActiveDoted);
  445.          OffsetRect(SpotRect, 0, SpotInc);
  446.       end;
  447.    end;
  448. end;
  449. {-- TMMLEDGauge ------------------------------------------------------}
  450. procedure TMMLEDGauge.SetBPP(aValue: integer);
  451. begin
  452.    if (aValue <> BitsPerPixel) then
  453.    begin
  454.       if (aValue <> 8) and (aValue <> 24) then
  455.          raise EMMDIBError.Create('Bitlength not supported yet');
  456.       FBarDIB.BitsPerPixel := aValue;
  457.       DIBCanvas.BitsPerPixel := aValue;
  458.       DrawInactiveSpots;
  459.       Invalidate;
  460.    end;
  461. end;
  462. {-- TMMLEDGauge ------------------------------------------------------}
  463. procedure TMMLEDGauge.DrawInactiveSpots;
  464. var
  465.    _Bar1,_Bar2,_Bar3: TColor;
  466.    _Active: Boolean;
  467. begin
  468.    if not (csLoading in ComponentState) and (FBarDIB <> nil) and not assigned(FOnDrawBar) then
  469.    with FBarDIB do
  470.    begin
  471.       DIB_InitDrawing;
  472.       DIB_SetTColor(Color);
  473.       DIB_Clear;
  474.       _Bar1 := FBar1Color;
  475.       _Bar2 := FBar2Color;
  476.       _Bar3 := FBar3Color;
  477.       _Active := FActiveDoted;
  478.       FBar1Color := FInact1Color;
  479.       FBar2Color := FInact2Color;
  480.       FBar3Color := FInact3Color;
  481.       FActiveDoted := FInactiveDoted;
  482.       case FKind of
  483.          gkHorizontal: DrawBarHorizontal(FBarDIB,FNumSpots);
  484.          gkVertical  : DrawBarVertical(FBarDIB,FNumSpots);
  485.       end;
  486.       FBar1Color := _Bar1;
  487.       FBar2Color := _Bar2;
  488.       FBar3Color := _Bar3;
  489.       FActiveDoted := _Active;
  490.       DIB_DoneDrawing;
  491.    end;
  492. end;
  493. {-- TMMLEDGauge ------------------------------------------------------}
  494. procedure TMMLEDGauge.SetOnDrawBar(aValue: TMMLEDDrawBar);
  495. begin
  496.    FOnDrawBar := aValue;
  497.    if not assigned(FOnDrawBar) then DrawInactiveSpots;
  498.    Invalidate;
  499. end;
  500. {-- TMMLEDGauge ------------------------------------------------------}
  501. procedure TMMLEDGauge.DrawBar(Dummy: Boolean);
  502. begin
  503.    DIBCanvas.DIB_InitDrawing;
  504.    if assigned(FOnDrawBar) then
  505.    begin
  506.       FOnDrawBar(Self,DIBCanvas,Rect(0,0,FWidth,FHeight),FData);
  507.    end
  508.    else
  509.    begin                                         { draw the background }
  510.       DIBCanvas.DIB_SetTColor(Color);
  511.       DIBCanvas.DIB_Clear;
  512.       DIBCanvas.DIB_CopyDIBBits(FBarDIB.Surface,0,0,FWidth,FHeight,0,0);
  513.       case FKind of                           { draw the bar to bitmap }
  514.           gkHorizontal: DrawBarHorizontal(DIBCanvas,FData);
  515.           gkVertical  : DrawBarVertical(DIBCanvas,FData);
  516.       end;
  517.    end;
  518.    DIBCanvas.DIB_BitBlt(Canvas.Handle,FClientRect,0,0); { copy to screen }
  519.    DIBCanvas.DIB_DoneDrawing;
  520. end;
  521. {-- TMMLEDGauge ------------------------------------------------------}
  522. Procedure TMMLEDGauge.Paint;
  523. begin
  524.    { draw the bevel }
  525.    inherited Paint;
  526.    DrawBar(True);
  527. end;
  528. end.