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 TMenuItem mit OnSelect/MouseOver ? (https://www.delphipraxis.net/100126-tmenuitem-mit-onselect-mouseover.html)

HPW 22. Sep 2007 19:14


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.

Progman 22. Sep 2007 19:20

Re: TMenuItem mit OnSelect/MouseOver ?
 
TMenuItem hat aber die Eigenschaft Hint, dem einen Text zuweisen und die Hint-Anzeige umleiten (Statusbar etc.)

HPW 22. Sep 2007 19:24

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.

Progman 22. Sep 2007 20:54

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.

OldGrumpy 23. Sep 2007 12:59

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.

HPW 24. Sep 2007 06:21

Re: TMenuItem mit OnSelect/MouseOver ?
 
Danke für die Info.

Zitat:

So hab ich bei einigen meiner Controls ganz simpel einen Hovereffekt implementiert.
Könnte man davon mal ein Code-Beispiel sehen, um auf den richtigen Weg zu kommen?

OldGrumpy 24. Sep 2007 07:25

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 :)

HPW 24. Sep 2007 15:45

Re: TMenuItem mit OnSelect/MouseOver ?
 
Hab mal versucht das hinzubekommen:
Delphi-Quellcode:
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.
Die Events feuern aber nicht.
:wall:

pstruh 24. Sep 2007 15:54

Re: TMenuItem mit OnSelect/MouseOver ?
 
Moin, moin,

auch hier bin ich kein Experte, aber muss es nicht statt

Delphi-Quellcode:
procedure TMenuItemEx.DoMouseLeave;
begin
  if Assigned( FOnMouseLeave) then FOnMouseLeave( Self);
end;
so deklariert werden?

Delphi-Quellcode:
procedure TMenuItemEx.DoMouseLeave;
begin
  if @OnMouseLeave<>nil then OnMouseLeave(Self);
end;
Gruß

Muetze1 24. Sep 2007 16:07

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:02 Uhr.
Seite 1 von 2  1 2      

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