Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-11-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
TActionMainMenuBar con TPopupMenu, una pequeña retribución.

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

{ +------------------------------------------------------+
  | MouseEvent: Obtiene posición actual del mouse  y     |
  |             despliega el TPopupMenu asociado si      |
  |             la posición está dentro del área que     |
  |             ocupa el ActionMainMenu.                 |
  +------------------------------------------------------+ }
procedure TActionMainMenuBar.MouseEvent(var Msg: TMsg; var Handled: Boolean);
var
  Pt: TPoint;
begin
  if Msg.message = WM_RBUTTONDOWN then // Botón derecho presionado ?
  begin
    Pt:= Mouse.CursorPos; // Obtener posición actual del mouse    
    if (Pt.X >= FRect.Left)and(Pt.Y >= FRect.Top)and // Está sobre el área ?
       (Pt.X <=FRect.Right)and(Pt.Y <= FRect.Bottom) then
      FPopupMenu.Popup(Pt.X, Pt.Y);                  // Desplegar PopupMenu
  end;
end;

{ +------------------------------------------------------+
  | GetRect: Obtiene las coordenadas de las esquinas     |
  |          superior izquierda e inferior derecha del   |
  | ActionMainMenu.                                      |
  | Las almacena en la variable privada FRect.           |
  +------------------------------------------------------+ }
procedure TActionMainMenuBar.GetRect;
var
  P: TPoint;
begin
  P:= ClientOrigin; // Coordenadas esquina superior izqierda
  FRect.Left:= P.X; // Coordenada horizontal esquina sup. izquierda
  FRect.Top:=  P.Y; // Coordenada vertical esquina sup. izquierda
  FRect.Right:= P.X + Width;   // Coordenada horizontal esquina inf. derecha
  FRect.Bottom:= P.Y + Height; // Coordenada vertical esquina inf. derecha
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.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problema con TActionMainMenuBar jcheco Varios 2 28-12-2005 23:52:31
TPopupMenu relacionado con un combo Perio Varios 1 16-12-2005 09:50:33
TPopupMenu dinámico walrus OOP 5 05-11-2004 14:10:25
Tpopupmenu ckaki Varios 5 05-05-2004 18:58:31
sobre TActionMainMenuBar dabas Varios 6 07-09-2003 17:43:33


La franja horaria es GMT +2. Ahora son las 23:15:07.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi