![]() |
TMenuItem mit OnSelect/MouseOver ?
Hallo,
Ich möchte in einem Menü/PopupMenü einen Event wenn die MenuEinträge zwar selektiert aber noch nicht ausgewählt sind. Manche Programme zeigen z.B. in der Statuszeile einen Hilfetext zum Menüeintrag. TMenuItem hat aber nur OnClick. |
Re: TMenuItem mit OnSelect/MouseOver ?
TMenuItem hat aber die Eigenschaft Hint, dem einen Text zuweisen und die Hint-Anzeige umleiten (Statusbar etc.)
|
Re: TMenuItem mit OnSelect/MouseOver ?
>die Hint-Anzeige umleiten
Wie kann man denn die Anzeige umleiten? Ausserdem hätte ich gerne einen generischen Event da die Anzeige in der Statuszeile nur ein Beispiel sein sollte. |
Re: TMenuItem mit OnSelect/MouseOver ?
Im Moment bin ich da jetzt auch überfragt, aber in den Delphi-Demos sind Beispiele, wo das auch vorkommt.
Stichwort Application.OnHint (oder Application.OnShowHint) lässt sich doch einer eigenen procedure zuweisen. |
Re: TMenuItem mit OnSelect/MouseOver ?
Wenns da nix fertiges gibt, einfach ne eigene Version ableiten und eigene Events für MouseEnter und MouseExit einbauen. Windows schickt jedem Fenster die MouseEnter-Message wenn der Mauscursor sich in das Fenster hineinbewegt und die MouseExit-Message wenn der Mauscursor den jeweiligen Fensterbereich wieder verlässt. So hab ich bei einigen meiner Controls ganz simpel einen Hovereffekt implementiert.
|
Re: TMenuItem mit OnSelect/MouseOver ?
Danke für die Info.
Zitat:
|
Re: TMenuItem mit OnSelect/MouseOver ?
Kann ich nachher mal rauskramen, ist schon länger her dass ich das mal gebraucht hab, muesste aber noch irgendwo in meinem Codearchiv liegen :)
|
Re: TMenuItem mit OnSelect/MouseOver ?
Hab mal versucht das hinzubekommen:
Delphi-Quellcode:
Die Events feuern aber nicht.
unit MenuItemEx;
interface uses Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms, Dialogs,ExtCtrls, menus; type TMenuItemEx=class (TMenuItem) private { Private declarations } FOnMouseLeave:TNotifyEvent; FOnMouseEnter:TNotifyEvent; procedure CM_MouseEnter( var msg:TMessage); message CM_MOUSEENTER; procedure CM_MouseLeave( var msg:TMessage); message CM_MOUSELEAVE; protected { Protected declarations } procedure DoMouseEnter;dynamic; procedure DoMouseLeave;dynamic; public { Public declarations } published { Published declarations } property OnMouseEnter:TNotifyEvent read FOnMouseEnter write FOnMouseEnter; property OnMouseLeave:TNotifyEvent read FOnMouseLeave write FOnMouseLeave; end; procedure Register; implementation procedure Register; begin RegisterComponents( 'Samples',[TMenuItemEx]); end; procedure TMenuItemEx.CM_MouseEnter( var msg:TMessage); begin DoMouseEnter; end; procedure TMenuItemEx.CM_MouseLeave( var msg:TMessage); begin DoMouseLeave; end; procedure TMenuItemEx.DoMouseEnter; begin if Assigned( FOnMouseEnter) then FOnMouseEnter( Self); end; procedure TMenuItemEx.DoMouseLeave; begin if Assigned( FOnMouseLeave) then FOnMouseLeave( Self); end; end. :wall: |
Re: TMenuItem mit OnSelect/MouseOver ?
Moin, moin,
auch hier bin ich kein Experte, aber muss es nicht statt
Delphi-Quellcode:
so deklariert werden?
procedure TMenuItemEx.DoMouseLeave;
begin if Assigned( FOnMouseLeave) then FOnMouseLeave( Self); end;
Delphi-Quellcode:
Gruß
procedure TMenuItemEx.DoMouseLeave;
begin if @OnMouseLeave<>nil then OnMouseLeave(Self); end; |
Re: TMenuItem mit OnSelect/MouseOver ?
Nö - wozu die Property nutzen, wenn er die Variable doch direkt handhaben kann auf die auch nur die Property zugreift? Durch deinen Code rufst nochmals zweimal den Getter der Property auf - um die direkt verwendbare - Variable zu erhalten.
|
Re: TMenuItem mit OnSelect/MouseOver ?
Hallo,
Zitat:
Gruß Hawkeye |
Re: TMenuItem mit OnSelect/MouseOver ?
Moin, moin,
sind dann WM_MOUSEHOVER und WM_MOUSELEAVE die richtigen Botschaften? |
Re: TMenuItem mit OnSelect/MouseOver ?
Zitat:
|
Re: TMenuItem mit OnSelect/MouseOver ?
Danke an alle.
Ich denke da war ich auf dem falschen Weg. WM_MENUSELECT ist wohl besser für meine Zwecke. Habe da etwas brauchbares gefunden: ![]() Edit: WM_MENUSELECT gibt aber nicht in Popup-Menu! Da wird Application.OnHint nützlich. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:40 Uhr. |
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