Hace unas semanas me ví en la necesidad de desplegar un TPopupMenu asociado a un TActionMainMenuBar y en Delphi 7,
este componente no trae la posibilidad de hacerlo.
La actualización 'no oficial' del componente, al menos a mí, no me funcionó. Así que hice unas líneas de código que lo logran.
Para usarlo sólo es necesario incluir en la cláusula uses de la interface la unidad PMenuAMMB.
Espero que pueda serle de utilidad a aquellos que usan Delphi 7.
Código Delphi
[-]
unit PMenuAMMB;
interface
uses Windows, Messages, Controls, Menus, ActnMenus;
type
TActionMainMenuBar = class(ActnMenus.TActionMainMenuBar)
private
FRect: TRect;
FPopupMenu: TPopupMenu;
public
property PopupMenu: TPopupMenu read FPopupMenu write FPopupMenu;
procedure MouseEvent(var Msg: TMsg; var Handled: Boolean);
procedure GetRect;
end;
implementation
procedure TActionMainMenuBar.MouseEvent(var Msg: TMsg; var Handled: Boolean);
var
Pt: TPoint;
begin
if Msg.message = WM_RBUTTONDOWN then begin
Pt:= Mouse.CursorPos; if (Pt.X >= FRect.Left)and(Pt.Y >= FRect.Top)and (Pt.X <=FRect.Right)and(Pt.Y <= FRect.Bottom) then
FPopupMenu.Popup(Pt.X, Pt.Y); end;
end;
procedure TActionMainMenuBar.GetRect;
var
P: TPoint;
begin
P:= ClientOrigin; FRect.Left:= P.X; FRect.Top:= P.Y; FRect.Right:= P.X + Width; FRect.Bottom:= P.Y + Height; end;
Modo de uso:
Código Delphi
[-]
Unit1;
interface
uses Windows,...,PMenuAMMB;
type
TForm1 = class(TForm)
ActionMainMenuBar1: TActionMainMenuBar;
PopupMenu1: TPopupMenu;
...
procedure FormShow(Sender: TObject);
end;
implementation
...
procedure TForm1.FormShow(Sender: TObject);
begin
ActionMainMenuBar1.PopupMenu:= PopupMenu1;
Application.OnMessage:= ActionMainMenuBar1.MouseEvent;
ActionMainMenuBar1.GetRect;
end;
...
Saludos.