Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Hoover Effekt bei Panel geht nicht. OnMouseLeave fehlt... (https://www.delphipraxis.net/7660-hoover-effekt-bei-panel-geht-nicht-onmouseleave-fehlt.html)

flomei 18. Aug 2003 15:38


Hoover Effekt bei Panel geht nicht. OnMouseLeave fehlt...
 
Hallo, ich habe hier ein kleines Problem. Ich habe ein Panel bei dem BevelOuter = bvNone und BevelInner = bvLowered sind. Wenn sich die Maus über das Panel bewegt möchte ich gerne das BevelInner zu bvRaised wird und beim Verlassen wieder auf bvNone geht. Wie mache ich das am Besten? Mir fehlt beim Panel die OnMouseLeave Eigenschaft um den Wert zurückzusetzen. Wie kann ich das trotzdem machen?
Ist sicherlich nur ein klitzekleines Problem aber ich wäre trotzdem für jede Hilfe dankbar!

MfG Florian :hi:

Sharky 18. Aug 2003 15:43

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

Zitat von flomei
.....
Ist sicherlich nur ein klitzekleines Problem aber ich wäre trotzdem für jede Hilfe dankbar!

MfG Florian :hi:


Hai flomai,

Schaue dir mal diesen Thread an:
MouseLeav. Da hatte wir das selbe mit einem TLabel.

Alexander 18. Aug 2003 15:43

Re: Hoover Effekt bei Panel geht nicht. OnMouseLeave fehlt..
 
das hier sollte dir helfen:
http://www.swissdelphicenter.ch/de/showcode.php?id=1068

[edit] Wieder zu spät :mrgreen:
Ich kann mich einfach nicht an die GEburtagsfarben gewöhnen :mrgreen:

Sharky 18. Aug 2003 15:50

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

Zitat von alexander
das ....
Ich kann mich einfach nicht an die GEburtagsfarben gewöhnen :mrgreen:

Hihi.... und weil mir die Farben so gut gefallen:

Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Panel1: TPanel;
  private
    { Private-Deklarationen }
  public
    procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.CMMouseEnter(var Message: TMessage);
var
  ptWork : TPoint;
begin
  GetCursorPos(ptWork);
  if WindowFromPoint(ptWork) = Panel1.Handle then //Maus ist über dem Panel1
  begin
   Panel1.BevelInner := bvRaised;
  end;
end;

procedure TForm1.CMMouseLeave(var Message: TMessage);
var
  ptWork : TPoint;
begin
  GetCursorPos(ptWork);
  if WindowFromPoint(ptWork) <> Panel1.Handle then //Maus verlässt das Pannel1
  begin
   Panel1.BevelInner := bvNone;
  end;
end;
Dieser Code macht für Panel1 den Hoover Effekt wie flomei in möchte.

flomei 18. Aug 2003 23:03

Re: Hoover Effekt bei Panel geht nicht. OnMouseLeave fehlt..
 
Wie mach ich das denn bei mehreren Panels? Ich hab probiert die Namen umzuändern aber das klappt nicht.
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;
Fehlermeldung:
Zitat:

[Error] MainFormUnit.pas(32): Duplicate message method index
[Error] MainFormUnit.pas(33): Duplicate message method index
32 und 33 sind die beiden Zeilen in denen das nochmal vorkommt.

Schonmal Danke!

MfG Florian :hi:

Sharky 19. Aug 2003 07:31

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

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz