我做的一个阴影控件,可是很怪,我在FORM中设计时,修改它的CAPTION时,在屏幕的左上角上就会显示这人控件是CAPTIN?是什么原因 

解决方案 »

  1.   

    这是我的代码:unit ShadowLabel;interfaceuses
      SysUtils, Classes, Controls, StdCtrls,Messages,Windows,Graphics;type
      T3DEffect=(Normal,Raised,Lowered, Shadowed);
      TShadowLabel = class(TLabel)
      private
        FOffsetX:Integer;
        FOffsetY:Integer;
        FStyle3D:T3DEffect;
        procedure SetOffsetX(const Value: Integer);
        procedure SetOffsetY(const Value: Integer);
        procedure SetStyle3D(const Value: T3DEffect);  protected
        { Protected declarations }
      public
        Constructor Create(AOwner:TComponent);override;
        Destructor  Destroy;override;
        procedure DoDrawText(var Rect: TRect; Flags: Longint); override;
        { Public declarations }
      published
        property OffsetX:Integer read FOffsetX write SetOffsetX;
        property OffsetY:Integer read FOffsetY write SetOffsetY;
        property Style3D:T3DEffect read FStyle3D write SetStyle3D;
        { Published declarations }
      end;procedure Register;implementationprocedure Register;
    begin
      RegisterComponents('MyLib', [TShadowLabel]);
    end;{ TShadowLabel }
    procedure TShadowLabel.DoDrawText(var Rect:TRect;Flags:Longint);
    var i,j:integer;
    begin
     Inherited;
     i:=0;j:=0;
    // InflateRect(Rect,FOffsetX,FOffseY);
     Case FStyle3D of
     Raised:Canvas.TextOut(FOffsetX,FOffsetY,Caption);
     Lowered:Canvas.TextOut(FOffsetX,FOffsetY,Caption);
     Shadowed:begin
              while(i<FOffsetX) or (j<FOffsetY) do
              begin
                Canvas.TextOut(i,j,Caption);
                inc(i);inc(j);
              end;
    //          Canvas.Font.Color:=Color;
    //          Canvas.TextOut(i,j,Caption);
              end;
     end;end;Constructor TShadowLabel.Create(AOwner:TComponent);
    begin
     inherited;
     SetOffsetX(0);
     SetOffsetY(0);
     SetStyle3D(Normal);
    end;
    Destructor TShadowLabel.Destroy;
    begin
    // FCanvas.Free;
     Inherited;
    end;procedure TShadowLabel.SetOffsetX(const Value: Integer);
    begin
      FOffsetX := Value;
      invalidate;
    end;procedure TShadowLabel.SetOffsetY(const Value: Integer);
    begin
      FOffsetY := Value;
      invalidate;
    end;procedure TShadowLabel.SetStyle3D(const Value: T3DEffect);
    begin
      FStyle3D := Value;
      invalidate;
    end;
    end.