Delphi-PRAXiS
Seite 1 von 2  1 2      

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 Hover-Effekt für Panel (https://www.delphipraxis.net/83105-hover-effekt-fuer-panel.html)

Andreas L. 27. Dez 2006 16:11


Hover-Effekt für Panel
 
Hi,
ich möchte einen Panel eine Art Hover-Effekt geben. Das heißt ist die Maus über den Panel soll es eine andere Farbe haben als wenn die Maus nicht über den Panel ist.

Ich habe versucht das mit den OnMouseMove-Eregnis zu realisieren. Funktioniert jedoch nicht.

Delphi-Quellcode:
procedure Tfrm_Designer.pnl_ShowHideSideBarMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
var
 BarPosition: TPoint;
begin

 BarPosition := ClientToScreen(Point(pnl_ShowHideSideBar.Left, pnl_ShowHideSideBar.Top));

 //mouse is not in panel?
 if X > BarPosition.X + 8 then
  begin

   pnl_ShowHideSideBar.Color := $00D1D8DB;

  end
 else
  begin

   pnl_ShowHideSideBar.Color := clSkyBlue;

  end;

end;
Das Panel ist 8 Pixel breit.

Ich möchte nicht in jeden onMouseMove-Ereignis jeder Komponente die Farbe des Panels setzen. Auch möchte ich auf einen ressourceenlastigen Timer verzichten. Welche Möglichkeiten gibt es noch? onEnter und onExit habe ich auch schon probiert, geht auch nicht...

Ciao,
Andy

MrKnogge 27. Dez 2006 16:14

Re: Hover-Effekt für Panel
 
Hast du nicht ein OnMouseEnter-Ereigniss ?

Andreas L. 27. Dez 2006 16:16

Re: Hover-Effekt für Panel
 
Zitat:

Zitat von MrKnogge
Hast du nicht ein OnMouseEnter-Ereigniss ?

Nö, nur onMouseMove, onMouseDown und onMouseUp. Hab die Delphi 7 Personal. Kann man evtl. so ein Ereignis ergänzen (auch ohne den Source der VCL zu haben)?

Oder gibt es noch eine andere Möglichkeit

jbg 27. Dez 2006 16:20

Re: Hover-Effekt für Panel
 
Zitat:

Zitat von Andreas L.
onEnter und onExit habe ich auch schon probiert, geht auch nicht...

Das ist ja auch klar, denn OnEnter und OnExit beziehen sich auf den Focus. Und der ändert sich nicht, wenn man mit der Maus über ein Control fährt (obwohl, da gibt es irgendein Tool das das so macht, wird aber auf dauer sehr lästig).

Da ich annehme, dass du keine eigene Panel-Komponenten von TPanel ableiten willst, könntest du das so lösen:
Delphi-Quellcode:
private
  FOrgPanelWndProc: TWndMethod;

  procedure PanelWndProc(var Msg: TMessage);
end;

procedure TForm1.FormCreate(...);
begin
  FOrgPanelWndProc := Panel1.WindowProc;
  Panel1.WindowProc := PanelWndProc;
end;

procedure TForm1.FormDestroy(...);
begin
  Panel1.WindowProc := FOrgPanelWndProc;
end;

procedure TForm1.PanelWndProc(...);
begin
  FOrgPanelWndProc(Msg);
  case Msg.Msg of
    CM_MOUSEENTER:
      begin end; // Farbe ändern
    CM_MOUSELEAVE:
      begin end; // Farbe ändern
  end;
end;

Andreas L. 27. Dez 2006 16:23

Re: Hover-Effekt für Panel
 
Zitat:

Zitat von jbg
Zitat:

Zitat von Andreas L.
onEnter und onExit habe ich auch schon probiert, geht auch nicht...

Das ist ja auch klar, denn OnEnter und OnExit beziehen sich auf den Focus. Und der ändert sich nicht, wenn man mit der Maus über ein Control fährt (obwohl, da gibt es irgendein Tool das das so macht, wird aber auf dauer sehr lästig).

Da ich annehme, dass du keine eigene Panel-Komponenten von TPanel ableiten willst, könntest du das so lösen:
Delphi-Quellcode:
private
  FOrgPanelWndProc: TWndMethod;

  procedure PanelWndProc(var Msg: TMessage);
end;

procedure TForm1.FormCreate(...);
begin
  FOrgPanelWndProc := Panel1.WindowProc;
  Panel1.WindowProc := PanelWndProc;
end;

procedure TForm1.FormDestroy(...);
begin
  Panel1.WindowProc := FOrgPanelWndProc;
end;

procedure TForm1.PanelWndProc(...);
begin
  FOrgPanelWndProc(Msg);
  case Msg.Msg of
    CM_MOUSEENTER:
      begin end; // Farbe ändern
    CM_MOUSELEAVE:
      begin end; // Farbe ändern
  end;
end;

Ich werde das gleich mal ausprobieren :-)

Danke :mrgreen:

jbg 27. Dez 2006 16:46

Re: Hover-Effekt für Panel
 
Zitat:

Zitat von Andreas L.
Ich werde das gleich mal ausprobieren :-)

Dazu musst du aber nicht meinen ganzen Beitrag zitieren. Das hasse ich schon bei Emails und Newsgroup Beiträgen, wo ich erst mal suchen muss wo denn nun der hinzugefügte Text steht.

Andreas L. 28. Jan 2007 11:48

Re: Hover-Effekt für Panel
 
Wie kann ich mir ein TImage ableiten und die OnMouseEnter und onMouseLeave Ereignisse integrieren? Am besten wäre natürlich diese Routinen in die vorhandene TImage zu integrieren. Dann brauche ich nicht alle Bilder ersetzen. Mir stehen auch die VCL-Sourcen zur Verfügung (von turbo Delphi). Die darf ich doch auch für D7PE verwenden, oder? Also müsste ich nur eine bestimmte Unit ersetzen?

Khabarakh 28. Jan 2007 12:37

Re: Hover-Effekt für Panel
 
Die VCL würde ich nicht ändern, einfach die Ableitung erstellen und dann einmal mit Suchen & Ersetzen über die DFM schrubben.

Andreas L. 28. Jan 2007 12:55

Re: Hover-Effekt für Panel
 
Zitat:

Zitat von Khabarakh
Die VCL würde ich nicht ändern, einfach die Ableitung erstellen und dann einmal mit Suchen & Ersetzen über die DFM schrubben.

Und wie leite ich ab?

dataspider 28. Jan 2007 13:02

Re: Hover-Effekt für Panel
 
@Andreas,

ich hatte mal vor langer Zeit für jemanden ein Beispiel gemacht:
sample
Vielleicht hilft es dir ja weiter...

Cu, Frank


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:17 Uhr.
Seite 1 von 2  1 2      

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