| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
jaquemate Lt Cmdr


Registrado: 30 Sep 2002Mensajes: 110
|
Publicado: Sab 15 Nov, 2003 11:37 pm Asunto: Herencia y PopupMenu |
|
|
Hola chicos, estoy creando una aplicación cuyo Form principal es del tipo MDI. He puesto un TPopUpMenu para que cuando se pulse con el botón derecho del ratón en la ventana MDI, aparezca el típico menú de contexto para organizar las ventanas hijas en cascada, mosaico, etc... El problema es que cuando creo una ventana hija normalmente hago esto:
| Código: |
FormHijo = new TFormHijo (this); //this es la ventana padre MDI
...
|
Es decir, creo la formulario hijo que es del tipo MDI Child y hago que el propietario sea la formulario principal MDI. Pues bien, el problema es que el formulario hijo hereda las propiedades del formulario que lo crea, entre ellas la propiedad PopupMenu con lo cual, cuando pulso con el botón derecho del ratón en el formulario hijo también me aparece el menú para organizar ventanas en cascada, mosaico, etc... La pregunta por tanto es: ¿cómo hago para que no aparezca el menú de contexto de la ventana hija?
Espero haberme explicado, gracias. |
|
| Volver arriba |
|
 |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Dom 16 Nov, 2003 1:42 am Asunto: |
|
|
Acabo de hacer la prueba y tienes razón .
Lo único que se me ocurre es insertar un nuevo TPopUpMenu vacío (sin items definidos) dentro del Form hijo y en las propiedades del Form hijo asignarle este nuevo popup vacio, así cuando ejecutas el botón secundario encima del Form hijo no salta ningún popup. Es un poco chapuza pero bueno..
Saludos. _________________ ¡ADELANTE CON ESTE SUPER FORO! |
|
| Volver arriba |
|
 |
jaquemate Lt Cmdr


Registrado: 30 Sep 2002Mensajes: 110
|
Publicado: Mar 25 Nov, 2003 2:49 am Asunto: |
|
|
Muchas gracias por tu respuesta Tugui, pero me gustaría controlar el que aparezca el PopupMenu en el Form MDI padre. El tema es que hay muchos Form MDI Child diferentes y hacer eso que dices en cada uno de ellos, aunque funciona perfectamente, es muy laborioso.
Sigo buscando alguna solución más elegante. He intentado definir el evento OnContextPopup del Form MDI padre como virtual, pero por lo visto, los eventos de la sección __published: no puede ser virtuales.
También he intentado dejar la propiedad PopupMenu vacía y asignarla en el constructor del MDI padre:
| Código: |
__fastcall TfrmMenu::TfrmMenu(TComponent* Owner) : TForm(Owner)
{
PopupMenu = PopupMenu1;
}
|
pero esto tampoco funciona, porque las características del Form se copian en el momento en que se crea con new el Form MDI Child.
Si a alguien se le ocurre algo... Gracias. |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mar 25 Nov, 2003 3:58 am Asunto: |
|
|
Puedes probar con el siguiente código en el evento OnContextPopup de la ventana MDI padre solamente:
| Código: |
char c[255];
GetClassName(WindowFromPoint(ClientToScreen(MousePos)), c, sizeof(c));
Handled = CompareStr(ClassName(), c);
|
Lo que hace es comparar el nombre de clase de ventana sobre la que hacemos click con el nombre de clase de la ventana padre y si no coincide no dejamos que se muestre el popupmenu. |
|
| Volver arriba |
|
 |
jaquemate Lt Cmdr


Registrado: 30 Sep 2002Mensajes: 110
|
Publicado: Mar 25 Nov, 2003 12:16 pm Asunto: |
|
|
Muchísimas gracias por tu ayuda... Era eso precisamente lo que quería.
Un saludo y adelante con el foro. |
|
| Volver arriba |
|
 |
|