Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

MDI a Popup
Ir a página 1, 2  Siguiente
 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: MDI a Popup Responder citando

Hola amigos del foro
Me he encontrado con la necesidad de crear formularios MDI, cuando creo los formularios para verlos en un menu creo un MainMenu, asocio WindowMenu del formualario a el item del MainMenu y asi puedo ver una lista de ventanas MDI abiertas. Pero por cuestiones de estetica no puedo agregar un menu al programa y quiciera poder agregar esas ventans MDI a un PopupMenu, pero por mas que intento no se como agregarle un Item a un PopupMenu, alguien me puede ayudar en este tema por favor...el codigo que tengo para crear las ventanas MDI es asi

funcion
Código:
bool __fastcall TfrmMain::OpenChild (String name){
   for (int i = 0; i <MDIChildCount>Name == name) {
         return true;
      }
   }
   return false;
}


llamada a la ventana MDI
Código:

if (!OpenChild("frmMarca")) {
      Application->CreateForm(__classid(TfrmMarca), &frmMarca);
   }else
       frmMarca->BringToFront();

_________________
Todos somos ignorantes, lo que no todos ignoramos lo mismo...
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Código:
TMenuItem* Item;
Item = new TMenuItem(this);
Item->Caption = "Lo que quieras";
Item->OnClick = PopupMenuClick; // Función evento de tratamiento que decidas;
PopupMenu->Items->Add(Item);


Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Hola sacafandra, gracioas por la respuesta, ahora me surge una duda y es como le hago a lo del evento, imaginate que tenga 10 forms MDI y al crearse estas yo le este agregando un item a popupMenu por cada ventana, luego quiciera Traer al frente BringToFront() la ventana X y como vez ya me lio.No se cuantas ventanas MDI creara el usurio y por lo tanto no se cuantos eventos on click debo crear....? Tienes alguna sugerencia.?
_________________
Todos somos ignorantes, lo que no todos ignoramos lo mismo...
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

ifrit escribió:
...No se cuantas ventanas MDI creara el usurio y por lo tanto no se cuantos eventos on click debo crear....? Tienes alguna sugerencia.?


Si, crea un sólo evento.

El Evento OnPopup es del tipo TNotifyEvent , es decir, recive el objeto que lo envía. Dicho en otras palabras la función de definiría así:
Código:
void __fastcall TForm1::PopupMenuPopup(TObject *Sender);

De forma que Sender te indica el MenuItem:
Código:
TMenuItem* Item = static_cast<TMenuItem*>(Sender);

De esta forma tu evento podría ser algo así:
Código:
void __fastcall TForm1::PopupMenuPopup(TObject *Sender)
{
   TMenuItem* Item = static_cast<TMenuItem*>(Sender);
   // Tu código....
}


Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Hola escafandra, gracias por responder nuevamente, ya vi el codigo y lo probe, efectivamente funciona ok, muchas gracias.
Wink
_________________
Todos somos ignorantes, lo que no todos ignoramos lo mismo...
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Escafandra, como podria recorrer el popupmenu para saber los distintos captions de los menuitems agregados?
_________________
Todos somos ignorantes, lo que no todos ignoramos lo mismo...
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

ifrit escribió:
Escafandra, como podria recorrer el popupmenu para saber los distintos captions de los menuitems agregados?

Código:

