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 

menus y ventanas

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: menus y ventanas Responder citando

mi duda es la siguiente:
cuando se hace click con el boton derecho del raton sobre el caption de una ventana aparece un menu desplegable en donde se puede elegir minimizar la aplicacion, maximizar...
pues bien, lo que pretendo es insertar una nueva opcion en este menu desplegable. ¿como se hace esto?
no tengo ni idea. ¿alguien me ayuda?
Volver arriba
Mensaje    Asunto: Responder citando

Hola:

1.- Creamos un proyecto nuevo vacío para el ejemplo (TForm1)

2.- Añadimos el código siguiente en el constructor del Form. Lo que hace es añadir nuestra opción y un separador al menú de sistema del Form:
Código:
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    const String strOpcion = "Titulo de mi opción";
    MENUITEMINFO opcion = {
        sizeof(MENUITEMINFO),
        MIIM_TYPE | MIIM_STATE | MIIM_ID ,
        MFT_STRING,          // el tipo de menú es una cadena
        MFS_ENABLED,         // mostrar opción habilitada
        1111,                // identificador de nuestra opción
        NULL,                // no tiene submenu
        NULL,                // sin imagen de estado seleccionada
        NULL,                // sin imagen de estado deseleccionada
        0,                   // sin valor de usuario asociado
        strOpcion.c_str(),   // titulo de la opción
        0};                  // no se usa cuando el tipo de menu es MFT_STRING

    // Creamos un separador (no es necesario, solo lo pongo como ejemplo)
    MENUITEMINFO separador = {
        sizeof(MENUITEMINFO), MIIM_TYPE, MFT_SEPARATOR, 0,0,0,0,0,0,0,0};

    // Insertamos nuestra opción debajo de la opción "Cerrar"
    InsertMenuItem( GetSystemMenu(Handle,false), SC_CLOSE, true, &separador );
    InsertMenuItem( GetSystemMenu(Handle,false), SC_CLOSE, true, &opcion );
}


3.- Ahora tenemos que interceptar el mensaje WM_SYSCOMMAND y comprobar en el si la opción seleccionada coincide con el identificador que le hemos dado anteriormente (1111). Para ello añadimos la siguiente declaracion a la clase del Form debajo de 'private' por ejemplo:
Código:
...
private:   // User declarations
    void __fastcall WmSysCommand(TWMSysCommand &msg);
    BEGIN_MESSAGE_MAP
        MESSAGE_HANDLER(WM_SYSCOMMAND, TWMSysCommand, WmSysCommand)
    END_MESSAGE_MAP(TForm)
...

Y a continuación la implementamos:
Código:
void __fastcall TForm1::WmSysCommand(TWMSysCommand &msg)
{
    // Comprobamos si el identificador coincide con el de nuestra opción
    // Es importante usar identificadores inferiores a 0xF000 para evitar
    //   conflictos con los propios de Windows
    if( msg.CmdType == 1111 )
    {
        // Añadimos aquí el código que ejecutará nuestra opción
        ShowMessage("Se ha seleccionado mi nueva opción");
    }
    else
        TForm::Dispatch(&msg);
}


Y listo, ya tenemos nuestra nueva opción:


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

PLAS, PLAS, PLAS, este _leo es un fiera
_________________
Salu2
KAYETANO
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

muchisimas gracias _leo por tu ayuda
Volver arriba
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.