 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
masc Invitado
|
Publicado: Mie 18 Sep, 2002 8:46 pm Asunto: menus y ventanas |
|
|
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 |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mie 02 Oct, 2002 6:54 am Asunto: |
|
|
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 |
|
 |
KAYETANO Ens

Registrado: 04 Sep 2002Mensajes: 37
|
Publicado: Mie 02 Oct, 2002 3:32 pm Asunto: |
|
|
PLAS, PLAS, PLAS, este _leo es un fiera _________________ Salu2
KAYETANO |
|
| Volver arriba |
|
 |
masc Invitado
|
Publicado: Sab 05 Oct, 2002 9:19 am Asunto: |
|
|
| muchisimas gracias _leo por tu ayuda |
|
| Volver arriba |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|