Einzelnen Beitrag anzeigen

Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Hoover Effekt bei Panel geht nicht. OnMouseLeave fehlt..

  Alt 19. Aug 2003, 08:31
Zitat von flomei:
Wie mach ich das denn bei mehreren Panels? ...
Delphi-Quellcode:
//Hoover fürs erste Panel
    procedure PnlCheckLengthHooverOn(var Message: TMessage); message CM_MOUSEENTER;
    procedure PnlCheckLengthHooverOff(var Message: TMessage); message CM_MOUSELEAVE;
//Hoover fürs zweite Panel
    procedure PnlResetHooverOn(var Message: TMessage); message CM_MOUSEENTER;
    procedure PnlResetHooverOff(var Message: TMessage); message CM_MOUSELEAVE;
....
Hai flomei,

die proceduren gelten für die gesamte Form! Die Auswertung "von welchem Object die Message kommt" wir in der Procedure gemacht.

Delphi-Quellcode:
procedure TForm1.CMMouseEnter(var Message: TMessage);
var
  ptWork : TPoint;
begin
  GetCursorPos(ptWork);
  if WindowFromPoint(ptWork) = Panel1.Handle then
  begin
   Panel1.BevelInner := bvRaised;
  end;
  if WindowFromPoint(ptWork) = Panel2.Handle then
  begin
   Panel2.BevelInner := bvRaised;
  end;
end;
Das geht sicher auch besser. Aber das müssen die die API-Profis sagen

Oder Du erzeugst dir gleich ein Eigenes Pannel mit den Eigenschaften.

Delphi-Quellcode:
type
  myPanel = class (TPanel)
   private
    procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  end;

  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    panel1 : myPanel;
    panel2 : myPanel;
    panel3 : myPanel;
  public
    { Public-Deklarationen }

  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure myPanel.CMMouseEnter(var Message: TMessage);
begin
  BevelInner := bvRaised;
end;

procedure myPanel.CMMouseLeave(var Message: TMessage);
begin
  BevelInner := bvNone;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 panel1 := myPanel.Create(nil);
 panel1.Left := 100;
 panel1.Top := 50;
 panel1.Width := 100;
 panel1.Height := 100;
 panel1.Show;
 panel1.Parent := Form1;
end;
Wenn Du Dir das noch in eine Komponente packst hast Du alles was Du möchtest.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat