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 OnMouseEnter in eigener Komponente benutzen (https://www.delphipraxis.net/93545-onmouseenter-eigener-komponente-benutzen.html)

Andreas L. 7. Jun 2007 11:12


OnMouseEnter in eigener Komponente benutzen
 
Hi,
ich versuche bei einer eigene Komponente einen hover-Effekt zu bauen. Dazu brauche ich die Eregnisse OnMouseEnter und OnMouseLeave. ich habe folgendes veruscht:

Delphi-Quellcode:
type
  TRoundedHoverLabel = class(TShape)
  private
    { Private-Deklarationen }
    ...
    fOnMouseEnter: TNotifyEvent;
  protected
    { Protected-Deklarationen }
    ...
    procedure SetOnMouseEnter(Event: TNotifyEvent);
  public
    { Public-Deklarationen }
  published
    { Published-Deklarationen }
    constructor Create(AOwner: TComponent); override;
    ...
    property OnMouseEnter: TNotifyEvent read FOnMouseEnter write SetOnMouseEnter;
  end;

...
...

procedure TRoundedHoverLabel.SetOnMouseEnter(Event: TNotifyEvent);
begin

 fOnMouseEnter := Event;

 if not fDown then //fdown ist true wenn der "gedrückt"-style aktiv ist
  begin

   Pen.Color := clGradientInactiveCaption;
   Pen.Mode := pmNotXor;
   Pen.Style := psSolid;

  end;

end;
Das Shape verändert sich aber nicht beim drüberfahren. Wieso?

ciao,
Andy

Gausi 7. Jun 2007 11:29

Re: OnMouseEnter in eigener Komponente benutzen
 
Das sollte in etwa so gehen, wie ich es hier vor kurzem geposted habe. Dir fehlt einfach, der Komponente mitzuteilen, welche Nachricht fürs MouseEnter verantwortlich ist ;-)

Muetze1 7. Jun 2007 11:30

Re: OnMouseEnter in eigener Komponente benutzen
 
Du hast nur Behandlungsroutinen definiert welche man von aussen (z.B. über Objektinspektor) nutzen kann um Aktionen darauf hin auszuführen. Du brauchst aber die Ereignisse selber. Wenn die Komponente dir sowas nicht bietet, musst du dir selber diese Events besorgen oder wen finden, der dich entsprechend benachrichtigt. Dies ist z.B. vorhanden in der VCL: nutze den Erhalt der Nachricht CM_MOUSEENTER und CM_MOUSELEAVE um deine Aktionen auszuführen.

Andreas L. 7. Jun 2007 14:29

Re: OnMouseEnter in eigener Komponente benutzen
 
Ahhh, jetzt gehts. Danke ;-)

Welche Message brauch ich eigentlich um eine Aktion beim neuzeichnen des Shapes auszuführen? CN_DRAWITEM geht nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:05 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