Das hat mir geholfen danke.
Das mit dem MouseLeave scheint nicht ganz zu klappen. Die Farbe die das Label vorher hatte wird nicht wieder zugewiesen.
Mein Versuch
Delphi-Quellcode:
function TMyLabel.GetLastLabelColor: TColor;
begin
Result := FLastLabelColor;
FLastLabelColor := -1;
end;
procedure TMyLabel.SetLastLabelColor(aLabel: TLabel);
begin
if FLastLabelColor = -1 then
FLastLabelColor := aLabel.Font.Color;
end;
constructor TMyLabel.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FLastLabelColor := 1;
// usw.
end;
procedure TMyLabel.SetLabelMouseProperties(Sender: TLabel; Color: TColor; Cursor: TCursor = crDefault; Styles: TFontStyles = []);
begin
TLabel(Sender).Font.Color := Color;
TLabel(Sender).Cursor := Cursor;
TLabel(Sender).Font.Style := Styles;
end;
procedure TMyLabel.CMMouseEnter(var Message: TMessage);
begin
inherited;
SetLastLabelColor(Self); // alte Farbe zwischenspeichern?
SetLabelMouseProperties(Self, CColorHover, crHandPoint);
if Assigned(FOnMouseEnter) then
FOnMouseEnter(Self);
end;
procedure TMyLabel.CMMouseLeave(var Message: TMessage);
begin
inherited;
SetLabelMouseProperties(Self, GetLastLabelColor); // alte, zwischengespeicherte Farbe wieder setzen
if Assigned(FOnMouseLeave) then
FOnMouseLeave(Self);
end;
Statt der zwischengespeicherten Farbe (clRed) wird aber schwarz zurückgeschrieben.