Vamos a ver que te parece esto:
Código:
unit Blinklbl;
interface
uses
Classes, StdCtrls, ExtCtrls;
type
TAnimLabel = class(TLabel)
private
FVelocidad: integer;
FTimer: TTimer;
procedure SetVelocidad(Valor: Integer);
protected
procedure Animar(Sender: TObject); virtual; abstract;
public
constructor Create(AOwner : TComponent); override;
destructor Destroy; override;
published
property Velocidad: Integer read FVelocidad write SetVelocidad;
end;
TBlinkLabel = class(TAnimLabel)
protected
procedure Animar(Sender: TObject); override;
end;
TMarqueeLabel = class(TAnimLabel)
private
FInvertir: Boolean;
protected
procedure Animar(Sender: TObject); override;
published
property Invertir: Boolean read FInvertir write FInvertir;
end;
procedure Register;
implementation
{ TAnimLabel }
constructor TAnimLabel.Create(AOwner : TComponent);
begin
inherited Create(AOwner);
FTimer := TTimer.Create(Self);
FTimer.OnTimer:= Animar;
FVelocidad:= 400;
FTimer.Interval:= FVelocidad;
FTimer.Enabled:= True;
end;
destructor TAnimLabel.Destroy;
begin
FTimer.Free;
inherited destroy;
end;
procedure TAnimLabel.SetVelocidad(Valor: Integer);
begin
If FVelocidad <> Valor then
begin
if Valor <= 0 then
begin
FVelocidad:= 0;
FTimer.Enabled:= FALSE;
end else
begin
FVelocidad:= 0;
FTimer.Enabled:= FALSE;
end;
FTimer.Interval:= FVelocidad;
end;
end;
{ TBlinkLabel }
procedure TBlinkLabel.Animar(Sender: TObject);
begin
Visible:= not(Visible);
end;
{ TMarqueeLabel }
procedure TMarqueeLabel.Animar(Sender: TObject);
begin
if FInvertir then
Caption:= Copy(Caption,Length(Caption),1) + Copy(Caption,1,Length(Caption)-1)
else
Caption:= Copy(Caption,2,MAXINT) + Copy(Caption,1,1);
end;
procedure Register;
begin
RegisterComponents('Curso', [TBlinkLabel]);
RegisterComponents('Curso', [TMarqueeLabel]);
end;
end.
Creamos un componente TAnimLabel, que nos servirá como base para los otros dos: TBlinkLabel y TMarqueeLabel. El componente TMaruqeeLabel anima cualquier texto que tenga como caption.