Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
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
  #2  
Antiguo 22-11-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
¿Retribución/Contribución? ¿Desliz?

Gracias por el código ecfisa.
Si te apetece puedes subirlo al FTP. Será una buena forma de no perderlo.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
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
Hola Neftali.

No es un desliz, es precisamente eso: retribuir, compensar, gratificar mínimamente todo lo que me ha dado el Club.

¿ No pensarías que esperaba una retribucion ???? jajaja

Te agradecería si me orientas un poco como subirlo al FTP.

Saludos.

Última edición por ecfisa fecha: 22-11-2010 a las 19:35:43.
Responder Con Cita
  #4  
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
Siguiendo el consejo y gracias a la ayuda de Casimiro el código ya está en el [ FTP ].

Saludos.

Última edición por ecfisa fecha: 22-11-2010 a las 21:53:11.
Responder Con Cita
  #5  
Antiguo 23-11-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por ecfisa Ver Mensaje
¿ No pensarías que esperaba una retribucion ???? jajaja
No, ya me imaginaba que no...

Más bien había pensado en lo otro... en un desliz.
Gracias por el aporte.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 24-11-2010
Delfino Delfino is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 974
Poder: 21
Delfino Va por buen camino
Cita:
La actualización 'no oficial' del componente, al menos a mí, no me funcionó
Has instalado el TPopupActionBar incluido en dicha actualización???
__________________
¿Microsoft? No, gracias..
Responder Con Cita
  #7  
Antiguo 24-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
Cita:
Empezado por Delfino Ver Mensaje
Has instalado el TPopupActionBar incluido en dicha actualización???
Hola Delfino.

Si hablamos de la misma actualización, si. Después de muchas pruebas no pude hacer que funcione .
De todos modos ya no sigo buscando ya que el problema se solucionó con pocas líneas y sin componentes de terceros.
Igualmente agradezco muchísimo tu interés.

Saludos.

Última edición por ecfisa fecha: 24-11-2010 a las 21:47:20.
Responder Con Cita
  #8  
Antiguo 25-11-2010
Delfino Delfino is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 974
Poder: 21
Delfino Va por buen camino
Lo he instalado varias veces sin ningún problema siguiendo las instrucciones. De todos modos a partir de Delphi2007 esta incluido en la paleta de componentes con todos los bugs corregidos..
__________________
¿Microsoft? No, gracias..
Responder Con Cita
  #9  
Antiguo 26-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
Si Delfino, escuché que venía en las nuevas versiones y mejorado pero por ahora me están faltando $$$ para saltar a otra.
Tal vez el año entrante...

En realidad no lo utilizo por cuestión de estética si no por que necesitaba que en una aplicación corrieran varios TMainMenu y la solución fue
poner en cada MDIChild un TActionMainMenu si no; hubiera seguido con el TMainMenu...

Nuevamente muchas gracias por tu interés.

Un saludo.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 29-12-2005 00:52:31
TPopupMenu relacionado con un combo Perio Varios 1 16-12-2005 10:50:33
TPopupMenu dinámico walrus OOP 5 05-11-2004 15:10:25
Tpopupmenu ckaki Varios 5 05-05-2004 19:58:31
sobre TActionMainMenuBar dabas Varios 6 07-09-2003 18:43:33


La franja horaria es GMT +2. Ahora son las 19:36:52.


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