for(int n=0; n<PopupMenu->Items->Count; n++){
     PopupMenu->Items->Item[n];
}


Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Hola escafandra, no me da resultado
1-Poniendo el codigo tal y cual me lo das me dice :
[BCC32 Error] Unit1.cpp(21): E2316 'Item' is not a member of 'TMenuItem'
Full parser context
Unit1.cpp(1Cool: parsing: void _fastcall TForm1::Button1Click(TObject *)

2-si pongo
Código:
Items[n]
en vez de
Código:
Item[n]
me compila pero me dice: acces violation of code....
3-si pongo
Código:
ShowMessage(PopupMenu->Items->Items[n]->Caption);
me da el mismo error..
Alguna sugerencia migo?
_________________
Todos somos ignorantes, lo que no todos ignoramos lo mismo...
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Código:
for(int n=0; n<PopupMenu->Items->Count; n++)
     ShowMessage(PopupMenu->Items->Items[n]->Caption);


Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Es cierto escafandra, funciona muy bien . He estado trabajando algo y me quedan problemas , en el form Principal (el padre) creo los form MDI y agrego un item al popupmenu, cuando cierro el form MDI con
Código:
Action = caFree;
antes de eso recorro los items del form Padre y elimino el item que tenga igual caption que el nombre que el form MDI pero al ir al formulario padre el popup sigue mostrandome el caption del item eliminado, como si no ubiese ocurrido nada..., lo compuebo pues tengo un bootn con la opcion popupmenu al popup donde agregue el item...Alguna idea.
Muchas gracias de antemano.
_________________
Todos somos ignorantes, lo que no todos ignoramos lo mismo...
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Código:
for(int n=0; n<PopupMenu->Items->Count; n++)
     if(Borrado ==  PopupMenu->Items->Items[n]->Caption){
          PopupMenu1->Items->Delete(n);
          break;
     }


Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Escafandra ese mismo es el codigo que tengo escrito en el form MDI haciendo referencia al PopupMenu del formulario padre, pero nada...
Te cuento por pasos:
1-Creo un formulario MDI desde el Form1
Código:
if (!Open("Form4")) {
   Application->CreateForm(__classid(TForm4),&Form4);

   TMenuItem* Item;
   Item = new TMenuItem(this);
   Item->Caption = Form4->Caption;
   Item->OnClick = PopupMenuPopup;
   PopupMenu1->Items->Add(Item);


}else
   Form3->BringToFront();


2-Hago click derecho sobre el Form1 que tiene asignado como su PopupMenu el PopupMenu1 (al mismo que acaba de agregarsele un item) y me aparece Form4 (que es el caption del form MDI que se creo).

3-En el evento On close del Form4
Código:
for(int n=0; n<Form1>PopupMenu1->Items->Count; n++)
    if("Form4" ==  Form1->PopupMenu1->Items->Items[n]->Caption){
        Form1->PopupMenu1->Items->Delete(n);
        break;
    }
Action = caFree;


4-Cuando hago clic derecho sobre el Form1 aun sigue apareciendo Form4 (es decir que aun sigue el Item con Caption "Form4" en el PopupMenu1), es algo ilogico porque supuestamente acabo de eliminar ese Item no?

Bueno escafandra es ese el problema, espero me puedas seguri ayudando , muchas gracias.
_________________
Todos somos ignorantes, lo que no todos ignoramos lo mismo...
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Para crear un Form en tiempo de ejecución debes tenerlo fuera de la lista de formularios autocreados de tu proyecto. La forma de crear el form es simplemente:
Código:
new Form4(this);  // siendo this el dueño contenedor MDI y Form4 un MDIchild


ifrit escribió:
Escafandra ese mismo es el codigo que tengo escrito en el form MDI haciendo referencia al PopupMenu del formulario padre, pero nada...

En el evento On close del Form4
Código:
for(int n=0; n<Form1>PopupMenu1->Items->Count; n++)
    if("Form4" ==  Form1->PopupMenu1->Items->Items[n]->Caption){
        Form1->PopupMenu1->Items->Delete(n);
        break;
    }
Action = caFree;



¿Has comprobado que ese código se ejecuta? ¿Cuantos PopupMenu tienes?. ¿El PopupMenu del que hablas es miembro de Form1?.

Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Hola escafandra,

Cita:
Para crear un Form en tiempo de ejecución debes tenerlo fuera de la lista de formularios autocreados de tu proyecto.

Eso lo tengo presente, y es asi como lo tengo.


Cita:
La forma de crear el form es simplemente:new Form4(this); // siendo this el dueño contenedor MDI y Form4 un MDIchild

Se que asi se pueden crear , pero yo los creo de la otra forma que mostre al inicio del tema. Si crees que no debo crearlos asi , sino como tu me indicas aca, ok sin problemas lo asumo, pero lo hacia de la otra forma pues fue como aprendi y me era mas sencillo hacer la pregunta por si estaba el formulario creado llevarlo al frente.

Cita:
¿Has comprobado que ese código se ejecuta?

Si ya lo probe, le puse unos puntos de ruptura y un ShowMessage(...) y mustra que lo ejecuta pero no hace lo deseado.

Cita:
¿Cuantos PopupMenu tienes? ¿El PopupMenu del que hablas es miembro de Form1?

Cada vez que me mandas codigo creo un proyecto desde cero para probar todo el codigo en limpio, solo tengo un PopupMenu que es miembro del Form1 (el form padre)


Te cuento algo muy curioso, si le doy click derecho al boton que tiene asignado el PopupMenu antes de crear la ventana MDI no mustra nada, creo la ventana y al dar clic derecho dice Form4, elimino la ventana y no lo dice mas...Ahora si primero creo la ventana MDI y luego doy clic derecho dice Form4, eleimino la ventana MDI, y doy clic derecho aun dice Form4...recorro el popup como me enseñastes y aun mustra el caption Form4 Crying or Very sad Esto me tiene molesto...y me pone a dudar mucho...
Escafandra, ya hicistes algunas pruebas??
Bueno epero me puedas seguir ayudando.[/quote]
_________________
Todos somos ignorantes, lo que no todos ignoramos lo mismo...
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

ifrit escribió:

Te cuento algo muy curioso, si le doy click derecho al boton que tiene asignado el PopupMenu antes de crear la ventana MDI no mustra nada, creo la ventana y al dar clic derecho dice Form4, elimino la ventana y no lo dice mas...Ahora si primero creo la ventana MDI y luego doy clic derecho dice Form4, eleimino la ventana MDI, y doy clic derecho aun dice Form4...recorro el popup como me enseñastes y aun mustra el caption Form4 Crying or Very sad Esto me tiene molesto...y me pone a dudar mucho...
Escafandra, ya hicistes algunas pruebas??


Las pruebas que he hecho me funcionan bien. Claro que no están en tu entorno.

No se exactamente que es lo que haces. No se si tu popupmenu está creado dinámicamente o en fase de diseño. En este caso deberías crearlo en fase de diseño y añadir los Items dinámicamente. Te comento esto porque parece que te falla si no muestras tu menú antes de crear una MDIChild. Eso puede ser debido a algún tipo de error al crear el menú que impida una correcta comunicación con él.

Sin conocer mas no te puedo comentar mas cosas.

Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.