Einzelnen Beitrag anzeigen

Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#6

AW: OnMouseOver bei Array of TPanel

  Alt 2. Okt 2010, 14:38
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
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler

Geändert von xZise ( 2. Okt 2010 um 14:47 Uhr)
  Mit Zitat antworten Zitat