| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Lun 10 Sep, 2007 9:54 am Asunto: ¿Cómo sé qué opcíón del menú he elegido? |
|
|
Buenas a todos. Con código que encontré en el foro organizo un PopupMenu con el contenido de una tabla de la siguiente forma:
| Código: | TMenuItem *mItem;
mCorreo->Items->Clear();
Query->Close();
Query->SQL->Text = "SELECT Aviso, Concepto FROM Avisos WHERE Menu = 'S' ORDER BY Concepto DESC";
Query->Open();
while (!Query->Eof)
{
mItem = NewItem(Trim(Query->FieldByName("Concepto")->AsString), NULL, false, true, NULL, 0, FormatFloat("'Aviso'0", Query->FieldByName("Aviso")->AsInteger));
mItem->Tag = Query->FieldByName("Aviso")->AsInteger;
mItem->OnClick = PreCor;
mCorreo->Items->Insert(0, mItem);
Query->Next();
}
mItem = NewItem("-", NULL, false, true, NULL, 0, "Separador");
mCorreo->Items->Insert(0, mItem);
mItem = NewItem("Redactar", NULL, false, true, NULL, 0, "Redactar");
mItem->OnClick = Redactar;
mCorreo->Items->Insert(0, mItem); |
Ahora me asalta una duda: Cuando se ejecuta el evento OnClick efectivamente va a la función declarada, pero ¿cómo hago para saber que opción del menú se ha pinchado? Todas las opciones hacen lo mismo: mandar un mensaje por correo electrónico pero cada una con un texto diferente que se guarda en la tabla Avisos. _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
juanma Cmdr

Registrado: 17 Nov 2005Mensajes: 127Ubicación: Almeria - España
|
Publicado: Lun 10 Sep, 2007 10:49 am Asunto: |
|
|
En el Onclick mira el tag:
int nV = (dynamic_cast<TMenuItem>(Sender))->Tag; |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mie 12 Sep, 2007 7:54 am Asunto: |
|
|
No me funciona. Y seguro que algo estoy haciendo mal. El evento OnClick apunta a una función que he definido, igual para todos, en la que decidiré la acción a ejecutar en función del ítem elegido en el menú; sin embargo, no logro que compile.
Si pongo la instrucción tal cual me ha sugerido Juanma
| Código: | (dynamic_cast<TMenuItem>(Sender))->Tag |
me responde:
| Cita: | | E2031 Cannot cast from 'TObject *' to 'TMenuItem' |
Y si pongo el nombre del menú donde voy introduciendo las opciones (mCorreo), entonces me dice:
| Cita: | | E2303 Type name expected |
¿Qué puedo estar haciendo mal? _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
juanma Cmdr

Registrado: 17 Nov 2005Mensajes: 127Ubicación: Almeria - España
|
Publicado: Mie 12 Sep, 2007 8:59 am Asunto: |
|
|
Lo siento, lo escribí mal...
Prueba con:
| Código: | int nV = (dynamic_cast<TMenuItem>(Sender))->Tag; |
(me comí el *) |
|
| Volver arriba |
|
 |
juanma Cmdr

Registrado: 17 Nov 2005Mensajes: 127Ubicación: Almeria - España
|
Publicado: Mie 12 Sep, 2007 9:03 am Asunto: |
|
|
| Código: | int nV = (dynamic_cast<TMenuItem>(Sender))->Tag;
|
en realidad se lo comió esto, porque ha vuelto a fallar.
Por si acaso lo reescribo, despues del TMenuItem esta el *
( dynamic_cast <TMenuItem>( Sender ) )->Tag; |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Jue 13 Sep, 2007 4:58 am Asunto: |
|
|
Tambien funciona de la siguiente manera aun que lo que hacemos aqui es "Reinterpretar" un tipo de datos al que deseas y heredando (inherit) las funciones y atributos miembro de la clase recipiente
| Código: | (reinterpret_cast<TMenuItem*>(Sender))->Tag |
_________________
 |
|
| Volver arriba |
|
 |
|