unit MyLabel;
interface
uses
Winapi.Windows,
Winapi.Messages, System.SysUtils, System.Classes,
Vcl.StdCtrls,
Vcl.Graphics,
Vcl.Controls;
const
CColorDefault: TColor = clRed;
CColorHover: TColor = clGreen;
type
TMyLabel =
class(TLabel)
private
{Private-Deklarationen}
FLastLabelColor: TColor;
FColorHover: TColor;
FColorActive: TColor;
FOnMouseMove: TNotifyEvent;
FOnMouseLeave: TNotifyEvent;
procedure setLastLabelColor(aLabel: TLabel);
function getLastLabelColor: TColor;
protected
{Protected-Deklarationen}
public
{Public-Deklarationen}
constructor Create(AOwner: TComponent);
override;
procedure CMMouseMove(
var Message: TMessage);
message CM_MOUSEENTER;
procedure CMMouseLeave(
var Message: TMessage);
message CM_MOUSELEAVE;
published
{Published-Deklarationen}
property ColorHover: TColor
read FColorHover
write FColorHover;
property ColorActive: TColor
read FColorActive
write FColorActive;
property OnMouseMove: TNotifyEvent
read FOnMouseMove
write FOnMouseMove;
property OnMouseLeave: TNotifyEvent
read FOnMouseLeave
write FOnMouseLeave;
end;
procedure register;
implementation
// Funktionen um die letzte Farbe eines Labels vor dem MouseMove-Event zwischenzuspeichern und wieder auszulesen
procedure TMyLabel.setLastLabelColor(aLabel: TLabel);
begin
if FLastLabelColor = -1
then
FLastLabelColor := aLabel.Font.Color;
end;
function TMyLabel.getLastLabelColor: TColor;
begin
Result := FLastLabelColor;
FLastLabelColor := -1;
end;
//
constructor TMyLabel.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Color := CColorHover;
ColorHover := CColorHover;
ColorActive := CColorHover;
end;
procedure TMyLabel.CMMouseMove(
var Message: TMessage);
begin
inherited;
if Assigned(FOnMouseMove)
then
begin
end;
end;
procedure TMyLabel.CMMouseLeave(
var Message: TMessage);
begin
inherited;
if Assigned(FOnMouseLeave)
then
begin
end;
end;
procedure register;
begin
RegisterComponents('
My Label', [TMyLabel]);
end;
end.