Naja du hast zwei Möglichkeiten:
Entweder du fängst innerhalb der Klasse das Ereignis ab, oder du weist allen Panels das gleiche Ereignis zu, und nimmst dann stahlis Code.
Beim ersten kannst du im Create
OnMouseOverEnter auf eine Methode deiner eigenen Klasse setzen, aber dann kannst du das Ereignis nicht mehr anderweitig nutzen. Eine andere Möglichkeit wäre, da die aufrufende Methode (meißt "
DoMouseOverEnter()" oder so) zu überschreiben.
Ein Beispiel:
Delphi-Quellcode:
type
TColoredPanel = class(TPanel)
private
procedure MouseEnterEvent(...);
public
constructor Create(...);
end;
constructor TColoredPanel.Create(...);
begin
inherited;
OnMouseEnter := MouseEnterEvent;
end;
procedure TColoredPanel.MouseEnterEvent(...);
begin
Visible := false;
end;
Beim Überschreiben musst du die Methode finden, die das Event aufruft. Das ist beim Panel:
procedure TControl.CMMouseEnter(var Message: TMessage);. Der Rest ist also nur geraten:
Delphi-Quellcode:
type
TColoredPanel = class(TPanel)
private
procedure MyMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
end;
procedure TColoredPanel.MyMouseEnter(var Message: TMessage);
begin
// Ursprüngliche Methode aufrufen
CMMouseEnter(Message);
if (Message.LParam = 0) then
Visible := false;
end;
Bei den anderen setzt du einfach das OnMouseOver, wie eine normale Variable. D.h. es ist quasi so, als würdest du das Panel manuell auf das Forumlar platzieren. Du machst das halt eben aber automatisiert.
MfG
Fabian