Kurz:
Code: Alles auswählen
TMyClass = class(TCustomcontrol);
...
FLabel:TLabel;
FShape:Tshape;
...
end;
Richtig heisst für mich: OnMouseEnter nur auslösen, wenn die Mauszeigerposition von ausserhalb der Komponente auf eine
Mauszeigerposition innerhalb der Komponente wechselt.
Da nun FLabel und FShape zur Komponente gehört soll bei einem Mauszeigerposiionswechsel zwischen diesen Unterkomponenten kein MouseEnter-Event ausgeführt werden.
Die Möglichkeit eine zusätzliche Transparente Unterkomponente über meine gesamte Komponente zu legen find ich irgendwie nicht so sehr elegant. Es könnte passieren, dass ich FLabel und FShape in anderen Dingen später noch getrennt behandeln möchte.
Noch paar Zeilen Code als Vorlage und damit klar ist was schon vorhanden ist.
Code: Alles auswählen
constructor TMyClass.Create(AOwner: TComponent);
begin
...
FShape.OnMouseEnter:=@MouseEnterTrans;
FLabel.OnMouseEnter:=@MouseEnterTrans;
...
end;
procedure TMyClass.MouseEnterTrans(Sender: TObject);
begin
if Assigned(OnMouseEnter) then OnMouseEnter(self as TObject);
end;
procedure TMyClass.MouseLeaveTrans(Sender: TObject);
begin
if Assigned(OnMouseLeave) then OnMouseLeave(self as TObject);
end;
procedure TMyClass.MouseEnter;
begin
inherited MouseEnter;
end;
procedure TMyClass.MouseLeave;
begin
inherited MouseLeave;
end;
function TMyClass.GetMouseEntered: Boolean;
begin
Result:=FLabel.MouseEntered or FShape.MouseEntered or TControl(self).MouseEntered;
end;